在这种情况下,如何使用insert ignore
来防止插入重复的行?
这一切都在userId和elmCol
上所以:
userId | elmCol
----------------
1 | 1 //Allow
1 | 2 //Allow
1 | 3 //Allow
1 | 1 //Not allowed if inserted again. I've put it in here just for example)
2 | 1 //Allow
2 | 2 //Allow
2 | 3 //Allow
2 | 1 //Not allowed if inserted again. I've put it in here just for example)
我正在使用MySql和MyIsam类型表。我可以这样做并使用insert ignore
吗?
我尝试创建主键,但不能在所有列上使用它们。
答案 0 :(得分:1)
在列上应用唯一索引。
CREATE UNIQUE INDEX unique_userId_elmCol
ON table1 (userId ,elmCol);
OR如果您不想在表中插入重复值,而是希望将该值保存在不同的表中。
您可以在表格上创建触发器。像这样:
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 ;
答案 1 :(得分:1)
使用复合主键: How can I define a composite primary key in SQL?
CREATE TABLE yourTable(
userId NUMERIC,
elmCol NUMERIC,
PRIMARY KEY (userId , elmCol)
);
获得复合主键后,您将无法插入重复项。
顺便说一下,你不应该使用Unique Index 来处理这种情况,因为它们可以为空。 看看这个链接,为什么不: Primary key or Unique index?