数据库引擎InnoDB
InnoDB是事务型存储引擎,适合对事务要求较高的场景中;但较适用于处理大量短期事务;
基于MVCC(Mutli Version Concurrency Control)支持高并发;支持四个隔离级别,默认级别为REPEATABLE-READ;间隙锁以防止幻读;
使用聚集索引(主键索引);索引和数据在一起,一个索引对应一个数据。
支持”自适应Hash索引“;
锁粒度:行级锁;间隙锁;
InnoDB改表改一行锁一行,MyISAM改一行也要锁定整个表
事务就是把多个sql语句当一个正题来使用,要么同时都执行,要么走到半道失败以后回滚都不执行,事务性存储引擎表示这个事务能满足ACID测试
事务示例,银行卡转账,扣除和增加一前一后进行,操作不能完成的时候必须回滚,事务可以交叉进行,避免事务处理熟练过多时串行执行。
事务具有隔离性,在交叉执行是,隔离不能太严格,保证高并发执行
事务的四个特性:一致性;原子性;隔离性;持久性;
创建表
配置mariadb并启动
[root@C7m ~]#vim /etc/my.cnf.d/server.cnf
# this is read by the standalone daemon and embedded servers
[server]
skip_name_resolve = ON ------------ 跳过名称解析
innodb_file_per_table = ON ------- 每表使用单独表空间
max_connections = 20000 ---------- 最大并发连接数
rpm安装下的数据库文件位置,在此目录下创建文件相当于数据库。
[root@C7m ~]#ls /var/lib/mysql/
aria_log.00000001 ibdata1 ib_logfile1 mysql.sock test
aria_log_control ib_logfile0 mysql performance_schema
显示支持的存储引擎
[root@C7m ~]#mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment 注释 | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| CSV | YES | CSV storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| FEDERATED | YES | FederatedX pluggable storage engine | YES | NO | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| Aria | YES | Crash-safe tables with MyISAM heritage | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
10 rows in set (0.00 sec)
MariaDB [(none)]>
创建数据库hidb,定义字符集为utf8,查看数据库目录,目录内生成了hidb文件夹
MariaDB [(none)]> CREATE DATABASE hidb CHARACTER SET 'utf8';
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]>
[root@C7m ~]#ls /var/lib/mysql/
aria_log.00000001 hidb ib_logfile0 mysql performance_schema
aria_log_control ibdata1 ib_logfile1 mysql.sock test
选择hidb数据库,创建表mytbl1,定义id为整数,名称长度为30字符,数据库引擎为InnoDB。查看hidb目录,生成了以mytbl1开头的frm和ibd后缀的数据表文件,其中以frm为后缀的文件定义数据表的表格式,以ibd为后缀的文件定义数据表的表空间。里面存放表的数据和索引,每张表使用单独的表空间文件。
MariaDB [(none)]> USE hidb;
Database changed
MariaDB [hidb]> CREATE TABLE mytbl1(id INT, name CHAR(30)) ENGINE InnoDB;
Query OK, 0 rows affected (0.01 sec)
MariaDB [hidb]>
[root@C7m ~]#ls /var/lib/mysql/hidb/
db.opt mytbl1.frm mytbl1.ibd
总结:
数据存储:表空间;
并发:MVCC,间隙锁,行级锁;
索引:聚集索引、辅助索引;
性能:预读操作、内存数据缓冲、内存索引缓存、自适应Hash索引、插入操作缓存区;
备份:支持热备;
查询表
查看所有表的信息和状态状态,\G 竖状排列
MariaDB [hidb]> SHOW TABLE STATUS\G;
*************************** 1. row ***************************
Name: mytbl1 -------------------- 表名称
Engine: InnoDB -------------------- 数据引擎
Version: 10 ------------------------ 版本
Row_format: Compact ------------------- 行格式为紧密
Rows: 0 ------------------------- 行
Avg_row_length: 0 ------------------------- 平均行长度
Data_length: 16384 --------------------- 数据长度
Max_data_length: 0 ------------------------- 最大数据长度
Index_length: 0 ------------------------- 索引长度
Data_free: 0 ------------------------- 数据帧
Auto_increment: NULL ---------------------- 自动递增
Create_time: 2017-11-14 15:08:15 ------- 创建时间
Update_time: NULL ---------------------- 更新时间
Check_time: NULL ---------------------- 检验完整性的时间
Collation: utf8_general_ci ----------- 字符集
Checksum: NULL ---------------------- 检验码
Create_options: -------------------------- 创建时的选项
Comment: -------------------------- 表注释
1 row in set (0.00 sec)
查看以my开头的数据表状态,支持使用通配符查询
MariaDB [hidb]> SHOW TABLE STATUS LIKE 'my%'\G;
*************************** 1. row ***************************
Name: mytbl1
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2017-11-14 15:08:15
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
查询数据引擎为InnoDB的所有表
MariaDB [hidb]> SHOW TABLE STATUS WHERE Engine='InnoDB'\G;
*************************** 1. row ***************************
Name: mytbl1
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 0
Avg_row_length: 0
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 0
Auto_increment: NULL
Create_time: 2017-11-14 15:08:15
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
数据库引擎MyISAM
MyISAM:
支持全文索引(FULLTEXT index)、压缩、空间函数(GIS);
不支持事务
锁粒度:表级锁
崩溃无法保证表安全恢复
特性:
加锁和并发:表级锁;
修复:手动或自动修复、但可能会丢失数据;
索引:非聚集索引;
延迟索引更新;
表压缩;
适用场景:只读或读多写少的场景、较小的表(以保证崩溃后恢复的时间较短);
创建数据库HELLODB,选择数据库HELLODB;创建数据表tbl1,定义Id为整数,Name是长度为的字符集,数据库引擎为MyISAM。
MariaDB [hidb]> CREATE DATABASE HELLODB;
Query OK, 1 row affected (0.00 sec)
MariaDB [hidb]> USE HELLODB;
Database changed
MariaDB [HELLODB]> CREATE TABLE tbl1 (Id INT, Name CHAR(4)) ENGINE=MyISAM;
Query OK, 0 rows affected (0.01 sec)
MariaDB [HELLODB]>
查看数据库文件生成和数据表文件生成。每个表有三个文件,存储于数据库目录中。
tbl_name.frm:表格式定义;
tbl_name.MYD:数据文件;
tbl_name.MYI:索引文件;
[root@C7m ~]#ls /var/lib/mysql/
aria_log.00000001 HELLODB ibdata1 ib_logfile1 mysql.sock test
aria_log_control hidb ib_logfile0 mysql performance_schema
[root@C7m ~]#ls /var/lib/mysql/HELLODB/
db.opt tbl1.frm tbl1.MYD tbl1.MYI
[root@C7m ~]#
查看数据表状态
MariaDB [HELLODB]> SHOW TABLE STATUS\G;
*************************** 1. row ***************************
Name: tbl1
Engine: MyISAM
Version: 10
Row_format: Fixed
Rows: 0
Avg_row_length: 0
Data_length: 0
Max_data_length: 2533274790395903
Index_length: 1024
Data_free: 0
Auto_increment: NULL
Create_time: 2017-11-14 16:47:19
Update_time: 2017-11-14 16:47:19
Check_time: NULL
Collation: latin1_swedish_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.01 sec)
其它的存储引擎:
CSV:将CSV文件(以逗号分隔字段的文本文件)作为MySQL表文件;
MRG_MYISAM:将多个MyISAM表合并成的虚拟表;
BLACKHOLE:类似于/dev/null,不真正存储数据;
MEMORY:内存存储引擎,支持hash索引,表级锁,常用于临时表;
FEDERATED: 用于访问其它远程MySQL服务器上表的存储引擎接口;
MariaDB额外支持很多种存储引擎:
OQGraph、SphinxSE、TokuDB、Cassandra、CONNECT、SQUENCE、...
搜索引擎:
lucene, sphinx
lucene:Solr, ElasticSearch