我在创建新列时出现错误1050(表已存在)

时间:2015-10-20 01:22:39

标签: mysql

我正在尝试使用以下命令在mysql表中创建一个新列:

ALTER TABLE PEDIDOS_DETALHE 添加列QTD_CAIXAS INT NOT NOT DEFAULT'0';

执行此命令时,出现以下错误:

错误代码:1050。表'magazine /#sql-ib583'已经存在

mysql在具有其他名称的表中给出错误。

有什么问题?我不明白错误。

非常感谢

安德烈

3 个答案:

答案 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文件(必须定义相同的列和索引)。为此,请执行以下步骤:

     
      
  1. 确定#sql - * .ibd文件是否具有ALTER前或ALTER后架构定义。您可以使用表监视器查看中间表的列和索引。

  2.   
  3. 确定#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

  4.   
  5. 将.frm文件复制到孤立表所在的数据库目录中,并将其重命名为与#sql - *。ibd文件的名称相匹配

         
        

    壳> cp tmp.frm employees / #sql-sql-1291_3.frm

      
  6.   
  7. 通过发出DROP TABLE语句删除中间表,将表名括在反引号中。例如:

         
        

    的MySQL> DROP TABLE #sql-1291_3;     查询OK,0行受影响(0.01秒)

      
  8.   

答案 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;