mysql 存储引擎
程序员文章站
2022-07-02 15:29:38
九、mysql 存储引擎 1、课程大纲 2、mysql存储引擎介绍 3、mysql存储引擎种类 4、数据库的存储引擎 存储引擎查询 存储引擎的配置: 配置存储引擎: 5、innodb体系结构: 表空间: 共享表空间:主要存放系统元数据 独立表空间:主要存放用户数据 逻辑概念,数据存储的概念 表空间数 ......
mysql 存储引擎
1、课程大纲
存储引擎的介绍 mysql中的存储引擎分类 mysql存储引擎设置 mysql,innodb引擎存储结构 mysql中的事物 mysql中的锁
2、mysql存储引擎介绍
mysql存储引擎介绍 文件系统: 操作系统组织和存取数据的一种机制。 文件系统是一种软件。 类型:ext2,3,4,xfs数据: 不管使用什么文件系统,数据内容不会变化 不同的是,存储空间,大小,速度 mysql引擎: 可以理解为,mysql的“文件系统”,只不过功能更加强大。 mysql引擎功能: 除了可以提供基本的存取功能,还有更多功能事物功能,锁定,备份和恢复,优化以及特殊功能。
3、mysql存储引擎种类
mysql 提供以下存储引擎: innodb myisam memory archive federated example blackhole merge ndbcluster csv 还可以使用第三方存储引擎(tokudb)。
4、数据库的存储引擎
存储引擎查询
存储引擎查询: show engines; select @@default_storage_engine; show create table city; show table status like 'city'\g use information_schema select table_schema,table_name,engine from information_schema.tables where table_schema='world'; select table_schema,table_name,engine from information_schema.tables where table_schema='mysql'; select table_schema,table_name,engine from information_schema.tables where engine='csv';
存储引擎的配置:
查看存储引擎: show engines; select @@default_storage_engine; mysql> show variables like '%engine%'; +----------------------------+--------+ | variable_name | value | +----------------------------+--------+ | default_storage_engine | innodb | | default_tmp_storage_engine | innodb | | storage_engine | innodb | +----------------------------+--------+ 将存储引擎设置在配置文件中,重启mysql生效。
配置存储引擎:
1、在启动配置文件中设置服务器存储引擎: [mysqld] default-storage-engine=<storage engine> 2、使用 set 命令为当前客户机会话设置: set @@storage_engine=<storage engine>; 3、在 create table 语句指定: create table t (i int) engine = <storage engine>; mysql> show variables like '%engine%'; mysql> use world mysql> create table test3 (id int ) engine=innodb; mysql> show create table test3;
5、innodb体系结构:
表空间:
共享表空间:主要存放系统元数据
独立表空间:主要存放用户数据
逻辑概念,数据存储的概念
表空间数据文件:idb文件,在/app/mysql/data/lufei
共享表空间的设置:
默认的配置: innodb_data_file_path /application/mysql/data/ ibdata1:12m:autoextend 共享表空间的设置: 共享表空间设置: innodb_data_file_path=ibdata1:50m;ibdata2:50m:autoextend innodb_data_file_path=ibdata1:12m;ibdata2:50m:autoextend ----错误的配置xxx 在 /application/mysql/data/查看idbdata1实际的大小,然后在增加idbdata2的大小,进行扩展。此命令配置在mysql的配置文件中。 innodb_data_file_path=ibdata1:76m;ibdata2:50m:autoextend -----正确的配置
独立表空间:
除了系统表空间之外,innodb 还在数据库目录中创建另外的表空间,用于每个 innodb 表的 .ibd 文件。 innodb 创建的每个新表在数据库目录中设置一个 .ibd 文件来搭配表的 .frm 文件。 可以使用 innodb_file_per_table 选项控制此设置 更改该设置仅会更改已创建的新表的默认值。 注:在mysql5.6开始,默认的配置为: | innodb_file_per_table | on | 独立表空间删除表空间命令: alter table testtab discard tablespace; 该命令执行后/app/mysql/data/lufei中的testtab的ibd文件就被删除。
6、innodb引擎-事务
组数据操作执行步骤,这些步骤被视为一个工作单元: 用于对多个语句进行分组 可以在多个客户机并发访问同一个表中的数据时使用 所有步骤都成功或都失败: 如果所有步骤正常,则执行 如果步骤出现错误或不完整,则取消 事务acid: atomic(原子性) 所有语句作为一个单元全部成功执行或全部取消。 consistent(一致性) 如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。 isolated(隔离性) 事务之间不相互影响。 durable(持久性) 事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。
7、mysql事务控制语句
事务中的标准语句:dml语句 insert,update,delete三类事物语句。 如果遇到以上三个命令,都是事物型的操作,都会默认在前面添加begin命令。 start transaction(或 begin):显式开始一个新事务 1 2 3 commit:永久记录当前事务所做的更改 begin 1 打标记a 2 打标记b(savepoint时候) 3 rollback:取消当前事务所做的更改(回滚到所打的标记) savepoint:分配事务过程中的一个位置,以供将来引用 rollback to savepoint:取消在 savepoint 之后执行的更改 release savepoint:删除 savepoint 标识符 set autocommit:为当前连接禁用或启用默认 autocommit 模式 保存:commit是自动保存的: mysql> show variables like "%auto%"; +-----------------------------+-------+ | variable_name | value | +-----------------------------+-------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | autocommit | on | | automatic_sp_privileges | on | | innodb_autoextend_increment | 64 | | innodb_autoinc_lock_mode | 1 | | innodb_stats_auto_recalc | on | | sql_auto_is_null | off | +-----------------------------+-------+ 8 rows in set (0.00 sec) 需要将自动保存的commit改成关闭:(只修改当前会话) mysql> set autocommit=0; 查看全局commit配置: mysql> show global variables like "%auto%"; 在有些业务繁忙企业场景下,这种配置可能会对性能产生很大影响,但对于安全性上有很大提高。 将来,我们需要去权衡我们的业务需求去调整是否自动提交。 我们可以通过以下命令进行修改关闭(0是关闭,1是开启): set global autocommit=0; -所有新建会话 set session autocommit=0; -当前会话 select @@autocommit; -查看设置结果 我们也可以修改配置文件让其永久生效: vi /etc/my.cnf [mysqld] autocommit=0 隐式提交语句(commit): 用于隐式提交的 sql 语句: 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 如: begin 1 2 3 bgein(开始之前就默认commit) 1 2 3
8、事务的日志
redo是什么? redo,顾名思义“重做日志”,是事务日志的一种。 作用是什么? 在事务acid过程中,实现的是“d”持久化的作用。 undo是什么? undo,顾名思义“回滚日志”,是事务日志的一种。 作用是什么? 在事务acid过程中,实现的是“a、c”原子性和一致性的作用。 什么是“锁”? “锁”顾名思义就是锁定的意思。 “锁”的作用是什么? 在事务acid过程中,“锁”和“隔离级别”一起来实现“i”隔离性的作用。 锁的粒度: 1、myiasm:低并发锁——表级锁 2、innodb:高并发锁——行级锁 四种隔离级别: read uncommitted 允许事务查看其他事务所进行的未提交更改 read committed 允许事务查看其他事务所进行的已提交更改 repeatable read****** 确保每个事务的 select 输出一致 innodb 的默认级别 serializable 将一个事务的结果与其他事务完全隔离
转自:https://www.cnblogs.com/cuiyongchao007/p/12853199.html