在这种情况下,MySQL INSERT IGNORE

时间:2013-05-24 11:28:40

标签: mysql sql

在这种情况下,如何使用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吗?

我尝试创建主键,但不能在所有列上使用它们。

2 个答案:

答案 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?