我一直在尝试在数据库中插入一条记录(如果它还不存在),这就是查询:
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行
我无法理解为什么它不起作用
答案 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');