试图更好地理解 MySQL ALTER 语法

Trying to better understand MySQL ALTER syntax

我正在通过阅读本书 "Head First SQL" 来学习 MySQL,但我遇到了障碍。我似乎无法理解下面的代码。具体来说,我有几个问题。

我遇到的错误可能是过时代码的结果吗?这本书是2007年出版的,所以我不确定代码是否过时了。

非常感谢所有和任何建议。感谢您的时间!

代码: 改变 TABLE table_name 重命名为 new_table_name、

ALTER TABLE new_table_name
ADD COLUMN column1 INT NOT NULL AUTO_INCREMENT FIRST, 

ADD PRIMARY KEY(column1), 

ALTER TABLE new_table_name
ADD COLUMN column2 VARCHAR(16) SECOND, 

CHANGE COLUMN column3 new_column3 VARCHAR(20), 
MODIFY COLUMN column4 AFTER column3, 

MODIFY COLUMN column5 SIXTH, 

CHANGE COLUMN column6 DECIMAL(7,2);
  • 使用分号分隔语句;
  • 注意依赖于前一个结果的语句。

您使用的示例代码已损坏ADD COLUMNCHANGE COLUMNMODIFY COLUMNFIRST 关键字是特例;例如,没有类似的 SECOND 关键字。第一列之后的列必须描述为属于 AFTER another_column.

此外,出于某种原因,第二个 ALTER TABLE 已被滑入此语句的中间。实际语法中没有这种不一致;这只是你书中的一个错误。

最后,MODIFY COLUMN 更改必须包括新的列类型。 (如果 ALTER 的目标只是将列移动到 table 中的另一个位置,则可以指定列的当前类型。)

The official documentation for the ALTER TABLE command值得一读。很长,但是很详细。 (而且,更好的是,它 正确 。)

这是查询的更正版本,带有注释。请注意,我还没有在真实的 table 上测试过这个查询,所以我不确定它是否完全正确。 (特别是,我将 column4column5 的类型保留为 SOME_TYPE,因为我不知道它们的类型应该是什么。)

ALTER TABLE new_table_name
    ADD COLUMN column1 INT NOT NULL AUTO_INCREMENT FIRST, 
    ADD PRIMARY KEY(column1), 
    ADD COLUMN column2 VARCHAR(16) AFTER column1,  -- no extra ALTER; not SECOND
    CHANGE COLUMN column3 new_column3 VARCHAR(20),
    MODIFY COLUMN column4 SOME_TYPE AFTER new_column3, -- need type, and must
                                                       -- use new column name
    MODIFY COLUMN column5 SOME_TYPE AFTER column4, -- not SIXTH
    CHANGE COLUMN column6 DECIMAL(7,2);