mysql写锁的原理
一、锁的概念
锁是计算机协调多个进程或线程并发访问某一资源的机制。
二、MySQL中的锁
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
三、MyISAM的写锁
1.lock table testmysam WRITE
在同一个session中
insert testmysam value(3);
delete from testmysam where id = 3
select * from testmysam
2.对不同的表操作(报错)
select s.* from testmysam s
insert into testdemo value(2,'2','3');
3.在其他session中 (等待)
select * from testmysam
mysql锁表产生原因
在mysql中,锁表的原因是一个程序执行了对表的insert、update或者delete操作还未commite时,另一个程序也对同一个表进行相同的操作,则此时会发生资源正忙的异常,也就是锁表
mysql锁的是行记录还是索引
MySQL锁可以锁定行记录和索引。行记录锁用于锁定特定数据行,以防止其他事务对其进行修改或删除。索引锁则用于锁定索引,以防止其他事务对其进行修改或删除。行记录锁和索引锁在不同的情况下起到不同的作用,但它们都是用来确保数据完整性和并发性的重要工具。通过灵活使用行记录锁和索引锁,可以有效地控制并发访问和保护数据的一致性。
mysql锁表严重
导致锁表的原因
1、锁表发生在insert update 、delete 中;
2、锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回滚 或者退出数据库用户;
3、A程序执行了对 tableA 的 insert ,并还未 commite时,B程序也对tableA 进行insert 则此时会发生资源正忙的异常 就是锁表;
4、锁表常发生于并发而不是并行(并行时,一个线程操作数据库时,另一个线程是不能操作数据库的,cpu 和i/o 分配原则)。
锁表严重可以通过以下方式解决:
1、通过重启MYSQL,尝试解决锁表;
2、通过“show processlist;”命令查看表情况;State状态为Locked即被其他查询锁住的表以解决锁表
3、通过“KILL10866;”命令kill掉锁表的进程ID,从而达到解锁的目的。命令如下:KILL 10866;//后面的数字即时进程的ID
mysql如何保证一致性
MySQL通过实现ACID(原子性、一致性、隔离性、持久性)的特性来保证数据的一致性。
原子性保证每个事务都是一个不可分割的操作,要么全部成功,要么全部失败,从而避免了部分操作成功导致数据不一致的情况。
隔离性保证每个事务之间是相互独立的,互不干扰,避免了并发访问数据时产生的问题。
持久性保证事务提交后,数据会被持久化到磁盘中,不会因为系统故障而丢失。这些特性的实现可以保证MySQL数据的一致性。

