MySQL逻辑架构视图:
锁策略:1.表锁:将整个表加锁
2.行级锁:可以支持最大的并发处理(同时也带来最大的锁开销)。行级锁由存储引擎实现,而不是由MySQL服务器实现。
事务是一组原子性的SQL查询语句,可以看作是一个工作单元。如果数据库引擎能够成功对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因无法执行,则所有语句都不会执行。
ACID:原子性、一致性、隔离性、持久性
原子性:一个事务必须被视为一个单独的内部“不可分”的工作单元,以确保整个事务全部被执行或全部回滚。
一致性:数据库总是从一种一致性状态到另一种一致性状态。
隔离性:某个事务的结果只有在完成之后才对其他事务可见。
持久性:一旦一个事务提交,事务所做的数据改变将是永久的。
SQL的四种隔离级:
READ UNCOMMITTED 读取未提交内容(脏读)
READ COMMITTED 读取提交内容
REPEATABLE READ 可重读(可能导致幻读) MySQL默认
SERIALIZABLE 可串行化(在每个读的数据行上加锁)
死锁是指两个或多个事务在同一资源上呼吸那个占用,并请求加锁时,而导致的恶性循环现象。当多个事务以不同顺序试图加锁同一资源时,就会产生死锁。
在一个事务中,如果混合使用事务性表和非事务性表,假如事务处理一切顺利,那么结果页正常。但是,如果事务须回滚,那么在非事务性表上做的修改将无法取消。
InnoDB使用二相锁定协议。一个事务执行过程中的任何时候,都可以获得锁,但只有在执行COMMIT或者ROLLBACK语句后,才可以释放这些锁。
InnoDB专为事务处理设计的引擎,特别适用于处理大量短期事务。默认隔离级是REPEATABLE READ。InnoDB表是基于聚簇索引建立的,能提供一种非常快速的主键查找性能。InnoDB不会压缩索引。
InnoDB不能根据排序建立索引,而MyISAM支持。因此当InnoDB加载数据和创建索引时要比MyISAM慢很多。任何改变InnoDB表结构的操作都会导致整个表的重建。
除了高并发处理能力,InnoDB另一个广为人知的特征是它的外键约束。当使用主键时,InnoDB提供了及其快速的查询查找性能。
Memory表比MyISAM表快一个数量级,所有数据都在内存中,一旦系统重启,内存表结构仍然会保留,但原有的相关数据将会丢失。
内存表的几个用途:用于“查找”或“映射”表;用于缓存周期性聚合数据;用于在数据分析中产生的中间结果。
内存表采用表级加锁,只支持较低的写并发。
Achieve引擎只支持INSERT和SELECT查询而不支持索引。因为缓冲了数据写操作,并在插入时使用zlib算法对每行数据进行压缩,因此磁盘I/O消耗更少。基于此引擎的任何SELECT查询都会导致全表扫描。Achieve表适用于数据记录和数据采集的应用。
Achieve引擎支持行级加锁和专用的缓冲区系统,因而实现高并发的数据插入。
MyISAM表比InnoDB表更容易出错,恢复所需的时间也更长。
表转换:
ALTER TABLE
DUMP and IMPORT
CREATE and SELECT
转载于:https://blog.51cto.com/bonjour/846897
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110417.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...