什么是锁?
锁是一种并发控制机制,在多个用户同时访问一个数据时用来保护数据的。
数据库锁分为两种,一种是乐观锁,一种是悲观锁,悲观锁是我们常说的数据库锁机制。
乐观锁一般是指用户自己实现的一种锁机制,假设认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。乐观锁的实现方式一般包括使用版本号和时间戳。
在说悲观锁之前,恶补一下关于数据库的一些知识:
Mysql体系架构:
由连接池组件、管理服务和工具组件、sql接口组件、查询分析器组件、优化器组件、 缓冲组件、插件式存储引擎、物理文件组成。
Mysql 的存储引擎有: InnoDB,MyIsAM
好了,下面可以了解悲观锁是什么了。
悲观锁主要有表锁、行锁、页锁。
在MyISAM中只用到表锁,不会有死锁的问题,锁的开销也很小,但是相应的并发能力很差。innodb实现了行级锁和表锁,锁的粒度变小了,并发能力变强,但是相应的锁的开销变大,很有可能出现死锁。同时inodb需要协调这两种锁,算法也变得复杂。InnoDB行锁是通过给索引上的索引项加锁来实现的,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁。
两者区别就是:

参考链接:
1.Java常见面试题汇总-----------数据库(数据库锁、数据库存储过程)_知行流浪-CSDN博客_数据存储过程面试题
网友评论