开高级程序开发设计中,不免会有数据库的写入和输出,有些时候考虑到写入多个数据在其中一个业务内进行排查和修改,万一在逻辑下其中一行在数据或者逻辑报错,会致使以前写入的内容原封不动在数据库里面mysql
事务简单来讲,就是处理一件数据库事情
俗称数据库事务(Datebase Transaction)
是在程序设计内一段(单元)内容进行操做
复制代码
原子性(atomicity):一个事务内是彻底独立,不可分割的sql
隔离性(isoation):事务内容不能被其余事务被干扰数据库
一致性(consistenc):事务必须从一个一致性状态转为另一个一致性安全
持久性(durability):一个事务一旦提交,它的数据库的影响是永久的bash
show engines; --查看数据库引擎
default-storage-engine = Innodb --my.ini修改引擎
复制代码
在Mysql 5.2以后带Innodb数据库引擎数据才能使用事务处理 通常Mysql默认事务为自动提交(autocommit)服务器
begin; --开启事务(START TANSACTION)
commit; --提交事务
rollback; --回滚事务
复制代码
回到刚刚的程序设计逻辑里面
在数据写入前,事务改成手动提交(begin),若是业务逻辑中途出错,捕捉异常,而后吧数据回归到原始状态,若是没有任何问题,永久保存(commit),这样保证这段内容输入为正确的数据 session
事务可以给业务逻辑上必定写入安全,可是在数据上存在大量的并发风险并发
为有效防止事务并发可能性发生,mysql在事务处理上添加了事务隔离
事务隔离状况以下ui
select @@tx_isolation --mysql5查询级别
select @@transaction_isolation; --mysql8查询级别
set session transaction isolation level XXX
--设置会话级别
复制代码
有些时候事务可以给予安全的数据写入,可是也有弊端,因此通常都要善用数据库的时间处理,好比说服务器惟一支付回调接口才能操做数据,其余接口只能查看状态,可是支付接口会影响库存,呢只能在数据操做上为不可重复读,通常须要锁行atom