我正在尝试使用以下命令在mysql表中创建一个新列:
ALTER TABLE PEDIDOS_DETALHE
添加列QTD_CAIXAS
INT NOT NOT DEFAULT'0';
执行此命令时,出现以下错误:
错误代码:1050。表'magazine /#sql-ib583'已经存在
mysql在具有其他名称的表中给出错误。
有什么问题?我不明白错误。
非常感谢
安德烈
答案 0 :(得分:0)
听起来你有一张孤儿临时表。
请查看以下链接中的“孤立中间表”部分以进行故障排除:
https://dev.mysql.com/doc/refman/5.0/en/innodb-troubleshooting-datadict.html
如果MySQL在ALTER TABLE操作过程中崩溃,您可能会留下一个孤立的中间表。中间表名称以“#sql-”开头。在您的数据目录中,您将看到一个#sql- .ibd文件和一个带有相同名称的伴随的#sql - .frm文件。中间表也列在表监视器输出中。
如果#sql- .ibd和#sql - .frm文件都出现在您的数据目录中,请通过发出DROP TABLE语句删除中间表,并将表名括在反引号中。例如:
的MySQL> DROP TABLE
#sql-1291_3
; 查询OK,0行受影响(0.01秒)在反引号中包含表名是在表名上使用特殊字符(如“#”)执行SQL语句所必需的。
如果数据目录中没有表格格式文件(#sql- .frm文件)或者DROP TABLE操作失败,请创建一个与#sql的表模式匹配的新.frm文件 - .ibd文件(必须定义相同的列和索引)。为此,请执行以下步骤:
确定#sql - * .ibd文件是否具有ALTER前或ALTER后架构定义。您可以使用表监视器查看中间表的列和索引。
确定#sql- .ibd文件是否具有ALTER前ALTER或后ALTER模式定义后,在另一个数据库中创建匹配的#sql - .frm文件目录。例如,如果中间表具有后ALTER模式定义,请创建与更改的模式定义匹配的.frm文件:
的MySQL> CREATE TABLE tmp LIKE employees.salaries; ALTER TABLE tmp DROP COLUMN to_date; 查询正常,0行受影响(0.02秒)
查询OK,0行受影响(0.06秒) 记录:0重复:0警告:0
将.frm文件复制到孤立表所在的数据库目录中,并将其重命名为与#sql - *。ibd文件的名称相匹配
壳> cp tmp.frm employees / #sql-sql-1291_3.frm
- 醇>
通过发出DROP TABLE语句删除中间表,将表名括在反引号中。例如:
的MySQL> DROP TABLE
#sql-1291_3
; 查询OK,0行受影响(0.01秒)
答案 1 :(得分:0)
在我的情况下,问题缺少ALTER
权限,因此我必须像
mysql -u root -p
/* type your password */
GRANT ALTER ON yourschema.* TO 'youruser'@'%';
如果没有此权限,MySQL Workbench会修改原始的ALTER查询并尝试创建我的表 - 显然会因为表已经存在而失败。
答案 2 :(得分:0)
尝试此方法
ALTER TABLE table_name ADD COLUMN IF NOT EXISTS column_name tinyint(1) DEFAULT 0;