试图更好地理解MySQL ALTER语法

时间:2015-04-23 20:14:53

标签: mysql alter

我正在通过阅读“Head First SQL”一书来学习MySQL,但我遇到了一堵砖墙。我似乎无法绕过下面的代码。具体来说,我有几个问题。

  • 当我尝试在控制台上运行整个代码时(在Wamp上的MySQL),我遇到了多个错误。但是,当我将每个ALTER命令(例如 ALTER table_name RENAME TO new_table_name; )分开时,大多数代码都会通过控制台而没有任何问题。这是为什么?根据这本书,整个代码应该工作。

  • 我单独复制/粘贴代码时遇到的错误之一是关于ORDERing,例如“FIRST”,“SECOND”,“AFTER”等。为什么会发生这种情况?

  • 最后,为什么有些ALTER命令(例如 RENAME和ADD COLUMN )需要 ALTER TABLE table_name ,而有些其他命令,例如 CHANGE或修改栏不?这本书没有很好地解释这方面的任何内容,所以我很好奇为什么我可以用一些而不是所有代码来做这件事。

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

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

CODE:     ALTER 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);

2 个答案:

答案 0 :(得分:3)

您正在使用的示例代码已损坏FIRSTADD COLUMNCHANGE COLUMN的{​​{1}}关键字是一种特殊情况;例如,没有类似的MODIFY COLUMN关键字。必须将第一列之外的列描述为属于SECOND

此外,由于某种原因,第二个AFTER another_column已被放入本声明的中间。实际语法中没有这种不一致;这只是你书中的一个错误。

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

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

以下是查询的更正版本,带有注释。请注意,我还没有在真实桌面上测试此查询,因此我不确定它是否完全正确。 (特别是,我将ALTERcolumn4的类型保留为column5,因为我不知道它们的类型应该是什么。)

SOME_TYPE

答案 1 :(得分:0)

  • 使用分号分隔语句;
  • 请注意取决于前一个结果的陈述。