一、 Mysql架构和历史
MySQL基础知识
20210106 22:40-24:00阅读整理
【照世明灯】诗号:
难定纷纷甲子年,千魔荡荡白阳天,苍天旨意著书命,诸子虔诚扶道颠;
佛灯点亮华光现,一线生机救末年。
- 高级特性:最重要、最特殊的特性是它的存储引擎架构,这种架构的设计将查询处理以及其他系统任务和数据的存储/提取相分离
- 读写锁:在处理并发读/写时,可以通过实现一个由两种类型的锁组成的锁系统来解决问题。这两种类型的锁通常被称为共享锁和排他锁,也叫读锁和写锁;读锁共享,写锁排他
- 锁粒度:一种提高共享资源并发性的方式就是让锁的对象更有选择性。尽量只锁定需要修改的部分数据,而不是所有的资源。 所谓锁的策略,就是在锁的开销和数据安全性之间寻求平衡,这种平衡当然也会消耗性能
- 表锁:是MySQL中最基本的锁策略,并且是开销最小的策略;它会锁定整张表。一个用户在对表进行写操前,需要先获得写锁,这会阻塞其它对该表的读写操作。只是没有写锁时,其它读取的用户才能获得读锁
- 行级锁:行级锁可以最大程度的支持并发处理,但是,行级锁只在存储引擎(InnoDB,XtraDB等引擎)中实现,而MySQL服务层中并没有实现;
- 事务:事务就是一组原子性的sql语句,或者说一个独立的工作单元;也就是说事务内的语句,要么全部执行成功,要么全部执行失败
- 事务处理系统的标准特性:
- 原子性(Atomicity):一个事务必须是一个不可在分割的最小单元
- 一致性(Consistency):数据库总数从一个一致性的状态转换到另一个一致性的状态(这个一致性是说整体上的一致性变化,操作的始末,实际结果和预期是一致的;比如:打款前A账户有200元,B账户有200元,如果A打款200给B,打款成功,预期A账户0元,B账户400元,实际结果与预期保持整体上的一致性状态;打款失败,那就是AB账户各200元,保持原有的一致性状态)
- 隔离性(Isolation):通常来讲,一个事务在进行最终的事务提交执行之前,对其他事务是不可见的
- 持久性(Durability):一旦事务提交,则其所做的修改都会永久的保存到数据库当中,
- 隔离级别:
- 读未提交(READ-UNCOMMITTED):事务中的修改,即使没有提交,对其他事务也是可见的;事务可以读取未提交的数据,这也就是脏读
- 读已提交(READ-COMMITTED):大多数数据库默认的隔离级别。一个事务开始时,只能看见已经提交的事务的修改;换句话说,就是一个事务在提交之前,所做的修改对于其他事务是不可见的,通常也叫做不可重复读,因为两次查询的结果可能不一样
- 重复读(REPEATABLE-READ):这个是MySQL的隔离级别。该级别保了在同一个事务中多次读取的数据是一致的。但是在理论上,重复读还不能解决另一个问题,就是在读的过程中被人添加了一条数据,这可能会造成幻读(也就是多出行);;InnoDB和XtraDB存储引擎通过多版本并发控制(MVCC - Mutiversion Concurrency Control)解决了幻读的问题
- 可串行化(SERIALIZABLE):最高隔离级别。强制事务串行执行,避免了前面所说的幻读的问题;简单来讲,就是会在读取的每一行上都加锁,所以可能导致大量的超时和锁争抢问题