数据库引擎的介绍和使用

数据库引擎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 

你可能感兴趣的:(数据库引擎的介绍和使用)