【问题标题】:SQLite Transactions not workingSQLite 事务不起作用
【发布时间】:2018-02-21 06:17:44
【问题描述】:

我正在尝试在 DB Browser for 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;

【问题讨论】:

  • 是的 - 这就是 SQL 的工作方式。你期待什么?
  • 看看这里,这似乎是你想要的:stackoverflow.com/questions/22108253/…
  • 但这是一个事务,如果查询失败,其余查询将无法正常工作

标签: sql sqlite transactions


【解决方案1】:

但这是一个事务,如果查询失败,其余查询将无法正常工作

不,这不是交易的运作方式。

当您提交事务时,您开始事务后的所有更改都会对数据库中的其他人可见。在回滚的情况下,更改将被丢弃。

无效的 SQL 不会在事务内部产生任何更改,只会返回错误。作为程序员,有责任检测错误并为您选择适当的解决策略,例如回滚事务或提交。

【讨论】:

    猜你喜欢
    • 2012-10-04
    • 2018-12-05
    • 1970-01-01
    • 2011-01-17
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多