转载

MyISAM表

1.不支持事务
MyISAM表
MyISAM:对整张表进行加锁,锁全表而不是行。在读数据的时候,所有的表上都可以获得共享锁(读锁),每个连接都不互相干扰。在写的时候,或者排他锁,会把整个表进行加锁,而其他的连接请求(读和写)都处于等待。

MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁。

所以对MyISAM表进行操作,会有以下情况:
a、对MyISAM表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其它进程的写操作。
b、对MyISAM表的写操作(加写锁),会阻塞其他进程对同一表的操作,只有当写锁释放后,才会执行其它进程的读写操作。

2.MyIASM的修复表
[root@MyO test]# echo "a" >> myisam_tab.MYD
mysql> check table myisam_tab;
+-----------------+-------+----------+---------------------------------------------------+
| Table           | Op    | Msg_type | Msg_text                                          |
+-----------------+-------+----------+---------------------------------------------------+
| test.myisam_tab | check | warning  | Size of datafile is: 102       Should be: 100     |
| test.myisam_tab | check | error    | got error: 120 when reading datafile at record: 5 |
| test.myisam_tab | check | error    | Corrupt                                           |
+-----------------+-------+----------+---------------------------------------------------+
3 rows in set (0.01 sec)

mysql> repair table myisam_tab;
+-----------------+--------+----------+----------+
| Table           | Op     | Msg_type | Msg_text |
+-----------------+--------+----------+----------+
| test.myisam_tab | repair | status   | OK       |
+-----------------+--------+----------+----------+
1 row in set (0.01 sec)

mysql> check table myisam_tab;
+-----------------+-------+----------+----------+
| Table           | Op    | Msg_type | Msg_text |
+-----------------+-------+----------+----------+
| test.myisam_tab | check | status   | OK       |
+-----------------+-------+----------+----------+
1 row in set (0.00 sec)

参考:http://www.cnblogs.com/baochuan/archive/2012/03/15/2398276.html
正文到此结束
Loading...