Mysql事务:
事务的概念:
对于用户而言,事务是具有完整逻辑意义的数据库操作序列的集合。对于数据库管理系统而言,事务是一个读写操作序列。这些操作是一个不可分割的逻辑工作单元,要么都做,要么都不做。
事务结束语句:
1 事务提交(commit):将成功完成事务的执行结果(即更新)永久化,并释放事务占有的全部资源
2 事务回滚(rollback) : 终止当前事务,撤销其对数据库做的更新,并释放事务占有的全部资源。
事务的特性:
原子性:事务的所有操作要么全部被执行,要么都不被执行
一致性:一个单独执行的事务应保证其执行的结果的一致性,即总是将数据库从一个一致性状态转化到另一个一致性状态。事务的一致性包括显式一致性和隐式一致性。显式一致性是显式定义的完整性约束,,如主码,外码,自定义约束等。隐式一致性是业务规则隐含的完整性要求。如机票售出后,一航班已售出票数和剩余票数之和应该等于该航班的全部座位数;转账完成后A和B账户的存款余额总和不变。
持久性:一个事务提交成功后,他对数据库的改变必须是永久的,即使随后系统出现故障也不会受到影响
隔离性:多个事务并发执行时,一个事务的执行不i能影响另一个事务,即并发执行的各个事务之间不能相互干扰
事务的并发执行可能导致的问题:
1 脏读:如果T2读取到了T1修改但未提交的数据后,T1由于某种原因中止而撤销,这时T2就读到了不一致的数据
2 不可重复读:
(1) 事务Ti 2次从数据库读取到的结果不同。Ti读取一数据后,Tj对该数据进行了修改,当Ti再次读取该数据时,则会读到与前一次不同的值。
(2)(幻读)Ti按照某条件读取数据库中的某些记录后,Tj删除/插入了一些记录,当Ti再次读取时,发现记录数改变了。
3 丢失更新(虚读):2个或多个事务都读取了同一个数据并修改,最后提交的事务的执行结果覆盖了前面的事务提交的执行结果,而导致前面事务的更新被丢失。
mysql数据库提供的4种隔离级别:
1.Read uncommitted(读未提交):最低级别,任何情况都无法保证
2.Read committed(读已提交) :可以避免脏读
3.Repeatable read (可重复度):避免脏读,不可重复度 (mysql默认)
4.Serializable(串行化) :避免脏读。不可重复度,丢失更新