存储引擎
一 存储引擎的介绍
存储引擎: 可以理解为 mysql的 文件系统,只是功能更加强大,
mysql引擎功能: 除了可以提供基本的存取功能,还有更多功能 事务功能 锁定 备份和恢复 优化以及特殊功能
二 MySQL中的存储引擎分类
1.分类
InnoDB
MyISAM
MEMORY
ARCHIVE
FEDERATED
EXAMPLE
BLACKHOLE
MERGE
NDBCLUSTER
CSV
2. 存储引擎查询
-- 查看数据库支持的存储引擎 show engines;
-- 查看表的存储引擎 show create table city; show table status like 'city'G
-- 查看index_test 库下的所有表的引擎 select table_schema,table_name,engine from information_schema.tables where table_schema='index_test';
-- 查看数据库下存储引擎是innodb的 所有表 select table_schema,table_name,engine from information_schema.tables where engine='InnoDB';
三 MySQL存储引擎设置
1. 在启动配置文件中设置服务器存储引擎:
[mysqld] default-storage-engine=InnoDB
2. 使用 SET 命令为当前客户机会话设置:
SET @@storage_engine=InnoDB;
3. 在 CREATE TABLE 语句指定:
CREATE TABLE t (i INT) ENGINE =InnoDB;
四 MySQL Innodb引擎存储结构
1. MyISAM
Myisam存储引擎是在mysql5.5之前版本默认的存储引擎
create table yyy(id int(10))engine=myisam;
.frm: 记录表结构
.MYD: 数据存储
.MYI: 索引存储
2. InnoDB
.frm文件:保存了每个表的元数据,包括表结构的定义等,该文件与数据库引擎无关。
.ibd文件:保存每个表的数据文件
五 innodb的表空间
共享表空间:主要存放系统元数据等
独立表空间:主要存放用户数据
1. 共享表空间
1)查看共享表空间
mysql> show variables like "innodb_data_file_path"; +-----------------------+------------------------+ | Variable_name | Value | +-----------------------+------------------------+ | innodb_data_file_path | ibdata1:12M:autoextend | +-----------------------+------------------------+
2) 停服务器,查看ibdata1大小
[root@db2 data]# du -sh ../data/ibdata1 76M ../data/ibdata1
3) 修改my.cnf
[mysqld] innodb_data_file_path=ibdata1:76M;ibdata2:50M:autoextend
ibdata1这个必须要和 du-sh 查到的大小一致
一般都是刚装好数据库就设置这项
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
创建一个表空间,其中包含一个名为 ibdata1 且大小为 50 MB(固定)的数据文件和一个名为 ibdata2 且大小为 50 MB(自动扩展)的数据文件:
2.独立表空间
独立表空间 默认是开启
在 my.cnf 设置 0关闭 1开启
表空间是 每个 InnoDB 表的 .ibd 文件
-- 否开启 show variables like "innodb_file_per_table";
六 MySQL中的事务
一组数据操作执行步骤,这些步骤被视为一个工作单元
用于对多个语句进行分组
可以在多个客户机并发访问同一个表中的数据时使用
所有步骤都成功或都失败
如果所有步骤正常,则执行
如果步骤出现错误或不完整,则取消
1. 事务ACID 4个隔离级别
Atomic(原子性)[əˈtɒmɪk]
所有语句作为一个单元全部成功执行或全部取消。
Consistent(一致性) [kənˈsɪstənt]
如果数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。
Isolated(隔离性) [ˈaɪsəleɪtɪd]
事务之间不相互影响。
Durable(持久性)[ˈdjʊərəbl]
事务成功完成后,所做的所有更改都会准确地记录在数据库中。所做的更改不会丢失。
2. 事务控制语句
开始事务 begin ... commit 取消事务 begin ... rollback
3. mysql 5.5 默认是自动commit
在mysql5.5开始, 开启事务时不需要begin 语句。 并且 默认是开启autocommit模式,作为一个事务隐式提交每个语句
mysql> show variables like "autocommit"; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+ 1 row in set (0.00 sec)
4. 关闭autocommit
1) 临时设置
我们可以通过以下命令进行修改关闭(0是关闭,1是开启): SET GLOBAL AUTOCOMMIT=0; -所有新建会话 SET SESSION AUTOCOMMIT=0; -当前会话 SELECT @@AUTOCOMMIT; -查看设置结果
2) 永久设置
[mysqld] AUTOCOMMIT=0
5. 其他触发隐式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
6. redo 日志
重做日志,是事务日志的一种
作用:
在事务acid过程中,实现的是D 持久化的操作
7. undo日志
回滚日志 是事务日志的一种
作用:
在事务acid过程中,实现的是 a c 原子性和一致性的作用
七 MySQL中的锁
在事务ACID过程中, “锁”和“隔离级别” 一起来实现隔离性作用
1.锁的粒度
1、MyIasm:低并发锁——表级锁
2、Innodb:高并发锁——行级锁
2. 四种隔离级别
READ UNCOMMITTED 允许事务查看其他事务所进行的未提交更改 READ COMMITTED 允许事务查看其他事务所进行的已提交更改 REPEATABLE READ****** 确保每个事务的 SELECT 输出一致 InnoDB 的默认级别 SERIALIZABLE 将一个事务的结果与其他事务完全隔离
3. 查看默认隔离级别
-- 查看当前会话隔离级别 select @@tx_isolation; -- 查看系统当前隔离级别 select @@global.tx_isolation;