数据库事务与 Active Record 高级特性
1. 数据库事务
1.1 事务的概念
数据库事务将一系列更改组合在一起,要么所有更改都被应用,要么都不被应用。以银行账户之间的资金转移为例,基本逻辑是从一个账户取款并存入另一个账户。但如果取款成功而存款失败,就会导致数据不一致。事务就像“三个火枪手”的座右铭“人人为我,我为人人”,在事务范围内,要么每个 SQL 语句都成功,要么都没有效果。
1.2 Active Record 中的事务使用
在 Active Record 中,使用 transaction() 方法在特定数据库事务的上下文中执行一个代码块。代码块结束时,如果没有抛出异常,事务将提交并更新数据库;如果抛出异常,所有更改将回滚,数据库保持不变。
以下是一个简单的事务示例,用于在两个账户之间转移资金:
Account.transaction do
account1.deposit(100)
account2.withdraw(100)
end
1.3 事务实验
1.3.1 创建数据库表
使用 MySQL 数据库时,需要使用支持事务的 InnoDB 存储引擎创建表。
create table accounts (
id int not null auto_increment,
number varchar(10) not null,
bal
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



