事务是一种确保交易一致性的机制。事务应具有下列四种属性:
DBI 提供了两种执行事务的方法。一种是 commit 或 rollback 方法,用于提交或回滚事务。还有一种是 transaction 方法,可用于实现事务。
第一种方法使用 DBI 的 commit 和 rollback 方法来显式地提交或取消事务:
dbh['AutoCommit'] = false # 设置自动提交为 false.
begin
dbh.do("UPDATE EMPLOYEE SET AGE = AGE+1
WHERE FIRST_NAME = 'John'")
dbh.do("UPDATE EMPLOYEE SET AGE = AGE+1
WHERE FIRST_NAME = 'Zara'")
dbh.commit
rescue
puts "transaction failed"
dbh.rollback
end
dbh['AutoCommit'] = true
第二种方法使用 transaction 方法。这个方法相对简单些,因为它需要一个包含构成事务语句的代码块。transaction 方法执行块,然后根据块是否执行成功,自动调用 commit 或 rollback:
dbh['AutoCommit'] = false # 设置自动提交为 false
dbh.transaction do |dbh|
dbh.do("UPDATE EMPLOYEE SET AGE = AGE+1
WHERE FIRST_NAME = 'John'")
dbh.do("UPDATE EMPLOYEE SET AGE = AGE+1
WHERE FIRST_NAME = 'Zara'")
end
dbh['AutoCommit'] = true
Commit 是一种标识数据库已完成更改的操作,在这个操作后,所有的更改都不可恢复。下面是一个调用 commit 方法的简单实例。
dbh.commit
如果您不满意某个或某几个更改,您想要完全恢复这些更改,则使用 rollback 方法。下面是一个调用 rollback 方法的简单实例。
dbh.rollback