1

我正在使用以下语句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。

4

3 回答 3

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` ...
于 2013-08-25T12:51:50.473 回答
0
DROP TABLE IF EXISTS `mytable` ;
FLUSH TABLES `mytable` ; 
CREATE TABLE `mytable` ...

也可能是权限问题。

于 2013-08-25T13:04:09.437 回答
0

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

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

于 2015-03-23T10:51:22.453 回答