我通过阅读《 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或MODIFY COLUMN)则不需要呢?这本书在解释任何事情上都做得不好,所以我很好奇为什么我只允许使用部分而非全部代码来做.
我得到的错误可能是过时的代码导致的吗?该书于2007年出版,所以我不确定代码是否过时.
所有和任何建议都将不胜感激.感谢您的时间!
码:
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);
解决方法:
您正在使用的示例代码已损坏.特殊情况是ADD COLUMN,CHANGE COLUMN和MODIFY COLUMN的FIRST关键字;例如,没有类似的SECOND关键字.相反,必须将超出第一列的列描述为another_column之后的列.
此外,由于某种原因,第二条ALTER TABLE已滑入该语句的中间.实际语法中没有这种不一致;这只是您书中的错误.
最后,“修改列”更改必须包括新类型的列. (如果ALTER的目标只是将列移动到表中的其他位置,则可以指定列的当前类型.)
这是查询的更正版本,带有注释.请注意,我尚未在真实表上测试过此查询,因此不确定它是否完全正确. (特别是,我将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);
标签:alter,mysql
来源: https://codeday.me/bug/20191120/2043934.html