事务(Transaction)是一系列数据库操作的执行单元,这些操作要么全部成功地执行,要么全部回滚(撤销),从而确保数据库的数据一致性和完整性。
-
原子性(Atomicity):事务被视为一个不可分割的原子操作单元,要么全部执行成功,要么全部失败回滚。如果事务中的任何操作失败,那么所有的操作都会被撤销,数据库状态将回滚到事务开始前的状态。
-
一致性(Consistency):事务的执行将数据库从一个合法状态转换为另一个合法状态。这意味着在事务执行前和执行后,数据库必须满足所有预定义的规则和约束。
-
隔离性(Isolation):事务的执行是相互隔离的,一个事务的操作不会被其他并发事务所干扰。这确保了在并发执行的情况下,数据库仍然保持一致性。
-
持久性(Durability):一旦事务成功提交,其所做的改变将永久保存在数据库中,并且对后续的数据操作和故障具有持久影响。
- 开始事务:
START TRANSACTION; -- 或者使用简写形式:BEGIN;
- 提交事务(将更改保存到数据库):
COMMIT;
- 回滚事务(撤销更改):
ROLLBACK;
案例:
以上代码首先启动了一个事务,然后定义了转账金额和账户。接下来,我们查询转出账户的余额,并根据余额是否足够进行不同的操作。如果余额足够,我们执行转账操作并提交事务。如果余额不足,我们回滚事务,撤销所有更改。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | START TRANSACTION; -- 定义转账的金额和账户 SET @transfer_amount = 100.00; SET @from_account = 'A12345' ; SET @to_account = 'B67890' ; -- 检查转出账户余额是否足够 SELECT balance INTO @from_balance FROM bank_accounts WHERE account_number = @from_account; IF @from_balance >= @transfer_amount THEN -- 转出账户扣款 UPDATE bank_accounts SET balance = balance - @transfer_amount WHERE account_number = @from_account; -- 转入账户收款 UPDATE bank_accounts SET balance = balance + @transfer_amount WHERE account_number = @to_account; -- 提交事务 COMMIT; SELECT 'Transfer successful.' ; ELSE -- 余额不足,回滚事务 ROLLBACK; SELECT 'Insufficient balance. Transfer failed.' ; END IF; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!