1. mysql> show status like 'table%';
2. +-----------------------+-------+
3. | Variable_name | Value |
4. +-----------------------+-------+
5. | Table_locks_immediate | 2979 |
6. | Table_locks_waited | 0 |
1. Lock tables orders read local, order_detail read local;
2. Select sum(total) from orders;
3. Select sum(subtotal) from order_detail;
4. Unlock tables;
2.3、并发插入
Myisam也支持查询和插入同时进行的并发操作:存储引擎有一个系统变量concurrent_insert, 专门控制并发插入的行为。值为 0 1 2
concurrent_insert == 0 :不允许并发的插入
concurrent_insert == 1 :(默认值1)如果该表没有空洞(表的中间没有被删除的行),允许边读边插入。
concurrent_insert == 2 :无论有没有空洞都运行在表的末尾插入数据
2.4、锁调度
Myisam的读写操作是互斥的,读写操作是串行的。
如果一个进程请求表的读锁,同时另一个线程请求表的写锁,那么写的进程会先获得锁,就算是读的进程先到锁的等待队列,如果有写进程
那么也是写进程获得锁,因为mysql默认认为写进程比读的进程更加重要。 可以通过一些设置来调节这些级别:
三、InnoDB存储引擎
InnoDB和Myisam最大的不同就是
1、事物支持
2、行级锁
3.1、事物以及其的属性
- 原子性:对数据的修改要么执行,要么全部不执行
- 一致性:事物开始和完成时,数据都应该保持一致的状态,数据结构的完整性都是一致的。
- 隔离性:数据库系统提供一定的隔离机制,保证事物在不收外部并发操作影响的独立环境进行,意味着事物处理过程中是不对外可见的。
- 持久性:事物完成后,对于数据的修改是永久性的,即时出现系统故障会保持
- 读取数据前,对其加上锁。
- 不加任何锁机制,通过一定的机制生成数据请求时间点的一致性数据快照,并用这个快照提供一定级别的(语句, 事物)的一致性读取,从用户的角度来看,好像是数据库可以提供一份数据的多个版本,因此可以叫做数据库的多版本控制(多版本数据库)。
隔离级别
|
读数据一致性
|
脏读
|
不可重复读
|
幻读
|
未提交读
|
最低级别
|
是
|
是
|
是
|
已提交读
| 语句级 |
否
|
是
|
是
|
可重复读
| 事物级 |
否
|
否
|
是
|
可序列化
|
最高级别(事物级)
|
否
|
否
|
否
|