MySQL并发控制

来源:互联网 发布:linux netcat 安装包 编辑:程序博客网 时间:2024/06/15 11:14

并发控制手段有:

1.锁

2.时间戳

3.多版本(MVCC)和快照隔离

MVCC:每一个线程给一个时间副本,每一个线程对此数据操作,最后根据时间点来判断,合并数据。

锁可以分为:

读锁:读的时候其他线程可以读

写锁:独占锁,排他锁,加锁后其他线程不能读不能写,必须等待解锁。

根据锁粒度为:

表锁:整张表加锁。

页锁:部分数据加锁。

行锁:对其中某一行加锁。

对表加锁:LOCK TABLES tb_name {WRITE|READ}。

解锁试用:UNLOCK TABLES。

事务:多步操作要么同时成功,要么同时失败。

A:原子性,同时成功,同时失败(要么同时成功、要么同时失败,不会部分成功或失败)。

C:一致性,两条数据操作前和操作后结果一致(A-5 = B+5)。

I:隔离性,一个线程的执行不能影响其他线程的执行。

D:持久性,永久性,完成或者失败永久有效。

通过事务日志来保证事务的ACID:

同步写日志的速度是非常快的,不影响性能

重做日志:redo log可以无限次重新执行。

撤销日志:undo log保留执行前状态,可以还原回去。

表示每次先写日志,再做数据操作、如果事务提交前服务器挂机,服务启动时可以根据redo log重做日志重新执行

如果回滚,通过undo log 记录的操作前数据状态还原即可。

事务的隔离级别:

从低到高依次为:

读未提交:READ UNCOMMITED,只要操作马上对其他事务可见,隔离级别最低。

读提交:READ COMMITED,提交了对其他事务可见。

可重读:REPEATABLE READ,不管提交不提交,其他事务从开始到结束看到数据一致。

可串行:SERIALIABLE,只有本事务提交了,其他事务才可以执行,隔离几倍最高,效率最差。

MySQL 的innodb引擎默认为可重读级别。

先修改内存,过一段时间才同步到硬盘

如果在在写磁盘过程中出现异常,服务器崩溃,会在服务器启动时重新执行写磁盘操作,称做服务器修复。

事务的状态:

活动的

部分提交的

失败的

中止的

提交的


0 0
原创粉丝点击