MySQL之锁、事务、并发控制

并发控制

无论何时,只要不止一个查询同时修改数据,都会产生并发控制问题--并发读和并发写。

读锁(Read Lock)/写锁(Write Lock)

锁系统是用于处理并发读或并发写时出现的数据不一致等问题。也称为共享锁(Share Lock)和排他锁(Exclusive 

Lock)。

锁的概念:

某一资源上的读锁是共享的,或者说是互不阻塞的。在同一时间,多个用户可以读取同一资源,而互不干扰。另一

方面,写锁是排他的,一个写锁会阻塞其他的读锁和写锁,这是出于安全策略的考虑,在给定时间里,只有一个用户

能写入资源,以防止用户在写操作的同时其他用户读取同一资源。

对数据库来说,随时随地都会发生锁定。当某一用户修改某一部分数据时,MySQL会禁止其他用户读取同一数据。大

多数时候,MySQL都是以透明的方式实现锁的内部管理。

每种MySQL存储引擎都可以实现独有的锁策略(Locking Policy)或锁粒度(Lock Granularitey)。在存储引擎设计

中,锁管理(Lock Management)是个非常重要的议题。下面介绍两种最重要的锁策略。

表锁(Table Lock)

MySQL支持大多数基本的锁策略,其中开销最小的锁策略是表锁。将给个表枷锁。当一个用户对表进行写操作时,用

户可以获得一个写锁。写锁会禁止其他用户的读/写操作。另外,只有无人进行写操作时,用户才能获得读锁,读锁

之间是互不冲突的。

在特定的环境中,表锁可能性能良好。例如,READ LOCAL 表锁支持某种类型的并发写操作。另外,写锁比读锁有

更高的优先级,即使有读操作用户已排在队列中,一个被申请的写锁仍可以排列在锁队列的前列。

虽然存储引擎管理自己的锁,MySQL本身也能使用各种有效的表锁,以用于各种目的。例如,MySQL服务器可以在语句

中,如ALTER TABLE语句中,使用写锁,而不用考虑存储引擎。

行级锁(Row Locks)

行级锁可以支持最大的并发处理(同时也带来最大的锁开销)。支持引擎InnoDB等。行级锁是由存储引擎实现,而不

是由MySQL服务器实现。服务器完全不了解存储引擎里的锁实现方式。

事务

事务是一组原子性的SQL查询语句,也可以被看做一个工作单元。如果数据库引擎能够成功地数据库应用所有的查询

语句,它就会执行所有查询,但是,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都不

会执行。也就是说,事务内的语句要么全部执行,要么一句也不执行。

ACID测试

原子性(Atomicity)

一个事务必须被视为一个单独的内部“不可分”的工作单元,以确保整个事务要么全部执行,要么全部回滚。

一致性(Consistency)

隔离性(Isolation)

某个事务的结果只有在完成之后才对其他事务可见。

持久性(Durability)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值