MYSQL事务处理

什么叫事务?

开高级程序开发设计中,不免会有数据库的写入和输出,有些时候考虑到写入多个数据在其中一个业务内进行排查和修改,万一在逻辑下其中一行在数据或者逻辑报错,会致使以前写入的内容原封不动在数据库里面mysql

这样子会致使, 程序抛出异常,错误的数据完整无缺保存到数据库.

事务简单来讲,就是处理一件数据库事情
俗称数据库事务(Datebase Transaction)
是在程序设计内一段(单元)内容进行操做
复制代码

事务的四大特性

  • 原子性(atomicity):一个事务内是彻底独立,不可分割的sql

  • 隔离性(isoation):事务内容不能被其余事务被干扰数据库

  • 一致性(consistenc):事务必须从一个一致性状态转为另一个一致性安全

  • 持久性(durability):一个事务一旦提交,它的数据库的影响是永久的bash

Mysql事务处理

show engines; --查看数据库引擎
default-storage-engine = Innodb --my.ini修改引擎
复制代码

在Mysql 5.2以后带Innodb数据库引擎数据才能使用事务处理 通常Mysql默认事务为自动提交(autocommit)服务器

begin; --开启事务(START TANSACTION)
commit; --提交事务
rollback; --回滚事务
复制代码

回到刚刚的程序设计逻辑里面
在数据写入前,事务改成手动提交(begin),若是业务逻辑中途出错,捕捉异常,而后吧数据回归到原始状态,若是没有任何问题,永久保存(commit),这样保证这段内容输入为正确的数据 session

事务带来的问题

事务可以给业务逻辑上必定写入安全,可是在数据上存在大量的并发风险并发

  • 并发风险一:脏读
    当其中两条线程同时对同一个表操做,对方拿到是还没有保存的脏数据
  • 并发风险二:不可重复读
    两个数据同时对一条数据进行操做和查看,通常会在库存删减上体现
  • 并发风险三:幻读
    两个线程同时对同一个表操做,致使内容预期不符合

事务隔离

为有效防止事务并发可能性发生,mysql在事务处理上添加了事务隔离
事务隔离状况以下ui

  • 读未提交 (read-uncommitted)
  • 读已提交(read-committed)
  • 可重复读(reapeatable-read)
  • 串行化(serializable)
select @@tx_isolation --mysql5查询级别
select @@transaction_isolation; --mysql8查询级别
set session transaction isolation level XXX
--设置会话级别
复制代码

总结

有些时候事务可以给予安全的数据写入,可是也有弊端,因此通常都要善用数据库的时间处理,好比说服务器惟一支付回调接口才能操做数据,其余接口只能查看状态,可是支付接口会影响库存,呢只能在数据操做上为不可重复读,通常须要锁行atom

相关文章
相关标签/搜索