事务: 事务是一组原子性sql查询语句,被当作一个工作单元。若mysql对改事务单元内的所有sql语句都正常的执行完,则事务操作视为成功,所有的sql语句才对数据生效,若sql中任意不能执行或出错则事务操作失败,所有对数据的操作则无效(通过回滚恢复数据)。
事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个特性,简称 ACID,缺一不可。
1、原子性:事务被认为不可分的一个工作单元,要么全部正常执行,要么全部不执行。
2、一致性:事务操作对数据库总是从一种一致性的状态转换成另外一种一致性状态。
3、隔离性:一个事务的操作结果在内部一致,可见,而对除自己以外的事务是不可见的。
4、永久性:事务在未提交前数据一般情况下可以回滚恢复数据,一旦提交(commit)数据的改变则变成永久(当然用update肯定还能修改)。
ps:MYSAM 引擎的数据库不支持事务,所以事务最好不要对混合引擎(如INNODB 、MYISAM)操作,若能正常运行且是你想要的最好,否则事务中对非支持事务表的操作是不能回滚恢复的。
隔离级别:
未提交读:会产生脏读。A把数据100修改为50 ,B查询到数据为50,A执行数据50回滚为100,那么B得到的数据为脏数据;
已提交读:会产生不可重复读。B查询到数据为100,A把数据100修改为50并提交,B查询到数据为50。
可重复读:会产生幻读 。B查询到数据有100条记录,A把数据删除50条并提交,A查询显示数据有50条记录。B查询到数据有100条记录,B将记录新增50条并提交,B查询依旧有100条记录。A查询也是100条记录。此时发生幻读。
可串行化:A打开事务新增数据,未提交。B也打开事务,新增数据就会报错。A提交,数据新增成功;