我正在通过阅读“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);
答案 0 :(得分:3)
您正在使用的示例代码已损坏。 FIRST
,ADD COLUMN
和CHANGE COLUMN
的{{1}}关键字是一种特殊情况;例如,没有类似的MODIFY COLUMN
关键字。必须将第一列之外的列描述为属于SECOND
。
此外,由于某种原因,第二个AFTER another_column
已被放入本声明的中间。实际语法中没有这种不一致;这只是你书中的一个错误。
最后,ALTER TABLE
更改必须包含新类型的列。 (如果MODIFY COLUMN
的目标只是将列移动到表中的另一个位置,则可以指定列的当前类型。)
The official documentation for the ALTER TABLE
command值得一读。它很长,但很详细。 (而且,更好的是,正确。)
以下是查询的更正版本,带有注释。请注意,我还没有在真实桌面上测试此查询,因此我不确定它是否完全正确。 (特别是,我将ALTER
和column4
的类型保留为column5
,因为我不知道它们的类型应该是什么。)
SOME_TYPE
答案 1 :(得分:0)