0
2つの値(コンポジットキー)が存在しない場合にのみ挿入します。そうでない場合は、重複キーが入力されるとエラーが発生します。存在しない - ERROR 1064(42000):SQL構文にエラーがあります。チェック
私のこのクエリはエラーを与えている:
INSERT INTO group_msg_response (license_id,grp_id) VALUES (1,1) WHERE NOT EXISTS (SELECT 1 FROM group_msg_response WHERE license_id=1 AND grp_id=1)
私はそれらを個別に実行する場合、それらの両方が正常に動作します。
このエラーを与えている:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXISTS (SELECT 1 FROM group_msg_response WHERE license_id=1 AND ' at line 1
問題がある可能性がありますか?ここでhttps://dev.mysql.com/doc/refman/5.5/en/exists-and-not-exists-subqueries.html
で述べたように私が道をやっているテーブル定義である:
create table IF NOT EXISTS msg(
id INT UNSIGNED AUTO_INCREMENT ,
en varchar(5000),
hi varchar(5000),
PRIMARY KEY(id)
) ENGINE=InnoDB;
create table IF NOT EXISTS group_msg(
id INT UNSIGNED AUTO_INCREMENT ,
msg_id INT UNSIGNED,
lsource INT UNSIGNED NOT NULL,
browser CHAR(1) NOT NULL DEFAULT 'a' ,
expiry_date DATETIME NOT NULL ,
dated DATETIME NOT NULL,
deleteit TINYINT DEFAULT 0 ,
FOREIGN KEY (msg_id)
REFERENCES msg(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
PRIMARY KEY(id)
) ENGINE=InnoDB;
create table IF NOT EXISTS group_msg_response(
license_id MEDIUMINT,
grp_id INT UNSIGNED,
FOREIGN KEY (grp_id)
REFERENCES group_msg(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
PRIMARY KEY(license_id,grp_id)
) ENGINE=InnoDB;
ありがとうございますが、より簡単な方法があることを願っています。 – user5858
私はさらにINSERT IGNORE INTOを見つけました。http://stackoverflow.com/a/1361368/543087私はそれに行く。 – user5858
@ user5858 。 。私は 'ON DUPLICATE KEY UPDATE'を使うことをお勧めします。 'INSERT IGNORE'は、捕まえたい他のエラーを無視するかもしれません。 –