数据库的行级锁与表锁

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 表锁无死锁,但并发低,读写互斥;行锁基于索引,支持高并发,但可能死锁。若SQL未走索引,行锁失效转为表锁。行锁适用于避免不可重复读,事务中增删改自动加排他锁,且不可锁定同一索引。

表锁:
不会出现死锁,发生锁的冲突几率高,并发性低。 存储引擎在进行SQL数据读写请求前,会对涉及到的表进行加锁。 其中锁分为共享读锁和独占写锁:读锁会阻塞写,写锁会阻塞读和写。
行级锁:
会出现死锁,发生锁的冲突几率低,并发性高。 InnoDB引擎支持行锁,与Oracle不同,MySQL的行锁是通过索引加载的,也就是说,行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁,此时其它事务无法对当前表进行更新或插入操作。
行级锁注意事项:
行级锁必须有索引才能实现,否则会自动锁全表,那就不是行锁了。 两个事务不能锁同一个索引。 insert,delete,update在事务中都会自动默认加上排它锁。
行锁的适用场景:
避免不可重复读的场景。

相关文章
|
2月前
|
缓存 搜索推荐 关系型数据库
MySQL可以从哪些方面做到性能优化
合理创建索引,避免SELECT *,按需查询字段。采用垂直与水平分表减轻数据库压力,垂直分割列,水平分割行。选用合适搜索引擎,实现主从同步与读写分离,结合缓存机制提升性能,均衡冷热数据分布,优化整体系统负载。
|
Kubernetes 容器
在Kubernetes(k8s)中部署Higress时,查看Wasm插件日志的方法如下
在Kubernetes(k8s)中部署Higress时,查看Wasm插件日志的方法如下
511 1
|
2月前
|
存储 索引
聚簇索引与非聚簇索引(辅助)的区别
聚簇索引按主键排序,叶子节点存储主键值和完整数据行,一张表仅能有一个;非聚簇索引叶子节点存主键或指针,可创建多个,支持覆盖索引且不影响聚簇索引结构。
|
2月前
|
SQL Oracle 关系型数据库
数据库的隔离级别
数据库事务隔离级别包括:读未提交(脏读、不可重复读、幻读)、读提交(避免脏读,但存在后两者,Oracle和SQL Server默认)、可重复读(保证多次读一致,解决不可重复读,MySQL默认)、可串行化(最高级别,串行执行,杜绝所有问题但性能差,极少使用)。
|
2月前
|
存储 数据库
三大范式的特点
数据库设计三大范式:第一范式要求列不可分、无重复;第二范式要求属性完全依赖主键,实现行唯一标识;第三范式要求消除传递依赖,避免非主属性冗余,提升数据一致性与存储效率。(238字)
|
2月前
|
存储 SQL 缓存
数据库执行查询请求的过程
客户端通过TCP连接请求服务端,经连接器验证主机、用户名密码后建立连接。服务端为客户端创建进程交互,并缓存连接以复用。8.0前支持查询结果缓存,后因维护成本高被移除。SQL语句经分析器解析后,由优化器选择最优执行方案,执行器校验权限并调用存储引擎接口获取数据。
|
2月前
|
数据库
事务的四大特性
事务的四大特性:原子性确保操作全成功或全回滚;一致性保证数据完整性;隔离性防止并发干扰;持久性使提交后的更改永久保存,即使系统故障也不丢失。
|
2月前
|
存储 安全 Java
Java HashMap 全面解析:原理、用法与实战要点
本文深入解析Java中HashMap的底层原理与使用实践,涵盖其“数组+链表+红黑树”的结构演变、哈希计算、扩容机制及线程安全问题,详解常用方法、性能优化与最佳实践,助力开发者高效掌握这一核心数据结构。
320 10
|
8月前
|
固态存储 关系型数据库 数据库
从Explain到执行:手把手优化PostgreSQL慢查询的5个关键步骤
本文深入探讨PostgreSQL查询优化的系统性方法,结合15年数据库优化经验,通过真实生产案例剖析慢查询问题。内容涵盖五大关键步骤:解读EXPLAIN计划、识别性能瓶颈、索引优化策略、查询重写与结构调整以及系统级优化配置。文章详细分析了慢查询对资源、硬件成本及业务的影响,并提供从诊断到根治的全流程解决方案。同时,介绍了索引类型选择、分区表设计、物化视图应用等高级技巧,帮助读者构建持续优化机制,显著提升数据库性能。最终总结出优化大师的思维框架,强调数据驱动决策与预防性优化文化,助力优雅设计取代复杂补救,实现数据库性能质的飞跃。
1266 0
|
SQL 关系型数据库 MySQL
(八)MySQL锁机制:高并发场景下该如何保证数据读写的安全性?
锁!这个词汇在编程中出现的次数尤为频繁,几乎主流的编程语言都会具备完善的锁机制,在数据库中也并不例外,为什么呢?这里牵扯到一个关键词:高并发,由于现在的计算机领域几乎都是多核机器,因此再编写单线程的应用自然无法将机器性能发挥到最大,想要让程序的并发性越高,多线程技术自然就呼之欲出,多线程技术一方面能充分压榨CPU资源,另一方面也能提升程序的并发支持性。
1273 3