SQL更新是否存在,如果不存在则插入不起作用
问题描述:
我想更新一条记录(如果它存在或创建一条新记录,如果它不存在但不知何故它会抛出一个错误,我找不到原因)。SQL更新是否存在,如果不存在则插入不起作用
我想更新客户的状态(如果存在)或创建新客户(如果不存在)。
我的查询:
$sql = "SELECT CASE WHEN EXISTS (SELECT * FROM sms WHERE number = '123456789' AND customer_id = '1') THEN UPDATE sms SET stat = '1' ELSE INSERT INTO sms (number, customer_id, stat) values ('+32485386902', '1', '1') END"
这将引发错误:
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
UPDATE sms SET stat = '1' ELSE INSERT INTO sms (number, customer_id, stat) value
at line 1
但是如果我更改更新和插入到1和2这表明1,如果存在,或者2如果没有。
任何人都可以帮助我:)?非常感谢!
答
添加第二个关键CUSTOMER_ID使这个工作:
$ sqlsms =“INSERT INTO短信(号码,CUSTOMER_ID,STAT)VALUES( '$电话', '$ compID', '$ smsPromo')在DUPLICATE KEY UPDATE上stat ='$ smsPromo'“;
答
在SELECT查询中,你总是必须有FROM子句。我建议你先写一个SELECT查询来知道记录是否存在,然后如果记录不存在,你可以运行INSERT else UPDATE。你不能在subquerys中使用SELECT * FROM sms
,这是错误的sixtaxe。
也许我错了,但我认为SELECT会返回列并且不执行任何INSERT,UPDATE或DELETE查询。但是,使用MySQL,您可以使用REPLACE关键字来解决您的问题。但请记住,该解决方案将仅在mySQL环境中可用(如果您更改了RDBMS,则不起作用)。 –
使数字成为主键,然后使用'insert into ... on duplicate update'。 – chris85
除了'$ sql' var ..其中是'PHP'和'if-statement'? –