首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL数据库锁机制

页锁,table locks表级,版本控制 image.png 二、锁执行流程 计算语句使用到的所有表 在每个表:打开open表—从table cache缓存里得到TABLE对象,并在此表加上...InnoDB支持多粒度锁定,这种锁定允许在行级上的锁和表级上的锁同时存在。因此InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表级锁。...用于解决表级锁和行级锁之间的冲突    意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。   ...因为Query执行过程中通过范围查找的话,他会锁定整个范围内所有的索引键值,即使这个键值并不存在。...间隙锁有一个比较致命的弱点,就是当锁定一个范围键值之后,即使某些不存在的键值也会被无辜的锁定,而造成在锁定的时候无法插入锁定值范围内的任何数据,在某些场景下这可能会针对性造成很大的危害。

2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL的间隙锁

    0x02:间隙锁引起的问题 因为执行SELECT语句中,如果通过范围查找的话,间隙锁会锁定整个范围内所有的索引键值,即使这个键值并不存在。...这个就是间隙锁最致命的缺点,就是当锁定一个范围键值之后,即使某些不存在的键值也会被无辜的锁定,而造成在锁定的时候无法插入锁定值范围内的任何数据,在某些场景下这可能会针对性造成很大的危害。...0x03:间隙锁例子 建表: CREATE TABLE `gas_lock_tab` ( `id` bigint(20) NOT NULL COMMENT 'id' , `user_name_py`...打开两个Mysql终端,分别设置autocommit为0(手动提交事务),也就是关闭自动提交功能,事务隔离级别处于可重复读状态。...这时对session 1做commit操作,发现update和inster操作都生效了。 ?

    83510

    MYSQL ERROR CODE 错误编号的意义

    ,SQL语句为空 1081:不能建立Socket连接 1114:数据表已满,不能容纳任何记录 1116:打开的数据表太多 1129:数据库出现异常,请重启数据库 1130:连接数据库失败,没有连接数据库的权限...1133:数据库用户不存在 1141:当前用户无权访问数据库 1142:当前用户无权访问数据表 1143:当前用户无权访问数据表中的字段 1146:数据表不存在 1147:未定义用户对数据表的访问权限...错误:1345 SQLSTATE: HY000 (ER_VIEW_NO_EXPLAIN) 消息:EXPLAIN/SHOW无法发出,缺少对基本表的权限。...错误:1404 SQLSTATE: HY000 (ER_PROC_AUTO_GRANT_FAIL) 消息:无法授予EXECUTE和ALTER ROUTINE权限。...错误:1428 SQLSTATE: HY000 (ER_WRONG_LOCK_OF_SYSTEM_TABLE) 消息:不能将系统’%s.%s’表的写锁定与其他表结合起来。

    2.9K20

    SQL命令 DELETE(一)

    如果用户是表的所有者(创建者),则会自动授予该用户对该表的删除权限。否则,必须授予用户对该表的删除权限。否则将导致SQLCODE-99错误,因为%msg用户‘name’没有该操作的特权。...可以通过调用%CHECKPRIV命令来确定当前用户是否具有删除权限。可以使用GRANT命令将删除权限分配给指定表。 表不能被另一个进程以独占模式锁定。...尝试从锁定表中删除行将导致SQLCODE-110错误,错误代码为%msg,如下所示:无法获取用于删除行ID为‘10’的行的表‘Sample.Person’的锁。...请注意,只有当DELETE语句找到第一条要删除的记录,然后无法在超时期限内锁定它时,才会出现SQLCODE-110错误。...默认情况下,如果无法删除一行或多行,则删除操作将失败,并且不会删除任何行。如果要删除的行已被另一个并发进程锁定,则DELETE会发出SQLCODE-110错误。

    2.7K20

    Windows错误码大全error code

    1006 某文件的卷已在外部改变,因而打开的文件不再有效。 1007 要求的操作无法以全屏幕模式执行。 1008 试图引用并不存在的符号。 1009 配置注册表数据库已损坏。...1010 配置注册表主键无效。 1011 无法打开配置注册表主键。 1012 无法读取配置注册表主键。 1013 无法写入配置注册表主键。...1124 软盘控制器报告软盘驱动程序不能识别的错误。 1125 软盘控制器返回的结果和注册的不一致。 1126 访问硬盘时,再校准操作失败,再试一次后也无法操作。...1312 指定的登录会话不存在。该会话可能已终止。 1313 指定的权限不存在。 1314 客户不保留请求的权限。 1315 提供的名称不是正确的帐户名称格式。...1770 RPC 服务器产生了浮点下溢错误。 1771 RPC 服务器产生了浮点上溢错误。 1772 可用于自动句柄绑定的 RPC 服务器列表已经用完。 1773 无法打开字符转换表文件。

    10.2K10

    复杂一点的SQL语句

    SQL> truncate table st1; truncate table st1 * 第 1 行出现错误: ORA-00942: 表或视图不存在 alter:增加删除修改字段...,indexname to public; public:对所有用户开放权限 GROUP groupname:对该组所有用户开放权限 username:对指定用户开放权限 给用户授权,connect权限和...不给新建用户授予connect权限,新建用户无法通过SID或SERVICE_NAME连接数据库实例。 不给新建用户授予resource权限,新建用户无法创建表。...dba_roles_privs where grantee=uper('liuyifei') * 第 1 行出现错误: ORA-00942: 表或视图不存在 SQL>...的区别 truncate会收回表空间,delete不会收回表空间 附录2: sys用户和system用户的区别: SYS用户,缺省始终创建,且未被锁定,拥有数据字典及其关联的所有对象 SYSTEM用户,

    71420

    Oracle 错误总结及问题解决 ORA「建议收藏」

    之间 ORA-00069: 无法获得锁定 — 禁用了表锁定 ORA-00070: 命令无效 ORA-00071: 进程号必须介于 1 和 之间 ORA-00072: 进程“”不活动 ORA-00073:...ORA-00601: 清除锁定冲突 ORA-00602: 内部编程异常错误 ORA-00603: ORACLE 服务器会话因致命错误而终止 ORA-00604: 递归 SQL 层 出现错误(error...-01041: 内部错误,hostdef 扩展名不存在 说明:SQLPLUS修改了做了操作后,启动数据库报此错误,关闭SQLPLUS,重新打开一个就行 ORA-01042: 不允许使用打开游标分离会话...现在不允许打开, 关闭, 安装和拆卸 ORA-01155: 正在打开, 关闭, 安装或拆卸数据库 ORA-01156: 进行中的恢复可能需要访问文件 ORA-01157: 无法标识/锁定数据文件 –...ANY OUTLINE 权限 ORA-18007: 此操作需要 ALTER ANY OUTLINE 权限 ORA-18008: 无法找到 OUTLN 方案 ORA-18009: 一个或多个大纲系统表不存在

    22.8K20

    GetLastError错误代码

    〖32〗-进程无法访问文件,因为另一个程序正在使用此文件。   〖33〗-进程无法访问文件,因为另一个程序已锁定文件的一部分。   〖36〗-用来共享的打开文件过多。   ...〖108〗-磁盘在使用中,或被另一个进程锁定。   〖109〗-管道已结束。   〖110〗-系统无法打开指定的设备或文件。   〖111〗-文件名太长。   ...〖157〗-段已被放弃且无法锁定。   〖158〗-段已解除锁定。   〖159〗-线程标识的地址错误。   〖160〗-传递到 DosExecPgm 的参数字符串错误。   ...〖1006〗-文件所在的卷已被外部改变,因此打开的文件不再有效。   〖1007〗-无法在全屏幕模式下运行请求的操作。   〖1008〗-试图引用不存在的令牌。   ...〖1009〗-配置注册表数据库损坏。   〖1010〗-配置注册表项无效。   〖1011〗-无法打开配置注册表项。   〖1012〗-无法读取配置注册表项。

    6.4K10

    40+个对初学者非常有用的PHP技巧(二)

    当你工作于Linux时,权限是必须要处理的,并且会有很多很多的权限问题时,当目录不可写,文件无法读取等的时候。 请确保你的应用程序尽可能智能化,并在最短的时间内报告最重要的信息。 ? 这完全正确。...file_put_contents可能会因为一些原因而失败: 父目录不存在 目录存在,但不可写 锁定文件用于写入? 因此,在写入文件之前最好能够一切都弄明确。 ?...否则,例如,文件是由“php”用户创建的,而你作为一个不同的用户,系统就不会让你访问或打开文件,然后你必须努力获得root权限,更改文件权限等等。 ? 15.不要检查提交按钮值来检查表单提交 ?...常见错误是创建副本,然后耗尽内存,并得到内存溢出的致命错误: ? 当导入csv文件或导出表到csv文件时,上面这样的代码很常见。 像上面这样做可能经常会由于内存限制而让脚本崩溃。...从一开始就打开连接,使用至结束,并在结束时关闭它。不要像这样在函数内打开连接: ? 有多个连接也不好,会因为每个连接都需要时间来创建和使用更多的内存,而导致执行减缓。 在特殊情况下。

    1.1K10

    SQL命令 DROP TABLE

    尝试删除不存在的表会生成SQLCODE-30错误。 表定义必须是可修改的。如果投影表的类没有定义[DdlAllowed],则尝试删除该表会生成SQLCODE-300错误。...该表不能被另一个并发进程锁定。如果表被锁定,DROP TABLE将无限期等待锁被释放。如果可能出现锁争用,那么在发出DROP TABLE之前以独占模式锁定表是很重要的。...如果拥有适当的授予权限,则可以使用GRANT命令分配%DROP_TABLE权限。 即使DROP TABLE操作同时删除了表和表数据,用户也不必具有指定表的DELETE OBJECT权限。...默认情况下,如果尝试删除不存在的表,DROP TABLE会发出SQLCODE-30错误。这是推荐的设置。...如果此选项设置为1(“是”),则不存在的表的DROP TABLE不执行任何操作,也不会发出错误消息。

    1.3K60

    mysql免安装版配置和一些常见问题

    [mysqld] 下均添加一行: default-character-set = utf8 修改之后的文件内容如下图所示 4、安装 开始---搜索栏中输入cmd----enter,用管理员权限打开系统命令窗口...执行下面的命令: mysqld --install 以上命令回车后正常的结果是:Servicesuccessfully installed 6、再输入下面的命令: mysqld --console 以上命令会导致命令等待...根据MySQL开发网站的官方解释,External-locking用于多进程条件下为MyISAM数据表进行锁定 如果你有多台服务器使用同一个数据库目录(不建议),那么每台服务器都必须开启external...locking; 参数解释 当外部锁定(external-locking)起作用时,每个进程若要访问数据表,则必须等待之前的进程完成操作并解除锁定。...mysql 在Windows2003安装,系统无法执行指定程序 问题出现: 后来各种百度谷歌。。。然后学会看系统日志了,计算机管理-事件查看器-系统。。。

    1.2K10

    mysql锁机制总结,以及优化建议

    一、锁概述和分类 ? 二、表锁 偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。...其他session_2可以查询或者更新未锁定的表 当前session_1中插入或者更新锁定的表都会提示错误: 其他session_2插入或者更新锁定表会一直等待获得锁:(阻塞) 释放锁。...总结: 可以通过show open tables来查看哪些表被枷锁了; 如何分析表锁定,可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定...【危害】 因为Query执行过程中通过过范围查找的话,他会锁定整个范围内所有的索引键值,即使这个键值并不存在。...间隙锁有一个比较致命的弱点,就是当锁定一个范围键值之后,即使某些不存在的键值也会被无辜的锁定,而造成在锁定的时候无法插入锁定键值范围内的任何数据。在某些场景下这可能会对性能造成很大的危害。

    66940

    Windows事件ID大全

    33 另一个程序已锁定文件的一部分,进程无法访问。 36 用来共享的打开文件过多。 38 已到文件结尾。 39 磁盘已满。 50 不支持请求。 51 Windows 无法找到网络路径。...1006 文件所在的卷已被外部改变,因此打开的文件不再有效。 1007 无法在全屏幕模式下运行请求的操作。 1008 试图引用不存在的令牌。 1009 配置注册表数据库损坏。...1011 无法打开配置注册表项。 1012 无法读取配置注册表项。 1013 无法写入配置注册表项。 1014 注册表数据库中的某一文件必须使用记录或替代复制来恢复。恢复成功完成。...1054 无法创建此服务的线程。 1055 服务数据库已锁定。 1056 服务的范例已在运行中。 1057 帐户名无效或不存在,或者密码对于指定的帐户名无效。...1063 服务进程无法连接到服务控制器上。 1064 当处理控制请求时,在服务中发生异常。 1065 指定的数据库不存在。 1066 服务已返回特定的服务错误码。 1067 进程意外终止。

    18.3K62

    五分钟了解Mysql的行级锁——《深究Mysql锁》「建议收藏」

    ,而在锁定机制的实现过程中为了让行级锁定和表级锁定共存,InnoDB也同样使用了**意向锁(表级锁定)**的概念,也就有了意向共享锁和意向排他锁这两种。   ...Innodb的这种锁定实现方式被称为间隙锁,因为Query执行过程中通过范围查找的话,它会锁定整个范围内所有的索引键值,即使这个键值并不存在。   ...间隙锁的缺点 间隙锁有一个比较致命的弱点,就是当锁定一个范围键值之后,即使某些不存在的键值也会被无辜的锁定,而造成在锁定的时候无法插入锁定键值范围内的任何数据。...在某些场景下这可能会对性能造成很大的危害 当Query无法利用索引的时候, Innodb会放弃使用行级别锁定而改用表级别的锁定,造成并发性能的降低; 当Quuery使用的索引并不包含所有过滤条件的时候,...(1)要想合理利用InnoDB的行级锁定,做到扬长避短,我们必须做好以下工作:   a)尽可能让所有的数据检索都通过索引来完成,从而避免InnoDB因为无法通过索引键加锁而升级为表级锁定;   b)

    1.4K11

    mysql锁机制总结,以及优化建议

    一、锁概述和分类 二、表锁 偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。...总结: 可以通过 show open tables 来查看哪些表被枷锁了; 如何分析表锁定,可以通过检查 table_locks_waited 和 table_locks_immediate 状态变量来分析系统上的表锁定...【危害】 因为Query执行过程中通过过范围查找的话,他会锁定整个范围内所有的索引键值,即使这个键值并不存在。...间隙锁有一个比较致命的弱点,就是当锁定一个范围键值之后,即使某些不存在的键值也会被无辜的锁定,而造成在锁定的时候无法插入锁定键值范围内的任何数据。在某些场景下这可能会对性能造成很大的危害。...四、优化建议 尽可能让所有数据检索都通过索引来完成,避免无索引行锁升级为表锁 ; 尽可能较少检索条件,避免间隙锁 ; 尽量控制事务大小,减少锁定资源量和时间长度; 锁住某行后,尽量不要去调别的行或表,赶紧处理被锁住的行然后释放掉锁

    83120
    领券