我试图在DB浏览器中为SQLite执行SQLite事务,但是出现了意外行为。我在其中一个查询中故意拼错了一个表的名称,但它仍然在其他表中插入数据,除了我错误拼写的表。 这是我的疑问:
BEGIN;
INSERT INTO vouchers (person_id, date, amount, description, mop, transaction_id) VALUES('XXXX','XXXX','XXX','XXX','XXXX','XXXX');
INSERT INTO personal_info (id, name, address, city, state, mobile, member) VALUES('XXXX','XXXX','XXXX','XXX','XXX','XX','XX');
INSERT INTO membership_info (person_id, join_date, transaction_id) VALUES('XXX','XXX','XXX');
INSERT INTO cas (id, person_id, date, remarks, type, amount, balance) VALUES('XXXX','XXXX','XXXXX','XXXX','XXX','XXX','XXX') ;
COMMIT;
我故意拼错了上一个查询INSERT INTO cas
中的表名,而不是INSERT INTO cash
,但是除了最后一个查询之外,其他查询仍然有效。我还尝试用COMMIT;
ROLLBACK;
答案 0 :(得分:2)
但它是一个交易,如果查询失败,其余的查询就不起作用
不,那不是交易如何运作。
提交事务时,启动事务后的所有更改都会对数据库中的其他人可见。在回滚的情况下,更改将被丢弃。
无效的SQL不会在事务中产生任何更改,只会返回错误。作为程序员,它 负责检测错误并为您选择适当的解决方案策略,例如回滚交易或提交。