人大金仓数据库KingbaseES 兼容MYSQL自增列先容

嚴華  金牌会员 | 2024-6-10 10:29:44 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 673|帖子 673|积分 2019

关键字:


自增列、人大金仓、KingbaseES
什么是自增列

Mysql可以通过auto_increment关键字,实现列数据自增,一般用于单表的唯一标识列,常见的有主键,每张表最多只能有一个自增列。
自增列支持哪些数据类型

自增列的类型必须是整型或浮点型,其中整型包括;tinyint, smallint, mediumint, int, bigint,serial列(体现同 bigint auto_increment)以及对应的无符号类型,浮点型包括:float和double,除此之外的类型均不支持。
自增列支持类型
值域
Tinyint
1-127
smallint
1- 32767
mediumint
1-8388607
int
1-2147483647
Bigint/ serial
1-9223372036854775807
float
1-16777216
double
1-9007199254740992
自增列有哪些限制


  • 每张表中只能有唯一一个自增列。
  • 自增列必须是主键、唯一键。
  • 不能为自增列指定非空默认值。
  • 不能在自增列上创建check束缚。
  • 可以在自增列上添加NOT NULL、NULL以及外键束缚,自增列和它们没有相关性。
在表上定义自增列有还以下行为:

  • 当指定自增列属性AUTO_INCREMENT时,总是会隐式添加NOT NULL束缚。如果自增列是唯一键或唯一键中的一列时,自增列上终极的NULL束缚状态取决于NULL、NOT NULL和AUTO_INCREMENT三者中在SQL语句中排在最后的子句。
  • 可以在自增列上创建外键,其DML行为与普通列雷同,即当自增列值违反外键束缚时报错。
自增列语法

  1. CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT
  2. EXISTS ] table_name ( [
  3. { column_name data_type [ INVISIBLE | VISIBLE ] [ COLLATE collation ] [ column_constraint [ ... ] ]
  4. | table_constraint
  5. | LIKE source_table [ like_option ... ] }
  6. [, ... ]
  7. ] )
  8. [ INHERITS ( parent_table [, ... ] ) ]
  9. [ PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [
  10. COLLATE collation ] [ opclass ] [, ... ] ) [ partition_extented_spec ] ]
  11. [ USING method ]
  12. [ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS | WITH ROWID]
  13. [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
  14. [ WITH ( ONCOMMIT = value ) ]
  15. [ TABLESPACE tablespace_name ]
  16. [ { ENABLE | DISABLE } [ VALIDATE | NOVALIDATE ] constraint [ ... ] ]
  17. [ ENCRYPTED [BY tablekey ]]
  18. [ AUTO_INCREMENT [=] value ]
  19. column_constraint:=
  20. [ CONSTRAINT constraint_name ]
  21. { NOT NULL |
  22. NULL |
  23. CHECK ( expression ) [ NO INHERIT ] |
  24. DEFAULT default_expr |
  25. GENERATED ALWAYS AS ( generation_expr ) STORED |
  26. GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] |
  27. IDENTITY [ ( NumericOnly , NumericOnly ) ] |
  28. UNIQUE index_parameters |
  29. PRIMARY KEY index_parameters |
  30. AUTO_INCREMENT |
  31. REFERENCES reftable [ ( refcolumn ) ]
  32. [ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
  33. [ ON DELETE referential_action ]
  34. [ ON UPDATE referential_action ]
  35. }
  36. [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
  37. [ { ENABLE | DISABLE } [ VALIDATE | NOVALIDATE ] ]
复制代码

使用说明:

  • 在同一列上,天生列属性GENERATED ALWAYS AS ( generation_expr ) STORED和标识列属性GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY,均不可以与自增列属性AUTO_INCREMENT联合使用,否则语句实行报错。
  • 每张表中只能定义唯一一个AUTO_INCREMENT自增列,否则语句实行报错。
  • 自增列必须是主键或唯一键,如果主键或唯一键由多列组成,自增列必须是其中的第一列,否则语句实行报错。
  • 不能为自增列指定非空默认值,否则语句实行报错。
  • check束缚也不能包含自增列,否则语句实行报错。
  • 可以在自增列上添加NOT NULL、NULL以及外键束缚。
  • 当指定自增列属性AUTO_INCREMENT时,总是会隐式添加NOT NULL束缚。如果自增列是唯一键或唯一键中的一列时,自增列上终极的NULL束缚状态取决于NULL、NOT NULL和AUTO_INCREMENT三者中在SQL语句中排在最后的子句。
  • 表属性AUTO_INCREMENT为自增列初始值,由“AUTO_INCREMENT [=] value”子句设置,若省略该子句,则自增列初始默以为1。value的值域为自增列序列的值域。当value小于0时语句实行报错。当value值为小数时,value值被截断取整。当value等于0或小于自增列序列的当前值时,该值被忽略。当value大于自增列序列的最大值时,value被截断为自增列序列的最大值。
  • 支持在分区表上定义自增列,自增列可以作为分区键的一部分。不支持直接向包含自增列的分区表分区直接插入数据。
兼容MYSQL自增列使用

示例1:
  1. drop table if exists t1;
  2. create table t1(c1 serial, c2 varchar(10));
  3. \dS+ T1;
  4. insert into t1 values(1,'a');
  5. insert into t1 values(null,'b');
  6. insert into t1(c2) values('c');
  7. select * from t1;
复制代码



示例2:
  1. set sql_mode= ONLY_FULL_GROUP_BY,ANSI_QUOTES;
  2. show sql_mode;
  3. drop table if exists t2;
  4. create table t2(c1 int ,c2 int auto_increment primary key);
  5. insert into t2(c2) values(0);
  6. insert into t2(c2) values(0);
  7. insert into t2(c2) values(0);
  8. select * from t2;
复制代码



示例3:
  1. Set sql_mode=ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO,ANSI_QUOTES;
  2. show sql_mode;
  3. create table t2(c1 int ,c2 int auto_increment primary key);
  4. insert into t2(c2) values(0);
  5. insert into t2(c2) values(0);
  6. insert into t2(c2) values(0);
  7. select * from t2;
复制代码



示例4:
  1. drop table if exists t1;
  2. create table t1(c1 bigint auto_increment unique, c2 varchar(10)) auto_increment=5;
  3. insert into t1 values(1,'a');
  4. insert into t1 values(null,'b');
  5. insert into t1(c2) values('b');
  6. select * from t1;
复制代码



示例5:
  1. set auto_increment_offset=3;
  2. set auto_increment_increment=10;
  3. show auto_increment_offset;
  4. show auto_increment_increment;
  5. drop table if exists t1;
  6. create table t1(id serial,c2 varchar(10));
  7. insert into t1(c2) values('a');
  8. insert into t1(c2) values('b');
  9. insert into t1(c2) values('c');
  10. select * from t1;
复制代码



参考资料


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

嚴華

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表