3

在我的数据库中,我有tickets_users那个附属用户到一张票。

如果还没有这个(例如用户 1444)和(例如票号 455),我想做一个INSERT检查;如果它已经存在,则什么也不做,否则tickets_usersusers_idtype = 2 WHERE tickets_id = something

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

2 回答 2

4
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)
于 2013-07-24T08:57:10.190 回答
4

您可以在具有适当字段的表上使用 PRIMARY KEY 或 UNIQUE 索引来停止重复记录。

PRIMARY KEY 

使用 INSERT IGNORE 而不是 INSERT。如果一条记录不复制现有记录,MySQL 照常插入它。如果记录是重复的,则 IGNORE 关键字告诉 MySQL 静默丢弃它而不产生错误。

INSERT IGNORE

例如:假定 id 是主键。如果表 'tablename' 中的一条记录已经有一条 id = 1 的记录,那么查询将被忽略而不是产生警告。

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

于 2013-07-24T08:59:33.897 回答