mysql中SERIAL和AUTO_INCREMENT有什么区别

时间:2013-11-16 18:16:04

标签: mysql

我遇到过两种方法来自动增加mysql中的id。

一个是 SERIAL ,另一个是 AUTOINCREMENT

所以假设我想创建一个表格myfriends。 我可以用两种方式创建它:

1)

mysql> create table myfriends(id int primary key auto_increment,frnd_name varchar(50) not null);

2)

mysql> create table myfriends(id serial primary key,frnd_name varchar(50) not null);

两者有什么区别?

OR

任何人都有优势吗?

请帮助。

3 个答案:

答案 0 :(得分:49)

根据docs

  

SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。

因此,在创建对SERIAL PK的引用时要小心,因为该引用列必须是这种类型。

答案 1 :(得分:10)

AUTO_INCREMENT 是任何数字类型(int或float)的特定列的属性,有符号和无符号。插入行时,它会自动分配序号,因此您不必(例如,使用LAST_INSERT_ID())。见http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

SERIAL 是一个别名,它结合了列类型转换(具体为BIGINT),AUTO_INCREMENTUNSIGNED以及特定列的其他属性(请参阅下面的文档引用)。见http://dev.mysql.com/doc/refman/5.5/en/numeric-type-overview.html

  

SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。

     

整数列定义中的SERIAL DEFAULT VALUE是NOT NULL AUTO_INCREMENT UNIQUE的别名。

答案 2 :(得分:1)

来自mysql doc

  

SERIAL是BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE的别名。

     

整数列定义中的SERIAL DEFAULT VALUE是一个   NOT NULL AUTO_INCREMENT UNIQUE的别名。

如果没有为AUTO_INCREMENT列指定值,MySQL会自动分配序列号。您还可以显式为列分配NULL或0以生成序列号。删除行时,MySQL不会自动降低自动增量值。原因是:

  • 破坏数据完整性的危险(想象多个用户执行 删除或插入...可能会出现加倍的条目或更糟糕的情况)
  • 使用主从复制时可能会发生错误 交易