MySQL逻辑架构:安全
连接管理与安全性:架构
MySQL5.5或更高版本版本提供了一个API,支持线程池(Thread-Pooling)插件,能够使用池中的少许线程来服务大量的链接。并发
优化与并行:优化
MySQL会解析查询,并建立解析树,而后对其进行各类优化,包括重写查询,决定表的读取顺序,以及选择合适的索引等。spa
并发控制:插件
1.读写锁:线程
读锁为共享锁,相互不阻塞。写锁为排他锁,持有写锁会阻塞其余读写操做。blog
2.锁粒度:索引
表锁:写操做(增删改)会锁住整张表。事务
行级锁:写操做仅锁住修改的行。
事务:
事务就是一组原子性的SQL操做。
START TRANSACTION;
......
COMMIT;
特性:ACID(原子性、一致性、隔离性、持久性)。
隔离级别:
事务之间的相互可见程度。
READ UNCOMMITTED 脏读、不可重复读、幻读
READ COMMITTED 不可重复读、幻读
REPEATABLE READ 幻读
SERIALIZABLE 加锁读
假设有连个并发的事务A、B
1.A事务修改某行未提交,B事务查询,则脏读。
2.A事务修改某行提交,B事务在A事务前与提交后均查询,两次结果不一样,即不可重复读。
3.A事务新增某行提交,B事务在A事务提交前范围查询,提交后又范围查询,多查出新增行,即幻读。
4.全部事务串行执行,加锁读。
死锁:
事务1
START TRANSACTION;
update stockPrice set close = 45.50 where stock_id=4 and date = '2002-05-01';
update stockPrice set close = 19.80 where stock_id=3 and date = '2002-05-02';
COMMIT;
事务2
START TRANSACTION;
update stockPrice set high= 20.12 where stock_id=3 and date = '2002-05-02';
update stockPrice set high = 47.20 where stock_id=4 and date = '2002-05-01';
COMMIT;
凑巧两条事务都执行了第一行,持有了对方的锁。要执行第二行的时候须要对方释放锁,会形成死锁。
InnoDB存储引擎会检查死锁的循环依赖并返回一个错误,处理方式是将持有最少行级排他锁的事务回滚。
InnoDB存储引擎:
1.支持事务。
2.自动崩溃恢复。
MyISAM存储引擎:
1.不支持事务。
2.不支持自动崩溃恢复
3.能够压缩表(只读),压缩表能够极大减小磁盘空间