试图更好地理解 MySQL ALTER 语法
Trying to better understand MySQL ALTER syntax
我正在通过阅读本书 "Head First SQL" 来学习 MySQL,但我遇到了障碍。我似乎无法理解下面的代码。具体来说,我有几个问题。
当我尝试 运行 控制台上的整个代码时(MySQL 在 Wamp 上),我遇到了多个错误。但是,当我将每个 ALTER 命令分开时(例如 ALTER table_name RENAME TO new_table_name;),大部分代码都可以毫无问题地通过控制台。这是为什么?根据这本书,整个代码应该可以工作。
当我 copy/paste 单独编写代码时遇到的错误之一是关于 ORDERing 的,例如 "FIRST"、"SECOND"、"AFTER",等等。为什么会发生这种情况?
最后,为什么一些 ALTER 命令,例如 RENAME 和 ADD COLUMN 需要 ALTER TABLE table_name,但其他人,例如 CHANGE 或 MODIFY COLUMN 没有?这本书没有很好地解释这方面的任何内容,所以我很好奇为什么我被允许使用一些而不是所有代码来做这件事。
我遇到的错误可能是过时代码的结果吗?这本书是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 COLUMN
、CHANGE COLUMN
和 MODIFY COLUMN
的 FIRST
关键字是特例;例如,没有类似的 SECOND
关键字。第一列之后的列必须描述为属于 AFTER another_column
.
此外,出于某种原因,第二个 ALTER TABLE
已被滑入此语句的中间。实际语法中没有这种不一致;这只是你书中的一个错误。
最后,MODIFY COLUMN
更改必须包括新的列类型。 (如果 ALTER
的目标只是将列移动到 table 中的另一个位置,则可以指定列的当前类型。)
The official documentation for the ALTER TABLE
command值得一读。很长,但是很详细。 (而且,更好的是,它 正确 。)
这是查询的更正版本,带有注释。请注意,我还没有在真实的 table 上测试过这个查询,所以我不确定它是否完全正确。 (特别是,我将 column4
和 column5
的类型保留为 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);
我正在通过阅读本书 "Head First SQL" 来学习 MySQL,但我遇到了障碍。我似乎无法理解下面的代码。具体来说,我有几个问题。
当我尝试 运行 控制台上的整个代码时(MySQL 在 Wamp 上),我遇到了多个错误。但是,当我将每个 ALTER 命令分开时(例如 ALTER table_name RENAME TO new_table_name;),大部分代码都可以毫无问题地通过控制台。这是为什么?根据这本书,整个代码应该可以工作。
当我 copy/paste 单独编写代码时遇到的错误之一是关于 ORDERing 的,例如 "FIRST"、"SECOND"、"AFTER",等等。为什么会发生这种情况?
最后,为什么一些 ALTER 命令,例如 RENAME 和 ADD COLUMN 需要 ALTER TABLE table_name,但其他人,例如 CHANGE 或 MODIFY COLUMN 没有?这本书没有很好地解释这方面的任何内容,所以我很好奇为什么我被允许使用一些而不是所有代码来做这件事。
我遇到的错误可能是过时代码的结果吗?这本书是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 COLUMN
、CHANGE COLUMN
和 MODIFY COLUMN
的 FIRST
关键字是特例;例如,没有类似的 SECOND
关键字。第一列之后的列必须描述为属于 AFTER another_column
.
此外,出于某种原因,第二个 ALTER TABLE
已被滑入此语句的中间。实际语法中没有这种不一致;这只是你书中的一个错误。
最后,MODIFY COLUMN
更改必须包括新的列类型。 (如果 ALTER
的目标只是将列移动到 table 中的另一个位置,则可以指定列的当前类型。)
The official documentation for the ALTER TABLE
command值得一读。很长,但是很详细。 (而且,更好的是,它 正确 。)
这是查询的更正版本,带有注释。请注意,我还没有在真实的 table 上测试过这个查询,所以我不确定它是否完全正确。 (特别是,我将 column4
和 column5
的类型保留为 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);