1

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ますか?

主キーを作成しようとしましたが、すべての列で使用できません。

4

2 に答える 2

1

両方の列に一意のインデックスを適用します。

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 ;
于 2013-05-24T11:35:52.973 に答える
1

複合主キーを使用する: SQL で複合主キーを定義するにはどうすればよいですか?

CREATE TABLE yourTable(
  userId NUMERIC,
  elmCol NUMERIC,
  PRIMARY KEY (userId , elmCol)
);

複合主キーを取得すると、重複を挿入できなくなります。

ちなみに、null 許容になる可能性があるため、この場合は Unique Index を使用しないでください。このリンクをチェックしてください。なぜでしょうか: Primary key or Unique index?

于 2013-05-24T11:36:07.293 に答える