博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈谈MySql数据库锁
阅读量:4326 次
发布时间:2019-06-06

本文共 649 字,大约阅读时间需要 2 分钟。

主题:MySql有哪些锁;如何运用这些锁;避免死锁

innodb的锁可分为共享锁、排他锁。亦可分为行锁、表锁、间隙锁。

innodb的行锁是通过给索引的索引项加锁来实现的,包括聚簇索引、唯一索引、普通索引等。而Oracle则不同,是通过给数据块的行加锁来实现。

间隙锁(next key锁),innodb使用范围条件查找,并请求共享或排他锁时,innodb还会给所有在条件内但不存在的记录加间隙锁。使用相等条件查找,也会给不存在的记录加间隙锁。这将影响并发插入

使用表锁:

1)更新表的大部分数据,表比较大。

2)涉及多表,比较复杂,为了避免死锁以及导致的回滚

Set autocommit = 0;lock tables   commit   unlock tables

innodb死锁

由于innodb的锁是逐步获得的,所以可能出现死锁

1)使用了相同的索引键(非唯一、聚簇索引),即使访问不同的record,也会造成锁冲突

2)使用了不同的索引访问相同的record,也会锁阻塞、

3)事务以不同的顺序并发访问record,造成互相锁等待

innodb一般能检测到死锁,并是一个事务释放锁并回滚,另一个事务获得锁,继续完成。涉及外部锁,表锁的情况下,不一定能检测到。这就需要设置innodb_lock_wait_timeout来处理,这个参数还可以避免大量事务等待锁,而浪费计算机资源。

 

转载于:https://www.cnblogs.com/zzq417/p/database_lock.html

你可能感兴趣的文章
求一个数的整数次方
查看>>
点云PCL中小细节
查看>>
铁路信号基础
查看>>
Django 学习笔记(五) --- Ajax 传输数据
查看>>
Spring boot 日志 Logback
查看>>
基于OWIN WebAPI 使用OAUTH2授权服务【授权码模式(Authorization Code)】
查看>>
[深入Maven源代码]maven绑定命令行参数到具体插件
查看>>
laravel 分页使用
查看>>
RobotFramework自动化2-自定义关键字
查看>>
centos6.4-x86-64系统更新系统自带Apache Http Server
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
vue项目开发之v-for列表渲染的坑
查看>>