一、为什么要对数据库加锁?
保证数据库数据的安全(不脏读、漏读)
二、数据库锁的概念理解
1.1、按照锁的类型划分为
1、共享锁(读锁)
共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。
2、排他锁(写锁)
如果一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行共享锁和排他锁
只有获取到排它锁的事务支持对数据行的修改。
1.2、按照锁的范围来划分为
1、行锁
MySQL 5.6 以后Engine db 默认是行锁,当然Engine也支持表锁,mysql InnoDB引擎默认的修改数据语 句,update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,
2、表锁
MySQL 的MyISAM 的默认锁为表锁,当数据库表设置为MyISAM后,操作该数据库都会加表锁,
其中 查询数据会加读锁(共享锁),修改、增加、删除数据会加写锁(排他锁)
四、读锁和写锁的用法
1、如果加排他锁可以使用select ...for update语句,
2、加共享锁可以使用select ... lock in share mode语句。
3、加表锁
//给订单表(orders)加读锁
LOCK tables orders read local;
//读锁释放
Unlock tables;