【问题标题】:SQL update if exist, insert if not exist not workingSQL 如果存在则更新,如果不存在则插入不起作用
【发布时间】:2018-02-05 00:01:14
【问题描述】:

我想更新一条记录(如果存在)或创建一条新记录(如果它尚不存在),但不知何故它抛出了一个错误,我不知道为什么..

我想更新客户的状态(如果存在)或创建新客户(如果不存在)。

我的查询:

$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 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法 在第 1 行使用 UPDATE sms SET stat = '1' ELSE INSERT INTO sms (number, customer_id, stat) value 附近

但是,如果我更改更新并插入到 1 和 2,则如果存在则显示 1,如果不存在则显示 2。

谁能帮帮我:)?非常感谢!

【问题讨论】:

  • 也许我错了,但我认为 SELECT 确实返回列并且不执行任何 INSERT、UPDATE 或 DELETE 查询。但是,对于 MySQL,您可以使用 REPLACE 关键字来解决您的问题。但请记住,该解决方案仅在 mySQL 环境中可用(如果您更改 RDBMS,将​​无法正常工作)。
  • 将数字设为主键,然后使用insert into ... on duplicate update
  • 除了$sql var..PHPif-statement 在哪里?

标签: php mysql if-statement exists


【解决方案1】:

向 customer_id 添加第二个键使其工作:

$sqlsms = "INSERT INTO sms (number, customer_id, stat) VALUES('$phone', '$compID', '$smsPromo') ON DUPLICATE KEY UPDATE stat = '$smsPromo'";

【讨论】:

    【解决方案2】:

    在 SELECT 查询中,您始终必须有子句 FROM。我建议您首先编写一个 SELECT 查询以了解记录是否存在,然后如果记录不存在,您可以运行 INSERT else UPDATE。你不能在子查询中使用SELECT * FROM sms,这是错误的sixtaxe。

    【讨论】:

      猜你喜欢
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      相关资源
      最近更新 更多