MySQL语法错误:不存在的地方

Dom*_*WTF 2 mysql sql

如果它不存在,我一直在尝试在数据库中插入一条记录,这是查询:

insert into evt(e_id, t_id)
values( '1597',  '4')
where not exists( select id from evt where e_id = '4' and t_id = '1597');
Run Code Online (Sandbox Code Playgroud)

该查询返回以下错误:

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在“where not exists( select id from evt where e_id = '4' and t_id = ' at line 1

我不明白为什么它不起作用

Gor*_*off 7

如果你想防止数据库中的重复,那么让数据库来做这个工作。使用唯一约束或索引:

create unique index unq_evt_eid_tid on evt(e_id, t_id);
Run Code Online (Sandbox Code Playgroud)

这保证了数据完整性,无论值是如何插入或更新的。数据库为您完成工作。

然后你可以在插入时防止错误,通过使用on duplicate key update:

insert into evt(e_id, t_id)
     values (1597,  4) 
     on duplicate key update e_id = values(e_id);
Run Code Online (Sandbox Code Playgroud)

在on duplicate key从产生误差防止的代码。

我还从值中删除了单引号。Id 通常是数字。如果它们确实是字符串,请重新添加引号。

  • @DomeWTF。. . 这正是这段代码所做的。因此,我不明白您的原始评论。 (3认同)
  • @DomeWTF。. . 我不明白这个问题。这将这对定义为唯一的,而不是单独的每一列。 (2认同)