innodb锁之间的兼容性判断
2024-10-18 22:31:28
检查锁与锁之间的兼容性
路径:/mysql-5.5.43/storage/innobase/lock/lock0lock.c
实现:见锁的强度比较
row 可理解为 lock 的锁模式
column 可理解为 预加锁的模式
反过来也行
速记:只要包括X字符,跟谁都不兼容
/* LOCK COMPATIBILITY MATRIX
* IS IX S X AI
* IS + + + - +
* IX + + - - +
* S + - + - -
* X - - - - -
* AI + + - - -
*
* Note that for rows, InnoDB only acquires S or X locks.
* For tables, InnoDB normally acquires IS or IX locks.
* S or X table locks are only acquired for LOCK TABLES.
* Auto-increment (AI) locks are needed because of
* statement-level MySQL binlog.
* See also lock_mode_compatible().
*/ /*********************************************************************//**
Calculates if lock mode 1 is compatible with lock mode 2.
@return nonzero if mode1 compatible with mode2 */
UNIV_INLINE
ulint
lock_mode_compatible(
/*=================*/
enum lock_mode mode1, /*!< in: lock mode */
enum lock_mode mode2) /*!< in: lock mode */
{
ut_ad(mode1 == LOCK_X || mode1 == LOCK_S || mode1 == LOCK_IX
|| mode1 == LOCK_IS || mode1 == LOCK_AUTO_INC);
ut_ad(mode2 == LOCK_X || mode2 == LOCK_S || mode2 == LOCK_IX
|| mode2 == LOCK_IS || mode2 == LOCK_AUTO_INC); return((LOCK_MODE_COMPATIBILITY) & LK(mode1, mode2));
}
最新文章
- linux下用c实现ls命令
- swift 命名,字符串
- 用php怎么写一个用户注册登录的页面呢?
- this.down和this.up用法
- 【python cookbook】【数据结构与算法】2 从任意长度的可迭代对象中分解元素
- 数往知来C#面向对象〈三〉
- bzoj1832
- QStringLiteral(源代码里有一个通过构造函数产生的从const char*到QString的隐式转换,QStringLiteral字符串可以放在代码的任何地方,编译期直接生成utf16字符串,速度很快,体积变大)
- How to use dt.Rows.Cast<;System.Data.DataRow>;().Take(n)
- 通过批处理 安装 mongodb和设置身份验证
- Atlas框架介绍集成(一)
- Python基础(生成器)
- Java生成全局唯一ID代码演示
- pycharm汉化补丁
- 名字top500字典 各种格式及python脚本
- Linux下查看tomcat版本
- pymysql-python爬虫数据存储准备
- nginx之七:nginx path(root)文件路径配置
- MySQL(介绍,安装,密码操作,权限表)
- Best Cow Line(POJ3617)