错误156:添加主键时表已存在

时间:2013-08-25 12:48:22

标签: mysql

我正在使用以下语句ALTER TABLE my_tbl ADD PRIMARY KEY (id );将主键添加到现有MySQL表中。作为回复,我收到错误:

  

错误156:表'db_name.my_tbl#1'已存在。

我检查过并且表没有重复的id条目,如果我执行DROP TABLE my_tbl#1之类的操作,则会删除原始表(my_tbl)。或许有趣的是,my_tbl是由Create Table my_tbl SELECT id, ... FROM tmp_tbl创建的(其中tmp_tbl是临时表)。

任何人都知道这里发生了什么?

更新:这里似乎有某种孤立表情况。我在下面的答案中尝试了这些建议,但在我的情况下,他们没有解决问题。我最后使用了一种解决方法:我创建了一个具有不同名称的表(例如my_tbl_new),将信息复制到该表并向其添加主键。我然后删除了原始表并将新表重命名为my_tbl。

3 个答案:

答案 0 :(得分:1)

尝试这样的事情: -

ALTER TABLE my_tbl  DROP PRIMARY KEY, ADD PRIMARY KEY(id,id); 

或试试这个: -

IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE  CONSTRAINT_TYPE = 'PRIMARY KEY'
    AND TABLE_NAME = '[my_tbl]' 
    AND TABLE_SCHEMA ='dbo' )
BEGIN
    ALTER TABLE [dbo].[my_tbl] ADD CONSTRAINT [PK_ID] PRIMARY KEY CLUSTERED  ([ID])
END 

或尝试冲洗表格如下: -

DROP TABLE IF EXISTS `my_tbl` ;
   FLUSH TABLES `my_tbl` ; 
   CREATE TABLE `my_tbl` ...

答案 1 :(得分:0)

DROP TABLE IF EXISTS `mytable` ;
FLUSH TABLES `mytable` ; 
CREATE TABLE `mytable` ...

也可能是许可问题。

答案 2 :(得分:0)

当我的数据库名称包含" - "时,我通过SQLyog尝试更改索引时遇到了同样的问题。字符。所以我将数据库重命名为没有它们,然后它工作得很好。

(由于没有直接重命名数据库的方法,我不得不将其复制到一个新的,名称正确的位置)