MySQL CREATE 语句附加功能

原创
2024/12/16 15:01
阅读数 11

本文为墨天轮数据库管理服务团队原创内容,如需转载请联系小墨(VX:modb666)并注明来源。


作者:崔虎龙

墨天轮数据库管理服务MySQL技术专家

长期服务于金融游戏、物流等行业数据中心。擅长MySQL,Redis,MongoDB高可用设计和运维故障处理、备份恢复、升级迁移、性能优化


在MySQL中,CREATE 语句主要用于创建数据库对象(如数据库、表、索引、视图等)的结构。然而,在MySQL官方文档中, 提供了一些附加功能和选项,可以在创建这些对象时进一步提高其灵活性和功能。
下面抽取对InnoDB引擎有效,同时生产环境中可以实际使用补助选项进行介绍
CREATE语句的附加option如下:

   
   
   

CREATE TABLE
。。。
table_option: {
AUTOEXTEND_SIZE [=] value
| COMPRESSION [=] {'ZLIB' | 'LZ4' | 'NONE'}
| CONNECTION [=] 'connect_string'
| {DATA | INDEX} DIRECTORY [=] 'absolute path to directory'
| ENGINE_ATTRIBUTE [=] 'string'
| START TRANSACTION
| STATS_AUTO_RECALC [=] {DEFAULT | 0 | 1}
| STATS_PERSISTENT [=] {DEFAULT | 0 | 1}
| STATS_SAMPLE_PAGES [=] value
。。。
}

具体介绍这些Option的使用方法和作用。

1

AUTOEXTEND_SIZE

通过指定AUTOEXTEND_SIZE选项,可以配置每个表或通用表空间的文件扩展量。

   
   
   
#表
CREATE TABLE t1 (c1 INT) AUTOEXTEND_SIZE = 4M;
#表空间
CREATE TABLESPACE ts1 AUTOEXTEND_SIZE = 4M;


作用:配置更大的扩展大小可以帮助避免碎片化,并促进大量数据的摄入。

2

STATS_PERSISTENT

指定是否为InnoDB表启用持久统计信息。值1启用表的持久统计信息,而值0关闭此功能。发出ANALYZE TABLE语句以计算统计数据,再将统计数据加载到系统表中。跟全局参数innodb_stats_persistent同等效果。

   
   
   

CREATE TABLE `t1` (
`id` bigint auto_increment,
`Name` varchar(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB, STATS_PERSISTENT=1;

作用:对于某些特殊表,可以选择性进行持久化。

3

STATS_AUTO_RECALC

InnoDB表的持久统计信息。当表中10%的数据发生变化时,值1会导致重新计算统计数据。值0阻止此表的自动重新计算;使用此设置,在生成大量数据后,发出ANALYZE TABLE语句以重新计算统计数据。跟全局参数innodb_stats_auto_recalc同等效果。

   
   
   

CREATE TABLE `t1` (
`id` bigint auto_increment,
`Name` varchar(255),
PRIMARY KEY (`id`)
) ENGINE=InnoDB, STATS_AUTO_RECALC=1;

作用:对于某些特殊表,可以选择性进行持久化。

4

STATS_SAMPLE_PAGES

在估计索引列的基数和其他统计信息(如ANALYZE TABLE计算的统计信息)时要采样的索引页数。

   
   
   

mysql> show variables like '%innodb_stats_persistent_sample_pages%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| innodb_stats_persistent_sample_pages | 20 |
+--------------------------------------+-------+
1 row in set (0.00 sec)

作用:对于某些特殊表,为了获得更准确的评估值,可以采取更多的页。

5

CONNECTION

FEDERATED表的连接字符串,MySQL的链接服务器LinkedServer。

   
   
   

mysql> CREATE TABLE `t2` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) ,
KEY `name` (`name`)
) ENGINE=FEDERATED CONNECTION='mysql://root:123456@127.0.0.1:3410/db1/t1'

作用:实现简单的Link服务功能。

6

{DATA | INDEX} DIRECTORY

允许在数据目录之外创建表,必须启用innodb_file_per_table变量才能使用DATA DIRECTORY子句。必须指定完整目录路径

   
   
   

CREATE TABLE t1 (c1 INT PRIMARY KEY) DATA DIRECTORY = '/external/directory';

作用:指定除DATA目录外的路径。

7

COMPRESSION

用于InnoDB表的页面级压缩的压缩算法。支持的值包括Zlib、LZ4和None。COMPRESSION属性是通过透明页面压缩功能引入的。页面压缩仅支持驻留在每个表的文件表空间中的InnoDB表,并且仅在支持稀疏文件和打孔的Linux和Windows平台上可用。

   
   
   

CREATE TABLE t1 (c1 INT) COMPRESSION="zlib";

作用:更少的空间占比,但CPU负载会有提升。

8

ENGINE_ATTRIBUTE

用于指定主存储引擎和辅助存储引擎的表属性。这些选项保留供将来使用。

   
   
   

CREATE TABLE `t1` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB COMMENT='ENGINE_ATTRIBUTE=ROW_FORMAT=COMPRESSED' ;

作用:将来~

9

START TRANSACTION

CREATE TABLE作为事务进行提交,之后需要执行COMMIT和ROLLBACK语句。同时允许CREATE。。。SELECT作为一个原子操作,记录binlog内容。

   
   
   

mysql> CREATE TABLE `t2` ( `id` int DEFAULT NULL ) ENGINE=InnoDB START TRANSACTION;
Query OK, 0 rows affected (0.03 sec)

#提示COMMIT 或 ROLLBACK
mysql> SHOW TABLES;
ERROR 3977 (HY000): Only BINLOG INSERT, COMMIT and ROLLBACK statements are allowed after CREATE TABLE with START TRANSACTION statement.

mysql> COMMIT;

CREATE TABLE。。。SELECT 语句。原子DDL语句:


   
   
   

#5.7.44 版本执行失败
mysql> CREATE TABLE `t2` ( `id` int DEFAULT NULL ) ENGINE=InnoDB SELECT id FROM T1;
ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.

#8.0.40版本执行成功
mysql > CREATE TABLE `t2` ( `id` int DEFAULT NULL ) ENGINE=InnoDB SELECT id FROM T1;
Query OK, 2 rows affected (0.04 sec)
Records: 2 Duplicates: 0 Warnings: 0

8.0版本binlog文件解析

shell> mysqlbinlog --no-defaults --base64-output=decode-rows -v -v mysql-bin.000001

作用:CREATE TABLE。。。SELECT 保证一致。

总 结

通过MySQL在创建数据库对象时提供的一些附加功能和选项的示例。可以大大提高数据库的灵活性,不同场景合理使用。


参考:

https://dev.mysql.com/doc/refman/8.4/en/create-table.html

THE END

墨天轮从乐知乐享的数据库技术社区蓄势出发,全面升级,提供多类型数据库管理服务。墨天轮数据库管理服务旨在为用户构建信赖可托付的数据库环境,并为数据库厂商提供中立的生态支持。

服务官网:https://www.modb.pro/service

点击进入作者个人主页

本文分享自微信公众号 - 墨天轮(enmocs)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部