mysql的锁

本文详细介绍了MySQL中的不同存储引擎所采用的锁机制,包括MyISAM、MEMORY和InnoDB存储引擎的特点。对于InnoDB存储引擎,文章深入探讨了其支持的表级锁和行级锁机制,以及如何通过SQL语句实现共享锁和排他锁。

在MySQL中,不同的存储引擎采用的不同的锁机制,如MyISAM和MEMORY存储引擎采用表级锁,InnoDB存储引擎既支持行级锁,也支持表级锁。

MySQL中使用表锁的语句如下:

lock table table_name read;共享读锁,会阻塞写

lock table table_name write;独占写锁,会阻塞读

unlock  tables;释放锁

在MyISAM中执行select和update,insert,delete操作时,系统会自动给表加上相应的锁

lock table时,需要一次锁定sql中用到的所有表,而且如果sql使用了表别名,则需要对别名也都加锁,如:

select a.first_name,b.last_name from user a,user b where a.id=b.id;需要如下的锁定方式:

lock table user as a read,user as b read;

InnoDB的表锁也是同样,下面说说InnoDB的行级锁。

InnoDB实现了两种类型的行锁:

共享锁:允许一个事务去读一行,阻止其他事务获得相同数据行的排他锁

排他锁:允许获得该锁的事务更新数据,阻止其他事务获得相同数据行的排他锁和共享锁

以下是mysql中加以上两种锁的sql语句:

select .....in share mode;共享锁

select .....for update;排他锁

另外说说InnoDB的行锁实现方式,InnoDB是通过给索引上的索引项加锁来实现,这一点和Oracle是不同的,所以只有使用索引的操作InnoDB才会使用行级锁,否则InnoDB就使用表锁。而且如果两个sql同时如果刚好用到的是同样的索引键,也会发生阻塞,另外因为一个表中可能有多个索引,如果一个操作通过某个索引锁定了数据集,另外一个操作要通过另外的索引来锁定同样的数据集,那么也会发生阻塞。

因此,在操作前,最好通过explain查看一下sql的执行计划,看操作是否使用的索引。

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/165278/viewspace-441972/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/165278/viewspace-441972/

【无人机】基于改进粒子群算法的无人机路径规划研究[和遗传算法、粒子群算法进行比较](Matlab代码实现)内容概要:本文围绕基于改进粒子群算法的无人机路径规划展开研究,重点探讨了在复杂环境中利用改进粒子群算法(PSO)实现无人机三维路径规划的方法,并将其与遗传算法(GA)、标准粒子群算法等传统优化算法进行对比分析。研究内容涵盖路径规划的多目标优化、避障策略、航路点约束以及算法收敛性和寻优能力的评估,所有实验均通过Matlab代码实现,提供了完整的仿真验证流程。文章还提到了多种智能优化算法在无人机路径规划中的应用比较,突出了改进PSO在收敛速度和全局寻优方面的优势。; 适合人群:具备一定Matlab编程基础和优化算法知识的研究生、科研人员及从事无人机路径规划、智能优化算法研究的相关技术人员。; 使用场景及目标:①用于无人机在复杂地形或动态环境下的三维路径规划仿真研究;②比较不同智能优化算法(如PSO、GA、蚁群算法、RRT等)在路径规划中的性能差异;③为多目标优化问题提供算法选型和改进思路。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注算法的参数设置、适应度函数设计及路径约束处理方式,同时可参考文中提到的多种算法对比思路,拓展到其他智能优化算法的研究与改进中。
### MySQL 机制详解 MySQL 中的机制是为了保障数据库在高并发环境下的数据一致性和稳定性而设计的重要功能之一。以下是关于 MySQL 机制的具体解析: #### 1. 的分类 MySQL 主要分为两种类型的:表级和行级。 - **表级 (Table-Level Lock)** 表级是最简单的定策略,适用于 MyISAM 存储引擎。它会在整个表上施加,无论是读操作还是写操作都会影响到整张表。对于 `SELECT` 操作,MyISAM 会自动给涉及的所有表加上读;而对于 `UPDATE`, `INSERT`, 和 `DELETE` 则会自动加上写[^3]。 - **行级 (Row-Level Lock)** 行级由 InnoDB 存储引擎实现,提供更高的并发能力。只有涉及到具体记录的操作才会触发行级。例如,在执行 `SELECT ... FOR UPDATE` 或者 `SELECT ... LOCK IN SHARE MODE` 时,InnoDB 只会对符合条件的特定行加而不是封整个表[^2]。 #### 2. 不同存储引擎的特性 不同的存储引擎有不同的行为: - **MyISAM**: 默认使用的是表级别的,这意味着即使是一个小范围内的更新也会阻塞其他线程对该表任何部分的访问[^3]。 - **InnoDB**: 支持事务以及更细粒度的行级,这使得它可以更好地处理复杂的多用户场景下的并发请求[^4]。 #### 3. 常见类型及其作用 除了基本的表级与行级区分外,还有几种具体的形式用于满足不同需求: - **共享 (Shared Lock, S-Lock)** 当一个客户端通过命令如 `LOCK TABLES table_name READ` 获取了一个表上的共享之后,其它客户也可以获得该表上的共享,但不能再获取排他直到当前持有共享的所有连接释放它们为止[^2]。 - **排他 (Exclusive Lock, X-Lock)** 排他允许独占式的修改权限。如果某个事务已经获得了某条记录或者某些列上的排他,则在此期间不允许别的事务再对此同一组资源申请任何形式的新——既包括另外的排他也包括新的共享[^2]。 - **GAP ** 这种特殊的用来阻止新纪录插入到现有两条连续记录之间的空隙(gap)里去。比如当我们运行下面这条SQL语句的时候就会用到gap lock:`SELECT * FROM table_name WHERE id > 10 FOR UPDATE;` - **Next-Key Lock** 是一种组合了索引记录本身(record)和其前面那个区间(gap)两者一起保护起来的一种复合型模式。主要用于解决可重复读(repeatable read)隔离级别下可能出现的幻影问题(phantom problem)[^4]。 #### 4. 死现象及预防措施 死是指两个或更多事务相互等待对方持有的资源从而进入僵局的状态。为避免这种情况发生可以采取以下方法: - 尽量按照固定的顺序访问资源; - 减少单次事务持续时间; - 设置合理的超时参数让系统能够及时发现并终止潜在的死循环状况等等[^4]。 ```sql -- 示例:如何手动解表 UNLOCK TABLES; ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值