【发布时间】: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 语法编写的。