您的位置:首页 > 数据库 > MySQL

MySQL事务及隔离级别

2015-08-22 17:15 645 查看
1.MySQL有三种锁的级别(锁粒度):页级、表级、行级。
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。

2.MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write
Lock)。

  读锁:共享锁,不会阻塞其他线程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其它进程的写操作。
  写锁:独占锁,会阻塞其他线程对同一表的读和写操作,只有当写锁释放后,才会执行其它进程的读写操作。
  LOCK TABLES tb_name {READ|WRITE};    #加锁
  UNLOCK TABLES;    #解锁
3.事务:多项操作要作为同一个处理单元对待,它们要么同时都执行,要么同时都不执行。
事务的ACID(Automicity \Consistency \Isolation \Durablility):
A:原子性,事务所引起的数据库操作,要么都完成,要么都不执行;
C:一致性,在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏;

I:隔离性,事务调度时,让各事务之间的影响尽可能小;
D:持久性,一旦事务成功完成,系统必须保证任何故障都不会引起事务表示出不一致性;
事务隔离级别:

读未提交(READ UNCOMMITTED):这种隔离级别可以让当前事务读取到其它事务还没有提交的数据。
读提交(READ COMMITTED):这种隔离级别可以让当前事务读取到其它事务读取特定记录的时候都是一样的。
可串行(SERIALIZABLE):这种隔离级别将事务放在一个队列中,每个事务开始之后,别的事务被挂起。
参考资料:
事务的启动和提交:
启动事务:START TANSACTION;
提交事务:COMMIT;
回滚事务:ROLLBACK;
注:服务器变量autocommit=1时,能实现自动提交,每一个操作都直接提交。
MySQL锁机制详解: http://www.cnblogs.com/huangye-dream/archive/2013/07/06/3174725.html

MySQL事务: http://blog.chinaunix.net/uid-22606185-id-3252443.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: