知识点:
分为server层和存储引擎。
server层:连接器,解析器,优化器。
查询缓存不建议使用。
存储引擎层:真正和数据读写有关系的,是和物理内存真正交互的部分,采用插件的形式封装。
解析器:
词法分析 分词 ----->根据空格拆分sql语句,拆出sq的关键字和非关键字。
语法分析 分析 : 符合SQL的语法 SQL的语法 : SQL 92 limit MYSQL自己的语法。分析是crud那种。
优化器:
优化索引,并在此时形成执行计划。如何使用索引,如何多表关联。尤其是带where的。
执行器:
按照优化的sql调用存储引擎。
-----------------------------------------
知识点:存储引擎:
具体:
表锁是server提供的。
行锁 索引 事务 表
------------------------------------------------------
知识点:日志文件 数据文件
---------------------------------------------------------------
知识点:
1.错误日志
操作:进入mysql,show variables like 'log_%'
2.二进制日志,开启需要指定日志文件。
vim /etc/my.cnf
cd /var/lib/mysql
找到:mysql文件夹就是我们的数据库
开启则在my.cnf添加:
3.通用查询日志 不重要
4.慢查询日志:
5.事务日志 是引擎特有的。
数据迁移找:cd /var/lib/mysql
---------------------------------------------------------------------------------------------------------------------------------------------
知识点:mysql的并发控制。
全局锁和表级锁是server层实现的。各个存储引擎是可以公用的。
全局锁:整个database,用于数据备份。
表级锁:锁整个表。
行级锁:锁某些数据行。
锁的功能:共享锁和排它锁。
悲观锁(排他锁)和乐观锁(版本列或者唯一列逻辑控制)。
页级锁一般不用。
----------------------------------------------------------------------------------------------------------------------------------------------------------
锁:https://www.cnblogs.com/jpfss/p/8890474.html
https://www.cnblogs.com/xiaowangbangzhu/p/10436848.html
这些东西表的锁mysql自动给我们用了。
DML,DQL默认加读锁。
DDL默认加写锁。
1.表级锁演练:
第一步:show status like 'table%'
第二步:show databases
第三步:use database
第四步:show tables
第五步:lock table 表名称 read(write),表名称2 read(write) lock table mylock read锁读
第六步:两个会话,自己加的读锁自己也写不了了,但是都可以读。
总结:读锁,自己可以读。自己不能操作其它表。
2.写锁的演练:
第一步:lock table mylock write锁写
第三步:本个会话能查也能写,但是其他的会话不能读也不能写。
总结:写锁,自己可以读。自己不能操作其它表,
----------------------------------------------------------------------------------------------------------------------------------------------------------