MYISAM存储引擎只支持表锁,并且不支持事物。
MySQL的表级锁有两种模式:表共享读锁(table read lock)和表独占写锁(table write lock)。
注意:只有读锁和读锁是兼容的,其他的组合都不兼容,需要等待(这里有个特例,当满足并发插入条件时,INSERT和SELECT操作是可以并行执行的)。
MySQL的表级锁有两种模式:表共享读锁(table read lock)和表独占写锁(table write lock)。
注意:只有读锁和读锁是兼容的,其他的组合都不兼容,需要等待(这里有个特例,当满足并发插入条件时,INSERT和SELECT操作是可以并行执行的)。
对MyISAM表的读操作,不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写请求;对 MyISAM表的写操作,则会阻塞其他用户对同一表的读
和写操作;MyISAM表的读操作与写操作之间,以及写操作之间是串行的!根据如表20-2所示的 例子可以知道,当一个线程获得对一个表的写锁后,只
有持有锁的线程可以对表进行更新操作。其他线程的读、写操作都会等待,直到锁被释放为止。
实验一、MYISAM写阻塞读的例子 session1 session2
--创建表
mysql> create table film_text(file_id int,
-> title varchar(20),primary key(file_id)
-> )engine=myisam;
Query OK, 0 rows affected (0.04 sec)
mysql> insert into film_text values(1001,'update test');
Query OK, 1 row affected (0.00 sec)
--获得file_text表的write锁
mysql> lock table film_text write;
Query OK, 0 rows affected (0.00 sec)
--当前的会话对表的查询、更新、插入操作都可以执行
mysql> select * from film_text where file_id=1001;
+---------+-------------+
| file_id | title |
+---------+-------------+
| 1001 | update test |
+---------+-------------+
1 row in set (0.00 sec)
--session2对锁定表的查询被阻塞,需要等待锁被释放(以便获得表级读锁)
mysql> select * from film_text where file_id=1001;
mysql> insert into film_text values(1003,'test');
Query OK, 1 row affected (0.00 sec)
mysql> update film_text set title='test' where file_id=1001;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
--释放锁
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
--session2获得读锁,查询返回
+---------+-------+
| file_id | title |
+---------+-------+
| 1001 | test |
+---------+-------+
1 row in set (1 min 25.25 sec)
说明:MYISAM在执行查询语句(select)前,会自动给设计的所有表加读锁,在执行更新操作(update、delete、insert等)前,会自动给设计的表
加写锁,这个过程 并不需要用户手动干预,因此,用户一般不需要直接用lock table命令给myisam表显示加锁。例子中,显示加锁是为了方便说明问
题,并非必须如此。
实验二、MYISAM存储引擎读阻塞写的例子
session1 session2
--获得film_text的READ锁
mysql> lock table film_text read;
Query OK, 0 rows affected (0.00 sec)
--session1可以查询该表的记录
mysql> select * from film_text where file_id=1001;
+---------+-------+
| file_id | title |
+---------+-------+
| 1001 | test |
+---------+-