Mysql 存储引擎
目录
警告
本文最后更新于 2022-06-28,文中内容可能已过时。
1. mysql 存储引擎
1.1. 引擎分类
可以表述为mysql
的'文件系统'
, 存储引擎可以针对单表来进行设置。
mysql
提供的有(最常用的InnoDB
、MyISAM
) :
InnoDB
MyISAM
MEMORY
ARCHIVE
FEDERATED
EXAMPLE
BLACKHOLE
MERGE
NDBCLUSTER
CSV
第三方:
TokuDB
1.2. InnoDB
|
|
1.3. 引擎设置
- 编译时直接指定默认的存储引擎
- 在启动的配置文件中指定
|
|
- 使用
SET
命令为当前客户机会话设置
|
|
- 在建表语句(
CREATE TABLE
)中指定(开发规范)
|
|
1.4. 表空间
- 共享表空间: 主要存放系统元数据等
- 独立表空间: 主要存放用户数据
1.4.1. 表空间设置
查看: show variables like 'innodb_data_file_path'
|
|
1.5. 表空间数据文件
从5.6
开始,mysql
会为每个新表配置独立的表空间,设置项为innodb_file_per_table: ON
,此项修改仅会更改新建表的属性。
*.frm
: 元数据,包含表结构等*.ibd
: 表的数据文件
1.6. 事务ACID
Atomic
(原子性): 所有语句作为一个单元全部成功执行或全部取消Consistent
(一致性): 如果数据库在事务开始时处于一致状态,则在执行改事务期间将保留一致状态。Isolated
(隔离性): 事务之间互不影响。Durable
(持久性): 事务成功个完成后,所做的所有更改都会准确的记录在数据库中,所做的更改不会丢失。
1.6.1. 事务(SQL)控制语句
- 标准的事务语句指的是
DML
语句
BEGIN(START TRANSACTION)
: 开始一个新的事务COMMIT
: 永久提交当前事务的更改ROLLBACK
: 回滚当前事务更改SAVEPOINT
: 分配事务过程中的一个位置,以提供将来引用ROLLBACK TO SAVEPOINT
: 取消在SAVEPOINT
之后执行的更改RELEASE SAVEPOINT
: 删除SAVEPOINT
标识符SET AUTOCOMMIT=(OFF|ON)|(0|1)
: 为当前连接启用或禁用autocommit
模式,默认ON
,未提交前其他人不能查看 TODO: 程序是否也需要自动执行commit(如果程序写了事务开始的,那么也需要写结束,那就是和服务器设置没有什么关系)my.cnf
修改(存在频繁和大量数据修改时,建议关闭自动提交)1 2
[mysqld] AUTOCOMMIT=0
- 隐式提交
START TRANSACTION
SET AUTOCOMMIT = 1
DDL
ALTER
、CREATE
、DROP
DCL
GRANT
、REVOKE
、SET PASSWORD
锁定语句
LOCK TABLES
、UNLOCK TABLES
TRUNCATE TABLE
LOAD DATA INFILE
SELECT FOR UPDATE
1.7. RODO
- “重做日志”,是事务日志的一种 ,在事务
ACID
中,实现的是"D"
持久化的作用
1.8. UNDO
- “回滚日志”,是事务日志的一种,在事务
ACID
中,实现的是"A"
、"C
",原子性和一致性的作用
1.9. mysql 四种隔离级别
READ UNCOMMITTED
- 允许事务查看其他事务所进行的未提交更改
READ COMMITTED
- 允许事务查看其他事务所进行的已提交更改
REPEATABLE READ***
- 确保每个事务的
SELECT
输出一致 InnoDB
的默认级别(show variables like '%iso%'
)
- 确保每个事务的
SERIALIZABLE
- 将一个事务的结果与其他事务完全隔离