MySQL引擎:能够理解为,MySQL的“文件系统”,只不过功能更增强大。
MySQL引擎功能:除了能够提供基本的存取功能,还有更多功能事务功能、锁定、备份和恢复、优化以及特殊功能。mysql
MySQL 提供如下存储引擎
InnoDB 经常使用
MyISAM 经常使用
MEMORY
ARCHIVE
FEDERATED
EXAMPLE
BLACKHOLE
MERGE
NDBCLUSTER
CSV
还可使用第三方存储引擎(TokuDB)sql
一、使用 SELECT 确认会话存储引擎: SELECT @@default_storage_engine; 二、使用 SHOW 确认每一个表的存储引擎: show engines; show create table city; show table status like 'city'\G 三、使用 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'; 四、在启动配置文件中设置服务器存储引擎: [mysqld] default-storage-engine=<Storage Engine> 五、使用 SET 命令为当前客户机会话设置: SET @@storage_engine=<Storage Engine>; 六、在 CREATE TABLE 语句指定: CREATE TABLE t (i INT) ENGINE = <Storage Engine>;
共享表空间:主要存放系统元数据等
独立表空间:主要存放用户数据数据库
InnoDB系统表空间:
默认状况下,InnoDB 元数据、撤消日志和缓冲区存储在系统“表空间”中。
这是单个逻辑存储区域,能够包含一个或多个文件。
每一个文件能够是常规文件或原始分区。
最后的文件能够自动扩展。 安全
InnoDB系统表空间配置服务器
经过添加数据文件增长表空间大小。 在 my.cnf 文件中使用 innodb_data_file_path 选项。 [mysqld] innodb_data_file_path=datafile_spec1[;datafile_spec2]... 配置示例:建立一个表空间,其中包含一个名为 ibdata1 且大小为 50 MB(固定)的数据文件和一个名为 ibdata2 且大小为 50 MB(自动扩展)的数据文件: [mysqld] innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend 默认状况下将文件放置在 data 目录中。 若是须要,显式指定文件位置。
除了系统表空间以外,InnoDB 还在数据库目录中建立另外的表空间,用于每一个 InnoDB 表的 .ibd 文件。 InnoDB 建立的每一个新表在数据库目录中设置一个 .ibd 文件来搭配表的 .frm 文件。 可使用 innodb_file_per_table 选项控制此设置 更改该设置仅会更改已建立的新表的默认值。 mysql> show variables like '%per_table'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.00 sec) 永久生效须要在my.cnf配置文件添加innodb_file_per_table={0|1},而后重启mysql服务 注:在mysql5.6开始,默认的配置为: | innodb_file_per_table | ON |
Atomic(原子性)
全部语句做为一个单元所有成功执行或所有取消。
Consistent(一致性)
若是数据库在事务开始时处于一致状态,则在执行该事务期间将保留一致状态。
Isolated(隔离性)
事务之间不相互影响。
Durable(持久性)
事务成功完成后,所作的全部更改都会准确地记录在数据库中。所作的更改不会丢失。并发
START TRANSACTION(或 BEGIN):显式开始一个新事务 COMMIT:永久记录当前事务所作的更改 ROLLBACK:取消当前事务所作的更改 SAVEPOINT:分配事务过程当中的一个位置,以供未来引用 ROLLBACK TO SAVEPOINT:取消在 savepoint 以后执行的更改 RELEASE SAVEPOINT:删除 savepoint 标识符 SET AUTOCOMMIT:为当前链接禁用或启用默认 autocommit 模式
在MySQL5.5开始,开启事务时再也不须要begin或者start transaction语句。而且,默认是开启了Autocommit模式,做为一个事务隐式提交每一个语句。 在有些业务繁忙企业场景下,这种配置可能会对性能产生很大影响,但对于安全性上有很大提升。 未来,咱们须要去权衡咱们的业务需求去调整是否自动提交。 咱们能够经过如下命令进行修改关闭(0是关闭,1是开启): SET GLOBAL AUTOCOMMIT=0; #全部新建会话 SET SESSION AUTOCOMMIT=0; #当前会话 SELECT @@AUTOCOMMIT; #查看设置结果 咱们也能够修改配置文件让其永久生效: vi /etc/my.cnf [mysqld] AUTOCOMMIT=0
用于隐式提交的 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
Redo是什么? redo,顾名思义“重作日志”,是事务日志的一种。 做用是什么? 在事务ACID过程当中,实现的是“D”持久化的做用。 undo是什么? undo,顾名思义“回滚日志”,是事务日志的一种。 做用是什么? 在事务ACID过程当中,实现的是“A、C”原子性和一致性的做用 什么是“锁”? “锁”顾名思义就是锁定的意思。 “锁”的做用是什么? 在事务ACID过程当中,“锁”和“隔离级别”一块儿来实现“I”隔离性的做用 锁的粒度: 一、MyIasm:低并发锁——表级锁 二、Innodb:高并发锁——行级锁 四种隔离级别: READ UNCOMMITTED 容许事务查看其余事务所进行的未提交更改 READ COMMITTED 容许事务查看其余事务所进行的已提交更改 REPEATABLE READ****** 确保每一个事务的 SELECT 输出一致 InnoDB 的默认级别 SERIALIZABLE 将一个事务的结果与其余事务彻底隔离
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">高并发