2016-10-27 57 views
0

这里是我的表:mysql的删除主键不起作用

+-------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+--------------+------+-----+---------+----------------+ 
| id   | bigint(20) | NO | PRI | NULL | auto_increment | 
| template_id | int(11)  | NO | MUL | NULL |    | 
| type  | smallint(6) | NO |  | 2  |    | 
| width  | varchar(100) | NO |  |   |    | 
| height  | varchar(100) | NO |  |   |    | 
+-------------+--------------+------+-----+---------+----------------+ 

你可以从表中知道的,idtemplate_id是主键,以及id有一个AUTO_INCREMENT设置。

我想要做的是放弃tempalte_id主键属性。

下面是MySQL数据库的查询字符串我想:

ALTER TABLE ts_template_size 
DROP PRIMARY KEY, 
ADD PRIMARY KEY (`id`); 

查询能够成功执行,但似乎没有任何改变。没有警告,没有错误,并且tempalte_id的主键属性仍然存在

那么我该如何解决这个问题?我的查询有什么问题?

+1

的可能的复制[SQL键,MUL VS PRI VS UNI(HTTP://计算器。 com/questions/5317889/sql-keys-mul-vs-pri-vs-uni) – Dezza

+0

是什么让你觉得'template_id'是主键?我无法从你展示的表格结构中看出来。 – Dezza

回答

1

阿尔特自动增量

ALTER TABLE ts_template_size MODIFY id INT NULL; 

ALTER TABLE ts_template_size 
DROP PRIMARY KEY; 

并重新创建它:

ALTER TABLE yourtable 
ADD PRIMARY KEY (`id`); 
+0

直接删除主键可能会导致错误:表格定义不正确;只能有一个自动列,并且必须将其定义为一个键 – hh54188

+0

尝试先更改以删除自动增量 – scaisEdge

1

“?这有什么错我的查询”

您的查询将主键id放入您的表中,然后立即重新添加它。没有错误消息,因为查询有效。

问题是template_id不是表中的主键。这应该工作:

ALTER TABLE ts_template_size drop index `template_id`; 

您的id主键将保持,如你所愿。

更多的MUL标号指定看到这个答案(这是template_id是在你的表): https://stackoverflow.com/a/15268888/1250190

+0

@ hh54188您在http://stackoverflow.com/q/40297345/1250190中显示的创建表查询将验证“template_id '不是'ts_template_size'表中的主键。 – pjd