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

时间:2017-06-25 14:22:46

标签: 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');

该查询返回时出现以下错误:

  

错误1064(42000):您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在“不存在的地方”附近使用正确的语法(从evt中选择id,其中e_id ='4'和t_id ='在第1行

我无法理解为什么它不起作用

7 个答案:

答案 0 :(得分:1)

试试这个:

    INSERT INTO evt(e_id, t_id)
SELECT * FROM (SELECT '4', '1597') AS tmp
WHERE NOT EXISTS (
    SELECT e_id FROM evt WHERE e_id = '4' and t_id = '1597'
) LIMIT 1;

答案 1 :(得分:0)

MySQL INSERT语法不支持WHERE条件

 insert into evt(e_id, t_id) values( '1597',  '4') 

可能是您需要更新

  update evt
  set e_id = '1597',
  t_id  = 4
  where id  not in ( select id from evt where e_id = '4' and t_id = '1597');

或插入选择

 insert into evt(e_id, t_id) 
 select  '1597',  '4'
 from evt
 where not exists( select id from evt where e_id = '4' and t_id = '1597');

答案 2 :(得分:0)

如果要防止数据库中出现重复,请让数据库完成工作。使用唯一约束或索引:

create unique index unq_evt_eid_tid on evt(e_id, t_id);

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

然后,您可以使用on duplicate key update

阻止插入时出错
insert into evt(e_id, t_id)
     values (1597,  4) 
     on duplicate key update e_id = values(e_id);

on duplicate key可防止代码生成错误。

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

答案 3 :(得分:0)

试试这个:

 insert into evt(e_id, t_id) values( '1597',  '4') where not in( select id from evt where e_id = '4' and t_id = '1597');

答案 4 :(得分:0)

INSERT语句不支持WHERE子句。

您有多种选择。首先进行选择,如果条件为真INSERT或使用ON DUPLICATE KEY

INSERT INTO evt
    SET e_id = '1597', t_id = '4'
ON DUPLICATE KEY UPDATE
    e_id = '1597', t_id = '4'

这需要您的字段为索引(主要或唯一)

注意:插入数字时不应该使用引号,因为mysql将其视为字符串并尝试进行转换,逐渐降低项目速度。插入数字没有引号

也更安全

答案 5 :(得分:0)

我解决了所有添加这样一个独特配对的事情:

ALTER IGNORE TABLE mytable ADD UNIQUE (field1,field2)

答案 6 :(得分:0)

我认为你正在寻找 UPDATE 而不是插入?

UPDATE `evt` SET `e_id`='1597', `t_id`='4' 
       WHERE `e_id` NOT in ('4') and `t_id` not in('1597');