为什么我不能在MySQL表的'id'列中插入相同的ID?

时间:2011-11-08 22:03:24

标签: php mysql phpmyadmin

我正在创建一个消息传递系统,我正在设置它,因此它将有一个“对话视图”,因此用户可以回复消息。为此,我必须为表中的每个会话设置一个主ID,然后为每个消息添加一个单独的唯一ID。

我的问题是,当我尝试回复邮件时,我收到此错误:

  

密钥1的重复条目“98”

看起来它不允许我在列中使用相同的ID,但我没有在表AFAIK中设置“唯一”的东西。

我还尝试删除id列的PRIMARY,但收到此错误:

enter image description here

消息是:

  

#1075 - 表定义不正确;只能有一个自动列,必须将其定义为键

我不明白为什么它不允许我在id列中插入相同的ID,因为您知道我需要每个会话的ID。

我用来将回复插入表中的mysql_query是:

$sql = "INSERT INTO messages (id, message_id, to_user, message, subject, from_user, date, time, date_short) 
 VALUES ('$id', '$message_id', '$to', '$message', '$subject', '$user', '$date', '$time', '$date_short')";

mysql_query($sql) or die(mysql_error());

提前致谢!

6 个答案:

答案 0 :(得分:1)

没有密钥

,你不能拥有auto_increment

答案 1 :(得分:1)

我怀疑您在AUTO_INCREMENT字段上设置了id。如果是这种情况,那么id列中的值必须是唯一的。

删除该列上的AUTO_INCREMENT属性(通过AUTO_INCREMENT命令重新定义没有ALTER TABLE的列),或者不要在您的id中指定INSERT值{{1}}声明。

答案 2 :(得分:1)

您的主键不能重复,否则它不像键那么有用,是吗?主键必须唯一标识记录。

您收到错误的原因是该列设置为自动编号。您尚未将该列添加到单独的密钥,这是MySQL中自动编号列的要求。

首先使用该列将其添加到键/索引,然后删除PK属性。确保表中有一些PK。

答案 3 :(得分:1)

首先,在列上取消AUTO_INCREMENT选项,然后再尝试删除索引

答案 4 :(得分:0)

PRIMARY KEY也是独一无二的。 auto_increment列必须是主键。如果不使用auto_increment,则无法从列中删除PRIMARY KEY

但是,我不认为你应该像这样改变你的桌子。您应保留自己的ID,并使用需要更新的数据创建新表格,或使用UPDATE代替INSERT

答案 5 :(得分:0)

具有主键的列不能重复,否则会失去其唯一性。 MySQL将阻止相同的值。必须改变主键值也是坏消息。您可能希望重新接近您正在做的事情并可能创建更多表格。