【问题标题】:How to update and insert data in one query如何在一个查询中更新和插入数据
【发布时间】:2016-06-21 21:49:43
【问题描述】:

我必须在单个查询中更新和插入 MySQL 中的数据。我有两个表:一个是paytransactionfailure,第二个是walletbalance,其中我必须首先从paytransactionfailure 表中获取数据,然后更新该表的状态并在walletbalance 表中插入数据。这是否可以在一个查询中实现。

我的第一个表名:

支付交易失败

...........................................................
id   fromid   toid    amount  refund_status  user_register
...........................................................
1      5       6        20          0             1

钱包余额

...............................................
id    user_id      balance    transaction_type
...............................................
1       5          100           credit

如果 SELECT * from paytransactionfailure WHERE restore_status='0' 和 user_register='1' 和 fromid='5' 查询存在,我想要这个,那么我必须同时更新 paytransactionfailure 表中的refund_status=1有时间我想在 walletbalance 表中为 fromid 用户像这样插入数据

想要这个输出

  ...............................................
    id    user_id      balance    transaction_type
    ...............................................
    1       5          100           credit
    2       5           20           credit

为此,我使用了以下查询,但我已成功更新记录,但在钱包余额中插入记录时未成功。
这是可能的还是我走错了方向?

UPDATE paytransactionfailure
    SET `refund_status` =1
    WHERE EXISTS (SELECT * from paytransaction WHERE refund_status='0' and `user_register`='1')

【问题讨论】:

  • 你可以试试这个 IF EXISTS(select * from test where id=30122) update test set name='john' where id=3012 ELSE insert into test(name) values('john');其他获得更好性能的方法是更新测试集 name='john' where id=3012 IF @@ROWCOUNT=0 insert into test(name) values('john');
  • MySql 不是 sql-server。是哪一个?
  • 在重复密钥更新时插入,或使用事务在服务层执行此操作。或者你可以用 db trigger 来做,但是当服务目标变大时它会花费很多。
  • 我想大多数人都能理解我在 IODKU 上的这个answer
  • 您不能在一个语句中更新一个表并插入另一个表。您可以在适当的时候启动事务并提交/回滚它。我已经从标签列表中删除了sql-server,因为您的示例查询是使用 mysql 语法编写的。

标签: php mysql


【解决方案1】:

您要查找的是INSERT ... ON DUPLICATE KEY UPDATE(插入新行或更新已存在的行)或REPLACE(插入新行并覆盖任何已存在的数据)。

在这两种情况下,语句都依赖表中的UNIQUE keys,而您的walletbalance表中缺少该表,并且语句只能在同一张表上执行。

您可能希望考虑使用存储过程来执行这些操作 - 或完全重新设计该过程,因为 IMO 所讨论的架构并不是为您尝试使用它而设计的。

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 2014-02-09
    • 1970-01-01
    • 2017-09-24
    • 2016-06-14
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多