教程集 www.jiaochengji.com
教程集 >  数据库  >  mysql  >  正文 mysql中的锁、事务、并发控制的相关知识

mysql中的锁、事务、并发控制的相关知识

发布时间:2016-02-23   编辑:jiaochengji.com
本文介绍下,mysql数据库中,有关锁、事务、并发控制的相关内容,有需要的朋友参考下。

本节内容:
mysql中的锁、事务、并发控制

1、并发控制
无论何时,只要不止一个查询同时修改数据,都会产生并发控制问题--并发读和并发写。
读锁(Read Lock)/写锁(Write Lock)
锁系统是用于处理并发读或并发写时出现的数据不一致等问题。也称为共享锁(Share Lock)和排他锁(Exclusive Lock)。

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

另一方面,写锁是排他的,一个写锁会阻塞其他的读锁和写锁,这是出于安全策略的考虑,在给定时间里,只有一个用户能写入资源,以防止用户在写操作的同时其他用户读取同一资源。

对数据库来说,随时随地都会发生锁定。当某一用户修改某一部分数据时,MySQL会禁止其他用户读取同一数据。
大多数时候,MySQL都是以透明的方式实现锁的内部管理。

每种MySQL存储引擎都可以实现独有的锁策略(Locking Policy)或锁粒度(Lock Granularitey)。
在存储引擎设计中,锁管理(Lock Management)是个非常重要的议题。

接下来,介绍两种最重要的锁策略。

2、表锁(Table Lock)
MySQL支持大多数基本的锁策略,其中开销最小的锁策略是表锁。将给个表枷锁。当一个用户对表进行写操作时,用户可以获得一个写锁。写锁会禁止其他用户的读/写操作。

另外,只有无人进行写操作时,用户才能获得读锁,读锁之间是互不冲突的。

在特定的环境中,表锁可能性能良好。例如,READ LOCAL 表锁支持某种类型的并发写操作。
另外,写锁比读锁有更高的优先级,即使有读操作用户已排在队列中,一个被申请的写锁仍可以排列在锁队列的前列。

虽然存储引擎管理自己的锁,MySQL本身也能使用各种有效的表锁,以用于各种目的。
例如,mysql数据库可以在语句中,如ALTER TABLE语句中,使用写锁,而不用考虑存储引擎。

1)、行级锁(Row Locks)
行级锁可以支持最大的并发处理(同时也带来最大的锁开销)。
支持引擎InnoDB等。行级锁是由存储引擎实现,而不是由MySQL服务器实现。
服务器完全不了解存储引擎里的锁实现方式。

2)、事务
事务是一组原子性的SQL查询语句,也可以被看做一个工作单元。如果数据库引擎能够成功地数据库应用所有的查询语句,它就会执行所有查询,但是,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都不会执行。也就是说,事务内的语句要么全部执行,要么一句也不执行。

3)、ACID测试

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

隔离性(Isolation)
某个事务的结果只有在完成之后才对其他事务可见。
持久性(Durability)

您可能感兴趣的文章:
mysql中的锁、事务、并发控制的相关知识
MySQL数据库之锁的详解
mysql LOCK TABLES和UNLOCK TABLES
mysql如何锁定单个表
db2和mysql的区别是什么
深入分析MySQL更新死锁问题
有关MyISAM引擎的锁定机制
php编程需要用锁吗
golang知识点
mysql数据库自增id用法大全

[关闭]
~ ~