如果记录不存在特定区域设置,我想插入记录。基本上:唯一的消息,但不同的语言环境
例如我在我的消息表中有一条记录; 消息:hello和locale:com
现在,如果插入具有相同消息和区域设置的新记录,我想跳过它。
INSERT INTO messages (message, locale) VALUES ('hello', 'com');
这应该被跳过,但这不是:
INSERT INTO messages (message, locale) VALUES ('bye', 'com');
INSERT INTO messages (message, locale) VALUES ('bonjour', 'fr');
INSERT INTO messages (message, locale) VALUES ('hallo', 'de');
我正在尝试这样的事情:
IF NOT EXISTS (select * from messages where message = 'hello' AND locale = 'com') THEN
insert into messages (message, locale) values ('hello', 'com');
END IF;
希望这很清楚我的意思是对不起我的英语不好。
答案 0 :(得分:3)
您可以在两列上创建Unique Key
(复合键)。
UNIQUE KEY (message, locale)
这不允许插入相同的数据组合。
<强> ==被修改== 强>
您不需要费心检查数据。 unique key
约束将处理数据唯一性。如果您尝试添加重复数据,则会抛出错误(唯一键违规)。
所以,如果你已经执行了
INSERT INTO messages (message, locale) VALUES ('hello', 'com');
然后,您正在尝试执行
INSERT INTO messages (message, locale) VALUES ('bye', 'com');
INSERT INTO messages (message, locale) VALUES ('bonjour', 'fr');
INSERT INTO messages (message, locale) VALUES ('hallo', 'de');
但是,你尝试再次执行下面的操作,然后你会得到异常/错误
INSERT INTO messages (message, locale) VALUES ('hello', 'com');