MySQL死锁--Innodb行锁
来源:互联网 发布:csgo数据互换器永久 编辑:程序博客网 时间:2024/05/16 15:23
MySQL数据库innodb存储引擎的行锁
InnoDB 支持行锁和表锁,而InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁,会把所有扫描过的行都锁定!在实际应用中,要特别注意InnoDB行锁的这一特性,不然的话,可能导致大量的锁冲突,从而影响并发性能。由于MySQL的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但是如果是使用相同的索引键,是会出现锁冲突的。当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;另外间隙锁也会锁多行,InnoDB除了通过范围条件加锁时使用间隙锁外,如果使用相等条件请求给一个不存在的记录加锁,InnoDB也会使用间隙锁!
表:
CREATE TABLE `USER` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `name` VARCHAR(100) DEFAULT NULL COMMENT '姓名', `age` int(10) NOT NULL DEFAULT COMMENT '年龄', `sex` int(2) DEFAULT NULL COMMENT '性别', PRIMARY KEY (`id`), KEY `idx_sex` (`sex`)) ENGINE=InnoDB AUTO_INCREMENT=150 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用户表';
BEGIN -- 手动开启事物,innodb 默认是自动提交的UPDATE user set name="boke" WHERE id=123
执行如上update锁定的是一行,执行完毕记得commit
BEGIN -- 手动开启事物UPDATE user set name="boke" WHERE name="lili"
执行如上update锁定的是整个表,因为name不是索引!
MySQL数据库的存储引擎
SHOW VARIABLES LIKE '%storage_engine';
InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。注意,同一个数据库也可以使用多种存储引擎的表。如果一个表要求比较高的事务处理,可以选择InnoDB。这个数据库中可以将查询要求比较高的表选择MyISAM存储。如果该数据库需要一个用于查询的临时表,可以选择MEMORY存储引擎。
阅读全文
1 0
- MySQL死锁--Innodb行锁
- mysql innodb 死锁
- Mysql Innodb死锁解决
- mysql的innodb死锁问题
- mysql innodb死锁情况分析
- mysql innodb死锁情况分析
- mysql:innodb锁与死锁
- InnoDB行锁、事务还有死锁
- Mysql Innodb死锁情况分析与归纳
- Mysql Innodb死锁情况分析与归纳
- Mysql Innodb死锁情况分析与归纳
- Mysql-innodb中死锁检测的代码
- Mysql Innodb死锁情况分析与归纳
- 巧用MySQL InnoDB引擎锁机制解决死锁问题
- 巧用MySQL InnoDB引擎锁机制解决死锁问题
- 使用mysql自有的表分析innodb死锁情况
- MYSQL INNODB中GAP LOCK引起死锁的问题
- MySQL Innodb表导致死锁日志情况分析与归纳
- opencv之图像几何变换和放大
- (转)Windows sockets编程指南
- PitchBook:2017年Q3 Uber亏损14.6亿美元
- JavaScript基础(9.左侧菜单实例)
- strlen和sizeof
- MySQL死锁--Innodb行锁
- android面试题总结
- [leetcode]1.Two Sum
- 贝塞尔曲线——cubic-bezier详解
- 2017年全球人工智能研究高校数据解读
- IDC:预计2018年全球物联网(IoT)支出金额7725亿美元
- 使用SSH2,登录后刷新首页,会出现偶数次正常奇数次失败
- Base64、32、16 编码解析
- 探索Oracle之数据库升级二 11.2.0.3升级到11.2.0.4完整步骤--测试成功版本