繁体   English   中英

为什么使用ALTER TABLE更改AUTO_INCREMENT变量?

[英]Why is ALTER TABLE used for changing AUTO_INCREMENT variable?

使用MySQL,当您想要更改密码或字符集时,可以按以下步骤进行操作:

SET CHARACTER_SET_RESULTS = 'utf8';

但是,当您要更改表的autoincrement变量时,需要使用不同的语法:

ALTER TABLE foobar AUTO_INCREMENT=1;

这使我想知道,是否如下所示会更加一致:

SET AUTO_INCREMENT=1;

因为某些SET操作适用于表。 但我认为选择此语法必须有一些原因。 查看文档时,发现以下内容:

ALTER TABLE更改表的结构。 例如,您可以添加或删除列,创建或销毁索引,更改现有列的类型或重命名列或表本身。 您还可以更改特征,例如用于表或表注释的存储引擎。

但是我想用SET关键字也可以更改表的结构? 如果我弄错了,请纠正我。

变量分配的SET语法使您可以将值分配给影响服务器或客户端操作的不同类型的变量:

  • 系统变量。 请参见第6.1.4节“服务器系统变量”。 也可以在服务器启动时设置系统变量,如第6.1.5节“使用系统变量”中所述。
  • 用户定义的变量。 请参见第10.4节“用户定义的变量”。
  • 存储过程和函数参数,以及存储程序局部变量。 请参见第14.6.4节“存储程序中的变量”。

资料来源: http : //dev.mysql.com/doc/refman/5.7/en/set-variable.html

SET是整个服务器/数据库的操作。 您不能仅对特定表使用SET设置AUTO_INCREMENT AUTO_INCREMENT信息存储在表本身中。 这不是全局变量,因为某些表可以具有AUTO_INCREMENT=1而其他表可以具有AUTO_INCREMENT=[another-int-value]

要以非1的AUTO_INCREMENT值开头,请使用CREATE TABLEALTER TABLE设置该值,如下所示: ALTER TABLE tbl AUTO_INCREMENT = 100;

资料来源: http : //dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html

使用SET可以更改未绑定到特定表的mysql变量。

如果要更改auto_increment变量,请为特定表进行更改。 这就是为什么您需要使用ALTER TABLE语法的原因。

另外,您使用create table设置的任何内容都可以使用ALTER TABLE更新。 创建表时设置了auto_increment。 如果未设置,则默认为1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM