【发布时间】:2019-10-20 18:39:46
【问题描述】:
我在另一个名为“workers”的数据库上创建了新表:
CREATE TABLE workers (
ID_WORKER int(11) NOT NULL,
FNAME varchar(20) NOT NULL,
LNAME varchar(20) NOT NULL,
WORKERS_GROUP varchar(20) NOT NULL,
POSITION varchar(50) NOT NULL,
CARD_NUMBER varchar(30) NOT NULL
)
在 AUTO_INCREMENT 上设置了哪个“ID_WORKER”列。然后我第一次只插入了一条记录:
INSERT INTO workers (FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER)
VALUES ('Paul', 'King', 'IT', 'Programmer', '');
但在接下来的时间里,我尝试使用另一种方法插入(我将描述我尝试过的方法)并且我有一些重复。
我尝试了什么?
我已经尝试过至少 3 种不重复的插入方法:
1) 通过 INSERT IGNORE INTO:
INSERT IGNORE INTO workers (FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER)
2) 通过替换为:
REPLACE INTO workers (FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER)
VALUES ('Paul', 'King', 'IT', 'Programmer', '');
3) 通过 INSERT INTO ... 重复键更新:
INSERT INTO workers (FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER)
VALUES ('Paul', 'King', 'IT', 'Programmer', '')
ON DUPLICATE KEY UPDATE FNAME = 'Paul' AND LNAME = 'King' AND WORKERS_GROUP = 'IT' AND POSITION = 'Programmer' AND CARD_NUMBER = ''
而且没有一个不起作用。我不知道或不知道在哪里可以找到它们。任何想法都可以提供任何帮助。
编辑
至于重复项可以是所有重复项,但在这种情况下,具有相同FNAME, LNAME 的工人可以在同一个WORKER_GROUP 中,因为他/她必须有另一个POSITION 和CARD_NUMBER .
【问题讨论】:
-
在您的
CREATE TABLE脚本中,没有您所说的AUTO_INCREMENT。 -
您的表定义中没有定义任何可以阻止您插入
'Paul', 'King', 'IT', 'Programmer', ''1000 次的内容。 -
您可以使用INSERT IGNORE,但您必须在
FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER的组合上创建唯一索引。 -
我以为你的意思是重复的
ID_WORKER。我不会检查重复的工人。如果您有 2 个具有相同名字和名称的人在同一组中的同一位置工作怎么办。这可能很少见,但可能会发生 -
那么您认为哪些列不应该重复
标签: mysql duplicates insert-update insert-into