mysql中的事务

什么是事务?

举个例子,小王有金额5000,今天他手机转账给员工小李发奖金1000元。当小王点击汇款时,他的账户减少1000,但是在发送的过程中网络不稳定,导致汇款没到小李的账户,那么这1000元去哪了?
事务的出现就可以帮我们解决这类问题,事务主要用于处理操作量大,复杂度高的数据。

  • 每条SQL语句都是事务
  • 事务只对DML语句有效,对DQL无效。

事务的ACID

  • 原子性 Atomicity
  • 一致性 Consistency
  • 隔离性 Isolation
  • 持久性 Durability
  1. 原子性,如刚刚举的例子,原子性包含两个重要概念,即提交和回滚;小王在支付操作的时候是提交操作,当遇到意外导致交易无法完成,则启动事务回滚,此时交易为未完成。而不是直接扣除小王的账户余额。
  2. 一致性,在每次提交或回滚之后以及正在进行的事务处理期间,数据库始终保持一致状态。
  3. 隔离性,事务之间不能互相干扰,也不能看到彼此的未提交数据。
  4. 持久性,一旦提交操作成功,该事务所做的更改就不会因为一些意外而丢失。

事务的使用

  • 开启事务: start transaction
  • 提交事务: commit //所有语句全部执行完毕,没有发生异常,提交事务,数据更新到数据库中。
  • 回滚事务: rollback //遇到突发情况,则撤销所执行的SQL语句。

例:先在Windows操作系统下打开cmd,进入你的MySQL

mysql>use my-db;
mysql>start transaction;
mysql>update xw set money = money - 1000; //还未提交事务
mysql>rollback; //假如此时遇到意外了,撤销以上操作
//若正常执行,则
mysql>commit; //提交事务
MySQL事务隔离是数据库事务处理的一个关键概念,它用于控制并发访问数据库时的一致性。事务隔离级别定义了不同用户在同一时间对数据的操作如何互相影响。MySQL提供了几种不同的事务隔离级别: 1. **读未提交(READ UNCOMMITTED)**:这是最低的隔离级别,事务可以读取其他事务未提交的数据,可能导致脏读(读取到的是未提交更新的数据)和幻读(查询结果因其他事务的插入或删除而改变)。 2. **读已提交(READ COMMITTED)**:在此级别,事务只能看到已经提交的变更。这防止了脏读,但仍然可能面临不可重复读(由于其他事务的更新,相同的查询返回不同的结果)。 3. **可重复读(REPEATABLE READ)**:在此模式下,事务在其整个生命周期内不会看到其他事务对其已锁定行的更改,这保证了事务的隔离性和一致性,但是可能出现幻读(如果另一个事务在该事务范围内插入了新行)。 4. **串行化(SERIALIZABLE)**:这是最高的隔离级别,保证了每个事务好像在单独使用数据库一样执行,完全避免了并发冲突,但性能开销最大。 选择哪个隔离级别取决于应用的具体需求。例如,如果对数据一致性要求很高,会选择可重复读或串行化,但如果希望提高并发性能,可能会接受较低级别的隔离,但可能需要更复杂的并发控制策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值