我有以下查询
INSERT INTO balance
(_id, value)
VALUES
(1,10)
ON DUPLICATE KEY
UPDATE value=VALUES(value + 10)
显然这会更新一行,如果该行不存在,则会创建该行。
现在我想在上一个查询成功完成后执行以下查询
INSERT INTO transaction (owner, value, type, description) VALUES (1, 10,'CREDIT','User Deposit');
如何将第二个查询链接起来,如果第一个成功,则只能执行第二个查询。
有什么想法吗?
答案 0 :(得分:0)
您可以使用输出子句:
UPDATE TableA
SET ColA = 'SomethingNew'
OUTPUT DELETED.ColA , INSERTED.ColA
WHERE YourLogicHere;
GO;
答案 1 :(得分:0)
如果您使用InnoDB引擎,您应该只使用一个事务:
START TRANSACTION;
INSERT INTO balance
(_id, value)
VALUES
(1,10)
ON DUPLICATE KEY
UPDATE value=VALUES(value + 10);
INSERT INTO transaction (owner, value, type, description) VALUES (1, 10,'CREDIT','User Deposit');
COMMIT;
如果第一个语句失败,则第二个语句不会被提交。
答案 2 :(得分:0)
使用行计数。使用移动设备进行拼写错误 插入平衡 (_id,value) VALUES (1,10) 在DUPLICATE KEY UPDATE值= VALUES(值+ 10)
选择row_count到@count; 如果@ count> 0则 INSERT INTO交易(所有者,价值,类型,描述)VALUES(1,10,'CREDIT','用户存款');
结束if;