我正在使用以下语句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。
答案 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尝试更改索引时遇到了同样的问题。字符。所以我将数据库重命名为没有它们,然后它工作得很好。
(由于没有直接重命名数据库的方法,我不得不将其复制到一个新的,名称正确的位置)