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

时间:2016-08-29 13:06:30

标签: mysql sql

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

CacheStore

但是当你想要更改表的自动增量变量时,你需要一个不同的语法:

SET CHARACTER_SET_RESULTS = 'utf8';

这让我想知道如果它如果如下会更加一致:

ALTER TABLE foobar AUTO_INCREMENT=1;

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

  

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

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

2 个答案:

答案 0 :(得分:3)

  变量赋值的

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是整个服务器/数据库的操作。您无法仅为特定表格设置AUTO_INCREMENTSETAUTO_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

答案 1 :(得分:2)

使用SET可以更改与特定表无关的mysql变量。

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

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