[英]checking if record already exists before inserting ERROR
$sql = "INSERT INTO `diver` (`firstname`, `lastname`, `registrated`)
SELECT '$fname', '$lname', now()
WHERE NOT EXISTS (SELECT firstname, lastname FROM `diver` WHERE diver.firstname = '$fname' AND diver.lastname = '$lname')";
我收到此错误:您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册,了解在第 3 行的“WHERE NOT EXISTS (SELECT firstname, lastname FROM diver
WHERE diver.firstname =”) 附近使用的正确语法
代码在 localhost 中工作得很好,但是在我的在线数据库中却不是。 有没有其他解决方案可以做同样的事情?
学习使用参数。 在 MySQL 中,您需要一个from
来使用where
。 一种方法是使用from dual
(采用自 Oracle)。
我倾向于:
INSERT INTO `diver` (`firstname`, `lastname`, `registrated`)
SELECT fname, lname, now()
FROM (SELECT ? as fname, ? as lname) x
WHERE NOT EXISTS (SELECT 1
FROM `diver` d
WHERE d.firstname = x.fname AND
d.lastname = x.lname
);
我假设您打算not exists
,因为插入具有重复值的行通常不是人们想要做的。
实际上,这不是最好的方法。 相反,在名称列上创建一个唯一的索引/约束:
create unique index unq_diver_firstname_lastname on diver(firstname, lastname);
insert into `diver` (`firstname`, `lastname`, `registrated`)
values (?, ?, now())
on duplicate key update firstname = values(firstname);
插入重复项时,这没有任何作用。
另请注意,名称不一定是唯一的,因此检查名称的唯一性通常不是一个好主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.