数据库引擎的介绍和使用

数据库引擎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 
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,273评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,349评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,709评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,520评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,515评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,158评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,755评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,660评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,203评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,287评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,427评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,122评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,801评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,272评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,393评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,808评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,440评论 2 359

推荐阅读更多精彩内容