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(串行化) :避免脏读。不可重复度,丢失更新