[23000][1062] 键 'PRIMARY' 的重复条目 '0'
Posted
技术标签:
【中文标题】[23000][1062] 键 \'PRIMARY\' 的重复条目 \'0\'【英文标题】:[23000][1062] Duplicate entry '0' for key 'PRIMARY'[23000][1062] 键 'PRIMARY' 的重复条目 '0' 【发布时间】:2018-07-11 11:17:16 【问题描述】:当我填写数据库时,我收到了主键条目重复的问题,但事实是我的数据库中的字段“状态”字段不是主键或其部分。
数据库脚本
如果不存在则创建表 travel.`users` ( `login` VARCHAR(25) NOT NULL, `password` VARCHAR(25) NOT NULL, `email` VARCHAR(40) NOT NULL, `name` VARCHAR(20) NOT NULL, `surname` VARCHAR(20) NOT NULL, `电话` VARCHAR(20) NOT NULL, `role` VARCHAR(30) NOT NULL, `status` TINYINT(1) NOT NULL, `image` VARCHAR(250) NOT NULL, 主键(`登录`), 唯一索引 `login_UNIQUE` (`login` ASC)) 引擎 = InnoDB;
SQL 查询
插入用户值 (登录 = 'admin',密码 = 'admin',电子邮件 = 'admin@gmail.com',姓名 = 'Иван', 姓氏='Иванов',电话='+380674002092',角色='管理员',状态='0', 图像 = 'D:/server/admin.img'); 插入用户价值 (登录名='经理',密码='经理',电子邮件='manager@gmail.com',姓名='Петров', 姓氏='Пётр',电话='+380964002092',角色='经理',状态='0', image = 'D:/server/manager.img');
在执行第二个 INSERT 期间,我收到以下错误 [23000][1062] Duplicate entry '0' for key 'PRIMARY'
【问题讨论】:
我删除了SQL Server
标签,请不要标记多个与问题无关的标签。
【参考方案1】:
`user_id` int(8) NOT NULL AUTO_INCREMENT
您必须有一个自动增量字段。
【讨论】:
【参考方案2】:Remove the Column name .Do not need to specify the column.
INSERT INTO users VALUES
( 'admin', 'admin', 'admin@gmail.com', 'Иван',
'Иванов', '+380674002092', 'ADMINISTRATOR', '0',
'D:/server/admin.img');
INSERT INTO users VALUES
( 'manager', 'manager', 'manager@gmail.com', 'Петров',
'Пётр', '+380964002092', 'MANAGER', '0',
'D:/server/manager.img');
【讨论】:
非常感谢,写了一晚上的代码,有时候也会出现这种老生常谈的错误【参考方案3】:Raja 的回答是正确的,但我想为其他人补充一些信息
他的回答..
去掉列名。不需要指定列。
INSERT INTO users VALUES ( 'admin', 'admin', 'admin@gmail.com', 'Иван', 'Иванов', '+380674002092', 'ADMINISTRATOR', '0', 'D:/server/admin.img');
INSERT INTO users VALUES ( 'manager', 'manager', 'manager@gmail.com', 'Петров', 'Пётр', '+380964002092', 'MANAGER', '0', 'D:/server/manager.img');
我的补充...
如果我们正在执行完全插入,我们不需要指定列,如果我们只想将数据插入某些行,我们指定我们要插入的唯一列。
这是一个示例,
INSERT INTO users(login, password, status) VALUES
( 'manager1', 'manager1', '0');
这将只在login
、password
和status
列中插入值。
另外,一个建议是避免使用varchar
数据类型作为主键,因为它会影响主内存中的索引性能。而是使用int
或long
(在大多数RDBMS 中为bigint
)。
而且,您可以将其设置为Auto Increment
,这样就可以轻松地将它们用作Foreign Key
。
如果您想使其成为 AutoIncrement,您需要更改以下内容。
CREATE TABLE IF NOT EXISTS travel.`users` (
`id` int(8) NOT NULL AUTO_INCREMENT,
`login` VARCHAR(25) NOT NULL,
....
PRIMARY KEY (`id`),
【讨论】:
以上是关于[23000][1062] 键 'PRIMARY' 的重复条目 '0'的主要内容,如果未能解决你的问题,请参考以下文章
ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
SQLSTATE [23000]:完整性约束违规:1062 键 'tbl_item_item_ID_UNIQUE' 的重复条目 '25'
SQLSTATE [23000]:完整性约束违规:1062 键“users_melli_unique”的重复条目“0430142821”
Laravel - SQLSTATE [23000]:完整性约束违规:1062 键“posts_user_id_unique”的重复条目“1”