如果值尚不存在,则INSERT

时间:2013-07-24 08:50:16

标签: mysql insert conditional-statements

在我的数据库中,我tickets_users将用户加入了故障单。

如果还没有INSERT(例如用户1444)和tickets_users(例如票证),我想执行users_id检查type = 2 WHERE tickets_id = something第455号);如果它已经存在则什么都不做,否则为

INSERT INTO tickets_users (tickets_id, users_id, type) VALUES (455, 1444, 2) 
WHERE tickets_id = 455

2 个答案:

答案 0 :(得分:4)

您可以在具有相应字段的表上使用PRIMARY KEY或UNIQUE Index来停止重复记录。

PRIMARY KEY 

使用INSERT IGNORE而不是INSERT。如果记录没有复制现有记录,MySQL会像往常一样插入它。如果记录是重复的,则IGNORE关键字告诉MySQL以静默方式丢弃它而不会产生错误。

INSERT IGNORE

例如:假定id为主键。如果表'tablename'中的记录已经有id = 1的记录,则只会忽略该查询而不是产生警告。

注意:仅在开发阶段使用IGNORE关键字。它可能会导致意外结果,因为您无法识别是否已插入记录。

答案 1 :(得分:3)

INSERT INTO tickets_users (tickets_id, users_id, type) 
select 455, 1444, 2 from  dual
WHERE not exists (select 1 from tickets_users where type = 2 and tickets_id = something)

试试这个

编辑:
添加多行

INSERT INTO tickets_users (tickets_id, users_id, type) 
select 455, 1444, 2 from  dual
WHERE not exists (select 1 from tickets_users where type = 2 and tickets_id = 455)
union all 
select 456, 1444, 2 from  dual
WHERE not exists (select 1 from tickets_users where type = 2 and tickets_id = 456)