Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在本例中,MySQL INSERT忽略_Mysql_Sql - Fatal编程技术网

在本例中,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)
);