概述
简介
MySQL 支持对MyISAM 和MEMORY 存储引擎的表进行表级锁定,对BDB 存储引擎的表进行页级锁定,对InnoDB 存储引擎的表进行行级锁定。
默认情况下,表锁和行锁都是自动获得的,不需要额外的命令。但是在有的情况下,用户需要明确地进行锁表或者进行事务的控制,以便确保整个事务的完整性,这样就需要使用事务控制和锁定语句来完成。
语法
LOCK TABLE 和UNLOCK TABLE:
- LOCK TABLES 可以锁定用于当前线程的表。如果表被其他线程锁定,则当前线程会等待,直
到可以获取所有锁定为止。 - UNLOCK TABLES 可以释放当前线程获得的任何锁定。当前线程执行另一个LOCK TABLES 时,或当与服务器的连接被关闭时,所有由当前线程锁定的表被隐含地解锁,
LOCK TABLES
tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}
[, tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}] ...
UNLOCK TABLES
例子:
lock table film_text read;
select film_id,title from film_text
where film_id = 1001;
unlock tables;
事务控制
MySQL 通过SET AUTOCOMMIT、START TRANSACTION、COMMIT 和ROLLBACK 等语句支持本地事务
//START TRANSACTION 或BEGIN 语句可以开始一项新的事务。
START TRANSACTION | BEGIN [WORK]
//COMMIT 和ROLLBACK 用来提交或者回滚事务。
//CHAIN 和RELEASE 子句分别用来定义在事务提交或者回滚之后的操作,CHAIN 会立
//即启动一个新事物,并且和刚才的事务具有相同的隔离级别,RELEASE 则会断开和客户端的连接。
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
//SET AUTOCOMMIT 可以修改当前连接的提交方式,如果设置了SET AUTOCOMMIT=0,
//则设置之后的所有事务都需要通过明确的命令进行提交或者回滚。
SET AUTOCOMMIT = {0 | 1}
默认情况下,MySQL 是自动提交(Autocommit)的,如果需要通过明确的Commit 和Rollback 来提交和回滚事务,那么需要通过明确的事务控制命令来开始事务
选择:
- 如果只是对某些语句需要进行事务控制,则使用START TRANSACTION 语句开始一个事务
比较方便,这样事务结束之后可以自动回到自动提交的方式 - 如果希望所有的事务都不是自动提交的,那么通过修改AUTOCOMMIT 来控制事务比较方便,这样不用在每个事务开始的时候再执行START TRANSACTION 语句。
- 如果在锁表期间,用start transaction 命令开始一个新事务,会造成一个隐含的unlock tables 被执行
- 在同一个事务中,最好不使用不同存储引擎的表,否则ROLLBACK 时需要对非事务类型的表进行特别的处理,因为COMMIT、ROLLBACK 只能对事务类型的表进行提交和回滚。
最后
以上就是阔达河马为你收集整理的Mysql事务控制和锁定语句的全部内容,希望文章能够帮你解决Mysql事务控制和锁定语句所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复