Mysql的锁机制的简单学习

Mysql的锁机制

在Mysql中,不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。

表级锁: 开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁: 开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。

1.MyISAM表锁

MyISAM默认加的是表锁
MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)表独占写锁(Table Write Lock)。 对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;对 MyISAM表的写操作,则会阻塞其他用户对同一表的读和写操作;MyISAM表的读操作与写操作之间,以及写操作之间是串行(共享读锁(S)之间是兼容的,但共享读锁(S)与排他写锁(X)之间,以及排他写锁(X)之间是互斥的)的!

写锁阻塞读 :当一个线程获得对一个表的写锁之后,只有持有锁的线程可以对表进行更新操作。其他线程的读写操作都会等待,直到锁释放为止。
读锁阻塞写:一个session使用lock table给表加读锁,这个session可以锁定表中的记录,但更新和访问其他表都会提示错误,同时,另一个session可以查询表中的记录,但更新就会出现锁等待。

注意: MyISAM在执行查询语句之前,会自动给涉及的所有表加读锁,在执行更新操作前,会自动给涉及的表加写锁,这个过程并不需要用户干预。

2.InnoDB锁

InnoDB默认加的是行锁

共享锁(s):又称读锁。允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
排他锁(x):又称写锁。允许获取排他锁的事务更新数据,阻止其他事务取得相同的数据集共享读锁和排他写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。

mysql InnoDB引擎默认的修改数据语句:update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,如果加排他锁可以使用select …for update语句,加共享锁可以使用select … lock in share mode语句。所以加过排他锁的数据行在其他事务种是不能修改数据的,也不能通过for update和lock in share mode锁的方式查询数据,但可以直接通过select …from…查询数据,因为普通查询没有任何锁机制。

InnoDB行锁实现方式
​ InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!

