我最近开始使用MySQL进行学习工作,现在面临以下问题:
我的前任创建了一个以下结构的文本表:
+------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| TokenId | int(11) | NO | PRI | 0 | |
| Value | varchar(255) | YES | | NULL | |
| Frequency | int(11) | YES | | NULL | |
| PMID | int(11) | YES | MUL | NULL | |
+------------+--------------+------+-----+---------+-------+
在重组方面,我添加了以下专栏:
+------------+--------------+------+-----+---------+-------+
| NewTokenId | int(11) | YES | | NULL | |
+------------+--------------+------+-----+---------+-------+
如果我现在运行查询:
insert into TitleToken(NewTokenId) select t.TokenId from Token as t, TitleToken as tt where t.Value = tt.Value
甚至查询:
insert into TitleToken(NewTokenId) values(1);
我得到以下输出:
ERROR 1062(23000):对于'PRIMARY'键重复输入'0'
正如我所说,我相对较新(动手)* SQL,感觉这是一个愚蠢的错误,但由于NewTokenId列没有主键,不是唯一的,甚至Null是YES,我想我是能够插入任何我想要的东西。
任何暗示都会受到赞赏......在此先感谢:)
答案 0 :(得分:0)
您正在尝试在不为TokenId
提供唯一值的情况下对表执行插入操作。默认情况下,根据表格说明,TokenId
默认为0
,您不能在该列中包含多个相同的值。
答案 1 :(得分:0)
这里的问题是你有一个主键“TokenID”的默认值,如果你没有在insert语句中插入键的值,系统将自动插入0.但是,如果有另一个元组该属性的值相同(可能因为默认值为0),您将收到该错误。