Mysql 如何在没有重复项的情况下插入值?

Mysql 如何在没有重复项的情况下插入值?,mysql,duplicates,insert-update,insert-into,Mysql,Duplicates,Insert Update,Insert Into,我在另一个数据库上创建了一个新表,该表命名为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 ) 哪个“ID\u W

我在另一个数据库上创建了一个新表,该表命名为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
)
哪个“ID\u WORKER”列设置为自动增量。第一次我只插入了一条记录:

INSERT INTO workers (FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER) 
VALUES ('Paul', 'King', 'IT', 'Programmer', '');
但在接下来的时间里,我尝试了插入另一种方法,我将描述我尝试过的方法,我有一些重复的方法

我试过什么

我已经尝试插入到不重复的至少3种方法中:

1通过将忽略插入:

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 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的工人可以位于同一工人组中,因为他/她必须有另一个职位和卡号。

在创建表脚本中,没有您所说的自动递增。您的表定义中没有任何定义可以阻止您插入“Paul”、“King”、“IT”、“Programmer”1000次。您可以使用,但必须在FNAME、LNAME、WORKERS\u GROUP、POSITION、CARD\u NUMBER的组合上创建唯一索引。我以为您指的是重复的ID\u WORKER。我不会检查重复的工人。如果你有两个名字和名字相同的人在同一个团队中,在同一个职位上工作,会怎么样。这可能是罕见的,但这可能发生,你认为哪些栏目不应该重复?愉快地不确定你在这里建议什么?好的答案总是有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客,以便他们可以找到这个问题并阅读你的答案。如果答案正确的话,他们可能会投票支持它。这样可以防止新问题的重复row@kishan您能告诉我您的代码中不存在选择1是什么类型的吗?是关于身份证的吗?我知道别名w1和w2吸引了1个表工作者,对吗?@kishan,但顺便说一下,我必须插入值。不仅选择。@kishan您可以将WORKERS w1中选择不同的w1.FNAME、w1.LNAME、w1.WORKERS_组、w1.POSITION、w1.CARD_编号替换为所需的值,如选择“Paul”作为FNAME、“King”作为LNAME、“IT”作为WORKERS_组、“Programmer”作为POSITION、CARD_编号作为w1
INSERT INTO workers (FNAME, LNAME, WORKERS_GROUP, POSITION, CARD_NUMBER)
SELECT DISTINCT w1.FNAME, w1.LNAME, w1.WORKERS_GROUP, w1.POSITION, w1.CARD_NUMBER
FROM workers w1
WHERE NOT EXISTS (SELECT 1 
                  FROM workers w2
                  WHERE w2.FNAME = w1.FNAME
                    AND w2.LNAME= w1.LNAME
                    AND w2.WORKERS_GROUP= w1.WORKERS_GROUP
                    AND w2.POSITION = w1.POSITION
                    AND s2.CARD_NUMBER = w1.CARD_NUMBER)