我正在创建一个消息传递系统,我正在设置它,因此它将有一个“对话视图”,因此用户可以回复消息。为此,我必须为表中的每个会话设置一个主ID,然后为每个消息添加一个单独的唯一ID。
我的问题是,当我尝试回复邮件时,我收到此错误:
密钥1的重复条目“98”
看起来它不允许我在列中使用相同的ID,但我没有在表AFAIK中设置“唯一”的东西。
我还尝试删除id
列的PRIMARY,但收到此错误:
消息是:
#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());
提前致谢!
答案 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将阻止相同的值。必须改变主键值也是坏消息。您可能希望重新接近您正在做的事情并可能创建更多表格。