mysql加锁处理分析_一种存储引擎

mysql加锁处理分析_一种存储引擎存储引擎: 早期的时候,存在如何选择MyISAM和Innodb? 现在,Innodb不断地发展完善,成为了主流的存储引擎。 因此5.5之后的mysql,无脑选择Innodb即可。 MYSQL中的数据,

MySQL优化(2):存储引擎和锁

存储引擎:

早期的时候,存在如何选择MyISAM和Innodb?

现在,Innodb不断地发展完善,成为了主流的存储引擎。

因此5.5之后的mysql,无脑选择Innodb即可。

 

MYSQL中的数据,索引以及其他的对象,是如何存储的,是一套文件系统的实现。

MYSQL支持很多的存储引擎,使用

SHOW ENGINES

代码100分

即可查到全部的引擎

 

MyISAM和Innodb的比较:

1.存储文件的角度:MyISAM数据和索引分别存储,数据是.myd,索引是.myi;Innodb数据和索引集中存储为.ibd,不支持文件级别的移动

2.记录存储顺序的角度:MyISAM顺序存储,直接在表末尾插入记录;Innodb主键顺序存储,插入时需要排序操作,稍影响了效率

3.空间碎片的角度:MyISAM会产生;Innodb不会产生;空间碎片就删除了以前的记录,MyISAM将会空余下来一些空间

通俗来讲,就说原来存储文件100K,我删除了一部分记录后还是100K

优化MyISAM的空间碎片:

代码100分OPTIMIZE TABLE XXX;

4.外键和事务的角度:MyISAM不支持;Innodb支持,保证数据的完整性

5.全文索引的角度:MyISAM不支持;Innodb新版本支持,但是不支持中文,所以很鸡肋

6.锁的角度:MyISAM表级锁定;Innodb行级锁定,表级锁定,处理并发能力更强

 

总结:没有特殊需求,采用Innodb,数据基本都是读写的情况下,可以考虑采用MyISAM

 

锁:

避免资源争用的机制功能,多个任务同时使用一个资源,对该资源产生争用 

数据库中,多个任务对数据库进行CRUD操作就是资源争用

 

通俗解释原理:在某个任务使用资源的时候,标识出来,其他任务就不能同时操作,需要等待或者放弃

基本流程:先尝试加锁,如果锁定成功,那么使用该资源,使用完毕后释放;如果失败,进入操作队列,等待锁释放

 

锁的类型:

共享锁(读锁),排他锁(写锁)

不同类型的锁,导致并发操作是不一样的

 

读锁:共享读操作,阻塞写操作,不能执行写操作

写锁:写操作执行的时候独占资源,自己可读可写,其他任务不能读也不能写

MySQL执行任何SQL时,都会自动增加锁定,常规操作的情况下,不需要手动管理锁

 

这里的锁和上文存储引擎的行锁表锁不一样,是锁具体的实现方式

表级锁:操作会锁定整张表,无论是共享锁还是独占锁

行级锁:操作会锁定操作的记录

 

锁的语法:

表锁:READ是共享锁读锁,WRITE是独占锁写锁

LOCK TABLES [table-name] READ|WRITE;
UNLOCK TABLES;

行锁:第一个是共享锁,第二个是独占锁

代码100分SELECT * FROM TABLE [table-name] LOCK IN SHARE MODE;
SELECT * FROM TABLE [table-name] FOR UPDATE;

行锁独占锁只锁定了表的该行,其他任务可以读,不能更新锁定的行,行锁不是精确到某一行,而是一个间隙锁

这时候插入锁定的行的条件的记录也会失败(比如锁定ID小于20的行,插入ID18,也是锁定的)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9604.html

(0)
上一篇 2023-02-04
下一篇 2023-02-04

相关推荐

  • 字节跳动 data数据平台_clickhouse github

    字节跳动 data数据平台_clickhouse github更多技术交流、求职机会、试用福利,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 ClickHouse 作为目前业内主流的列式存储数据库(DBMS)之一,拥有着同类型 DBMS 难以企及

    2023-05-24
    148
  • oracle删除超过一千条数据_oracle批量删除表数据

    oracle删除超过一千条数据_oracle批量删除表数据公司内做的项目是工厂内的,一般工厂内数据要求的是实时性,很久之前的数据可以自行删除处理,我们数据库用的oracle,所以就想着写一个脚本来删除,这样的话,脚本不管放在那里使用都可以达到效果 由于服务器

    2023-05-07
    177
  • 在命令提示符中运行Python .py文件的方法

    在命令提示符中运行Python .py文件的方法Python是一种高级编程语言,经常用于开发Web应用、数据分析、人工智能等领域。在使用Python编写代码时,我们可以使用命令提示符或终端窗口来执行 Python脚本。本文将介绍命令提示符下运行Python .py文件的方法以及相关知识。

    2023-12-06
    119
  • 计算 存储 分离_一文读懂什么是IND

    计算 存储 分离_一文读懂什么是IND摘要:IDC认为,目前阶段来看,企业亟待解决的是数字化能力提升,包括:与业务的深入结合能力;数据处理和挖掘能力;以及IT技术运营和管理能力。特别是数据处理和挖掘能力,因为数字化转型推进企业从以流程为…

    2023-04-04
    146
  • Python字典:简单高效的数据存储与查询

    Python字典:简单高效的数据存储与查询Python中的字典是一种无序的可变集合,其中的元素以键值对的形式存储。在字典中,键和值都可以是任意的Python对象。字典的键必须是不可变对象(如字符串、数字或元组),值可以是任何对象。Python中的字典类似于Java中的Map、C++中的std::map等数据结构。

    2024-02-21
    107
  • 用Python编写iOS更改IP地址的应用程序

    用Python编写iOS更改IP地址的应用程序在iOS设备上更改IP地址是一个常见需求,例如在公司或学校使用Wi-Fi时需要更改IP地址。本文将详细介绍如何使用Python编写一个iOS应用程序,帮助用户更方便地更改IP地址。

    2024-08-17
    31
  • Python版本查询

    Python版本查询Python是一种广泛用于计算机编程的高级语言。Python有多个版本,每个版本都有其独特的特点。Python版本查询可以帮助人们更好地了解Python的版本和它们之间的差异。

    2024-08-15
    31
  • PostgreSQL 12.2 公开课及视频及PGCE认证(第6期)(CUUG)(2020年)「终于解决」

    PostgreSQL 12.2 公开课及视频及PGCE认证(第6期)(CUUG)(2020年)「终于解决」六:PostgreSQL 12.2企业级应用公开课(6):可见性验证 1、Transaction ids Structure 2、Tuples Structure 3、dml操作PG操作原理 4、T…

    2023-02-27
    148

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注