zoukankan      html  css  js  c++  java
  • MySQL存储引擎

    MySQL存储引擎

    数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。简而言之,存储引擎就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。

    现在许多数据库管理系统都支持多种不同的存储引擎。MySQL 的核心就是存储引擎。

    MySQL 提供了多个不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,不需要在整个服务器中使用同一种存储引擎,针对具体的要求,可以对每一个表使用不同的存储引擎。

    img

    MySQL 5.7 支持的存储引擎有 InnoDB、MyISAM、Memory、Merge、Archive、CSV、BLACKHOLE 等。可以使用SHOW ENGINES;语句查看系统所支持的引擎类型

    Support 列的值表示某种引擎是否能使用,YES表示可以使用,NO表示不能使用,DEFAULT表示该引擎为当前默认的存储引擎。

    存储引擎

    关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel的电子表格的形式。有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差。而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,数据的处理上也会存在着差异。那么,对于MySQL来说,它提供了很多种类型的存储引擎,我们可以根据对数据处理的需求,选择不同的存储引擎,从而最大限度的利用MySQL强大的功能。这篇博文将总结和分析各个引擎的特点,以及适用场合,并不会纠结于更深层次的东西。我的学习方法是先学会用,懂得怎么用,再去知道到底是如何能用的。下面就对MySQL支持的存储引擎进行简单的介绍。

    存储引擎 描述
    ARCHIVE 用于数据存档的引擎,数据被插入后就不能在修改了(只支持SELECT和INSERT语句),且不支持索引。
    CSV 在存储数据时,会以逗号作为数据项之间的分隔符。
    BLACKHOLE 会丢弃写操作,该操作会返回空内容。
    FEDERATED 将数据存储在远程数据库中,用来访问远程表的存储引擎。
    InnoDB 支持事务、行级锁以及外键等功能。
    MEMORY 置于内存的表,也就是说将数据存放于内存之中,类似于Redis。
    MERGE 用来管理由多个 MyISAM 表构成的表集合。
    MyISAM 主要的非事务处理存储引擎,性能相对于InnoDB来说要高一些。
    NDB MySQL 集群专用存储引擎

    查看存储引擎信息

    通常情况下,我们使用数据库存储数据的时候,都会使用到存储引擎,下面我们来一起看看MySQL数据库支持哪些存储引擎。

    查看当前数据库中支持的存储引擎

    mysql> show engines;
    

    临时设置数据库存储引擎

    mysql> set  default_storage_engine=MyISAM;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SELECT @@default_storage_engine;
    +--------------------------+
    | @@default_storage_engine |
    +--------------------------+
    | MyISAM                   |
    +--------------------------+
    1 row in set (0.00 sec)
    

    查看某个表的存储引擎

    mysql> SHOW CREATE TABLE db1.db01G
    *************************** 1. row ***************************
           Table: db01
    Create Table: CREATE TABLE `db01` (
      `name` varchar(20) DEFAULT NULL,
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `sex` varchar(20) DEFAULT NULL,
      `addr` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    
    mysql> SELECT TABLE_NAME,ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'db01' AND TABLE_SCHEMA = 'db1'G
    *************************** 1. row ***************************
    TABLE_NAME: db01
        ENGINE: InnoDB
    1 row in set (0.00 sec)
    
    mysql> SELECT ENGINE FROM information_schema.TABLES WHERE TABLE_NAME="pm20";
    +--------+
    | ENGINE |
    +--------+
    | MyISAM |
    +--------+
    1 row in set (0.00 sec)
    

    查看myisam的表有哪些

    mysql> select table_schema,table_name,engine from information_schema.tables where engine='myisam';
    +--------------+------------------+--------+
    | table_schema | table_name       | engine |
    +--------------+------------------+--------+
    | db1          | Dem_Picture      | MyISAM |
    | db1          | t2               | MyISAM |
    | mysql        | columns_priv     | MyISAM |
    | mysql        | db               | MyISAM |
    | mysql        | event            | MyISAM |
    | mysql        | func             | MyISAM |
    | mysql        | ndb_binlog_index | MyISAM |
    | mysql        | proc             | MyISAM |
    | mysql        | procs_priv       | MyISAM |
    | mysql        | proxies_priv     | MyISAM |
    | mysql        | tables_priv      | MyISAM |
    | mysql        | user             | MyISAM |
    +--------------+------------------+--------+
    12 rows in set (0.07 sec)
    

    查看innodb的表有哪些

    mysql> select table_schema,table_name,engine from information_schema.tables where engine='innodb';
    +--------------------+---------------------------+--------+
    | table_schema       | table_name                | engine |
    +--------------------+---------------------------+--------+
    | information_schema | COLUMNS                   | InnoDB |
    | information_schema | EVENTS                    | InnoDB |
    | information_schema | OPTIMIZER_TRACE           | InnoDB |
    | information_schema | PARAMETERS                | InnoDB |
    | information_schema | PARTITIONS                | InnoDB |
    | information_schema | PLUGINS                   | InnoDB |
    | information_schema | PROCESSLIST               | InnoDB |
    | information_schema | ROUTINES                  | InnoDB |
    | information_schema | TRIGGERS                  | InnoDB |
    | information_schema | VIEWS                     | InnoDB |
    | db1                | db01                      | InnoDB |
    | db1                | t1                        | InnoDB |
    | mysql              | engine_cost               | InnoDB |
    | mysql              | gtid_executed             | InnoDB |
    | mysql              | help_category             | InnoDB |
    | mysql              | help_keyword              | InnoDB |
    | mysql              | help_relation             | InnoDB |
    | mysql              | help_topic                | InnoDB |
    | mysql              | innodb_index_stats        | InnoDB |
    | mysql              | innodb_table_stats        | InnoDB |
    | mysql              | plugin                    | InnoDB |
    | mysql              | server_cost               | InnoDB |
    | mysql              | servers                   | InnoDB |
    | mysql              | slave_master_info         | InnoDB |
    | mysql              | slave_relay_log_info      | InnoDB |
    | mysql              | slave_worker_info         | InnoDB |
    | mysql              | time_zone                 | InnoDB |
    | mysql              | time_zone_leap_second     | InnoDB |
    | mysql              | time_zone_name            | InnoDB |
    | mysql              | time_zone_transition      | InnoDB |
    | mysql              | time_zone_transition_type | InnoDB |
    | sys                | sys_config                | InnoDB |
    | test               | student                   | InnoDB |
    | test               | t1                        | InnoDB |
    +--------------------+---------------------------+--------+
    34 rows in set (0.01 sec)
    

    修改存储引擎

    在使用数据库的时候,我们经常会去使用不同的存储引擎来存储数据,那就难免需要修改存储引擎。下面我们介绍几个存储引擎的修改方法。

    修改配置文件(永久)

    vim /etc/my.cnf
    [mysqld]
    default-storage-engine=innodb
    innodb_file_per_table=1				# InnoDB独立表空间
    

    临时修改存储引擎(临时)

    mysql> set  default_storage_engine=MyISAM;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SELECT @@default_storage_engine;
    +--------------------------+
    | @@default_storage_engine |
    +--------------------------+
    | MyISAM                   |
    +--------------------------+
    1 row in set (0.00 sec)
    

    创建表的时候修改存储引擎

    mysql> CREATE TABLE shanhe(id INT) ENGINE=innodb;
    
    

    存储引擎的实验

    下面我们用几个实验来测试几个存储引擎的区别。

    
    mysql> use db1;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> create table t1(id int)engine=innodb;
    Query OK, 0 rows affected (0.03 sec)
    
    mysql> create table t2(id int)engine=myisam;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> create table t3(id int)engine=memory;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> create table t4(id int)engine=blackhole;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show tables;
    +---------------+
    | Tables_in_db1 |
    +---------------+
    | t1            |
    | t2            |
    | t3            |
    | t4            |
    +---------------+
    6 rows in set (0.00 sec)
    
    mysql> exit
    Bye
    
    root@756ad135dd2e:/var/lib/mysql/db1# ls
    t1.frm  t1.ibd  t2.MYD  t2.MYI  t2.frm  t3.frm  t4.frm
    
    # 发现后两种存储引擎只有表结构,无数据。
    # memory,在重启mysql或者重启机器后,表内数据清空。
    # blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录。
    # innodb支持事务,而myisam存储引擎是不支持事务。
    
    
  • 相关阅读:
    Binary Tree Maximum Path Sum
    ZigZag Conversion
    Longest Common Prefix
    Reverse Linked List II
    Populating Next Right Pointers in Each Node
    Populating Next Right Pointers in Each Node II
    Rotate List
    Path Sum II
    [Leetcode]-- Gray Code
    Subsets II
  • 原文地址:https://www.cnblogs.com/backz/p/15405336.html
Copyright © 2011-2022 走看看