在本例中,MySQL INSERT忽略
在这种情况下,如何使用在本例中,MySQL INSERT忽略,mysql,sql,Mysql,Sql,在这种情况下,如何使用insert ignore防止插入重复行 这一切都取决于userId和elmCol 因此: 我正在使用MySql和MyIsam类型的表。我可以这样做并使用insert ignore 我尝试创建主键,但无法在所有列上使用它们。在两列上应用唯一索引 CREATE UNIQUE INDEX unique_userId_elmCol ON table1 (userId ,elmCol); 或者,若您不希望在表中插入重复的值,而是希望将该值保留在不同的表中 您可以
insert ignore
防止插入重复行
这一切都取决于userId和elmCol
因此:
我正在使用MySql和MyIsam类型的表。我可以这样做并使用insert ignore
我尝试创建主键,但无法在所有列上使用它们。在两列上应用唯一索引
CREATE UNIQUE INDEX unique_userId_elmCol
ON table1 (userId ,elmCol);
或者,若您不希望在表中插入重复的值,而是希望将该值保留在不同的表中
您可以在表上创建触发器。像这样:
DELIMITER $$
CREATE TRIGGER unique_key_ignore BEFORE INSERT ON table1
FOR EACH ROW BEGIN
DECLARE c INT;
SELECT COUNT(*) INTO c FROM table1 WHERE userId = NEW.userId and elmCol = NEW.elmCol;
IF (c > 0) THEN
insert into table2 (userId ,elmCol) values ( NEW.userId , NEW.elmCol);
END IF;
END$$
DELIMITER ;
使用复合主键: 获得复合主键后,将无法插入重复的主键 顺便说一下,在这种情况下不应该使用唯一索引,因为它们可以为空。 查看此链接,为什么不:
改为在重复密钥更新时使用。看看这个链接:但是我没有什么要更新的!如果插入了重复的行,请不要插入它。这就是我要做的一切。@Norman从哪里得到这个值。.我指的是如何一个接一个地插入这个表,或者作为一个表插入它来自一个php脚本。只有一行。@Norman:你说得对,对不起,我不知道你的表中只有这些列。不过,复合主键应该可以解决您的问题。我也在尝试同样的事情,但是使用HeidiSQL,它不允许我添加辅助主键。
DELIMITER $$
CREATE TRIGGER unique_key_ignore BEFORE INSERT ON table1
FOR EACH ROW BEGIN
DECLARE c INT;
SELECT COUNT(*) INTO c FROM table1 WHERE userId = NEW.userId and elmCol = NEW.elmCol;
IF (c > 0) THEN
insert into table2 (userId ,elmCol) values ( NEW.userId , NEW.elmCol);
END IF;
END$$
DELIMITER ;
CREATE TABLE yourTable(
userId NUMERIC,
elmCol NUMERIC,
PRIMARY KEY (userId , elmCol)
);