1、 在不通过索引条件查询的时候,innodb使用的是表锁而不是行锁。
2、 创建带索引的表进行条件查询,innodb使用的是行锁。
3、 由于mysql的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但是如果是使用相同的索引键,是会出现冲突的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于微信小程序的家政服务预约系统采用PHP语言和微信小程序技术,数据库采用Mysql,运行软件为微信开发者工具。本系统实现了管理员和客户、员工三个角色的功能。管理员的功能为客户管理、员工管理、家政服务管理、服务预约管理、员工风采管理、客户需求管理、接单管理等。客户的功能为查看家政服务进行预约和发布自己的需求以及管理预约信息和接单信息等。员工可以查看预约信息和进行接单。本系统实现了网上预约家政服务的流程化管理,可以帮助工作人员的管理工作和帮助客户查询家政服务的相关信息,改变了客户找家政服务的方式,提高了预约家政服务的效率。 本系统是针对网上预约家政服务开发的工作管理系统,包括到所有的工作内容。可以使网上预约家政服务的工作合理化和流程化。本系统包括手机端设计和电脑端设计,有界面和数据库。本系统的使用角色分为管理员和客户、员工三个身份。管理员可以管理系统里的所有信息。员工可以发布服务信息和查询客户的需求进行接单。客户可以发布需求和预约家政服务以及管理预约信息、接单信息。 本功能可以实现家政服务信息的查询和删除,管理员添加家政服务信息功能填写正确的信息就可以实现家政服务信息的添加,点击家政服务信息管理功能可以看到基于微信小程序的家政服务预约系统里所有家政服务的信息,在添加家政服务信息的界面里需要填写标题信息,当信息填写不正确就会造成家政服务信息添加失败。员工风采信息可以使客户更好的了解员工。员工风采信息管理的流程为,管理员点击员工风采信息管理功能,查看员工风采信息,点击员工风采信息添加功能,输入员工风采信息然后点击提交按钮就可以完成员工风采信息的添加。客户需求信息关系着客户的家政服务预约,管理员可以查询和修改客户需求信息,还可以查看客户需求的添加时间。接单信息属于本系统里的核心数据,管理员可以对接单的信息进行查询。本功能设计的目的可以使家政服务进行及时的安排。管理员可以查询员工信息,可以进行修改删除。 客户可以查看自己的预约和修改自己的资料并发布需求以及管理接单信息等。 在首页里可以看到管理员添加和管理的信息,客户可以在首页里进行家政服务的预约和公司介绍信息的了解。 员工可以查询客户需求进行接单以及管理家政服务信息和留言信息、收藏信息等。
### 回答1: 学习MySQL语句的书籍有很多,以下是几本常见且值得推荐的。 1.《MySQL必知必会》:这本书适合初学者入门,以简单易懂的语言介绍了MySQL的基本概念和语句,包括创建数据库、表格、插入、更新、删除等操作。它结构清晰,示例实用,适合希望迅速掌握MySQL语句的人阅读。 2.《高性能MySQL》:该书深入讲解MySQL的内部机制和性能优化技巧,涵盖了索引、查询优化、存储引擎、锁和事务等重要内容。对于想要深入理解MySQL并提升性能的开发者和管理员来说,这本书是非常有价值的。 3.《MySQL技术内幕:SQL编程》:该书适合对MySQL已有基础的人士,详细介绍了MySQL的内部工作原理和高级编程技巧。它包含了更复杂和高级的SQL语句用法,如子查询、连接、视图、触发器等,帮助读者更深入地理解MySQL的功能和应用。 4.《MySQL性能调优与架构设计》:这本书探讨了MySQL性能调优的方方面面,涉及了硬件选择、数据库架构设计、查询优化和索引优化等。对于需要优化大型MySQL数据库性能的开发者和运维人员来说,这是一本非常实用的指南。 总而言之,选择合适的学习MySQL语句的书籍取决于自己的水平和需求。对于初学者,建议选择简单易懂的入门书籍;而对于已有一定基础的人士,可以选择深入讲解MySQL内部机制和高级编程技巧的书籍。不论选择哪本书,坚持阅读并实践,结合实际项目经验,才能更好地掌握MySQL语句的使用和优化。 ### 回答2: 学习 MySQL 语句的书籍有很多,下面我将介绍几本值得推荐的书籍: 1. 《高性能MySQL》:这本书详细介绍了MySQL的架构、索引、查询优化、性能调优等内容,对于想要深入了解MySQL内部工作原理和提高数据库性能的人来说是一本非常不错的书籍。 2. 《MySQL必知必会》:这是一本适合初学者的MySQL入门书籍,它以简明易懂的方式介绍了MySQL的基本语法、常用命令以及创建和管理数据库的方法,非常适合初学者入门。 3. 《MySQL技术内幕:InnoDB存储引擎》:这本书深入讲解了MySQL的InnoDB存储引擎,包括其架构、并发控制、事务、锁、索引等方面的内容。对于想深入研究InnoDB存储引擎的人来说是一本非常宝贵的书籍。 4. 《MySQL性能调优与架构设计》:这本书主要介绍了MySQL的性能优化和架构设计的相关知识,包括查询优化、索引优化、硬件配置、数据库拆分等内容。对于想要提升MySQL性能和设计高可用架构的人来说是一本非常实用的指南。 以上是几本学习MySQL语句的书籍的推荐,希望对你有所帮助。当然,实践也非常重要,只有不断实践和实际应用,才能真正掌握MySQL语句的应用和技巧。 ### 回答3: 学习MySQL语句的书籍有很多,我将根据自己的经验向你推荐几本比较好的。 1.《高性能MySQL》:这本书是MySQL方面的经典著作,详细介绍了MySQL的内部原理、优化方法和调优技巧,适合有一定数据库基础的读者。 2.《MySQL必知必会》:这是一本面向初学者的入门教材,适合那些没有数据库经验的人。书中内容简洁明了,通俗易懂,详细介绍了MySQL的基本概念、语法和常用操作。 3.《MySQL技术内幕:InnoDB存储引擎》:这本书主要介绍了MySQL的核心存储引擎InnoDB的架构、原理和优化方法。对于想要深入了解MySQL内部工作原理的读者来说是一本很好的选择。 4.《MySQL性能调优与架构设计》:这本书主要介绍了MySQL性能优化的一些常用技巧和方法,包括SQL语句优化、索引优化、数据库架构设计等方面的内容。适合那些想要提升数据库性能的读者。 当然,除了以上几本书籍,还有很多其他的MySQL学习资源,比如官方文档、在线教程、博客等等,可以根据自己的实际情况选择适合自己的学习方式和资源。另外,实际动手实践也非常重要,通过实际项目或者练习来巩固和应用所学的知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值