事物控制和锁定语句(一)

MySQL⽀持对MyISAM和MEMORY存储引擎的表进⾏表级锁定,对BDB存储引
擎的表进⾏页级锁定,对InnoDB存储引擎的表进⾏⾏级锁定。默认情况下,表锁和⾏ 锁都是⾃动获得的,不需要额外的命令。但是在有的情况下,⽤户需要明确地进⾏锁 表或者进⾏事务的控制,以便确保整个事务的完整性,这样就需要使⽤事务控制和锁 定语句来完成。

1 LOCK TABLEUNLOCK 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

如表 14-1 所⽰是⼀个获得表锁和释放表锁的简单例⼦,演⽰的是 film_text 表获得
read锁的情况,其他session更新该表记录会等待锁,film_text表释放锁以后,其他 session可以进⾏更新操作。其中 session1和 session2表⽰两个同时打开的 session,表格 中的每⼀⾏表⽰同⼀时刻两个 session 的运⾏状况,后⾯的例⼦也都是同样格式,不再 重复说明。

2 事务控制

默认情况下,MySQL      是⾃动提交(Autocommit)的,如果需要通过明确的Commit 和Rollback来提交和回滚事务,那么就需要通过明确的事务控制命令来开始事 务,这是和Oracle的事务管理明显不同的地⽅。如果应⽤是从Oracle数据库迁移到 MySQL数据库,则需要确保应⽤中是否对事务进⾏了明确的管理。

如果只是对某些语句需要进⾏事务控制,则使⽤START       TRANSACTION语句开始⼀个事务⽐较⽅便,这样事务结束之后可以⾃动回到⾃动提交的⽅式,如果希望所有 的事务都不是⾃动提交的,那么通过修改 AUTOCOMMIT 来控制事务⽐较⽅便,这样 不⽤在每个事务开始的时候再执⾏START     TRANSACTION语句。

如下表所⽰的例⼦演⽰了使⽤START TRANSACTION开始的事务在提交后⾃动 回到⾃动提交的⽅式;如果在提交的时候使⽤COMMIT AND CHAIN,那么会在提交 后⽴即开始⼀个新的事务。

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值