mysql

(016)mysql中的表锁定及事务控制

2016-01-21  本文已影响172人  林湾村龙猫

概述

MySQL支持三种锁级别:页级表级行级。MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。在默认情况下,表锁和行锁都是自动获取的,不需要额外的命令。三种锁级别优缺点如下:

表锁定

1.语法

#锁定表
LOCK TABLES 
    tb_name1 [AS alias] {READ[LOCAL]|[LOW_PRIORITY] WRITE}
    tb_name2 [AS alias] {READ[LOCAL]|[LOW_PRIORITY] WRITE}
    ...
#释放表锁定
UNLOCK TABLES;

2.举例

这是一个获取表锁及释放表锁的例子。其中session1和session2表示两个同时打开的session(连接/线程),表格中的每一行表示同一时刻两个session的运行情况,后面的例子也是同样的格式。


表锁举例

事务控制

MySQL通过set autocommit、start transaction、commit、rollback等语句支持本地事务。

1.语法

START TRANSACTION |BEGIN [WORK]
COMMIT [WORK][AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK][AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT={0|1}

2.举例

举例一
使用start transaction和commit and chain。

事务控制1-1
事务控制1-2
事务控制1-3

举例二
在锁表期间,用start transaction命令开启新事务,会造成隐含的unlock tables被执行。

事务控制2-1
事务控制2-2
举例三
在事务中可以通过定义savepoint,指定回滚事务的一个部分,但是不能指定提交事务的一个部分。对于复杂的应用,可以定义多个不同的savepoint,满足不同的条件时,回滚不同的savepoint。需要注意的是,如果定义了相同名字的savepoint,则后面定义的savepoint会覆盖之前的定义。对于不再需要使用的savepoint,可以通过release savepoint命令删除savepoint,删除后的savepoint,不能再执行rollback to savepoint命令。
事务控制3-1
事务控制3-2

参考

http://blog.csdn.net/xiao7ng/article/details/4916220
http://www.cnblogs.com/huangye-dream/archive/2013/07/06/3174725.html
http://c.biancheng.net/cpp/html/1469.html

上一篇下一篇

猜你喜欢

热点阅读