首页 > 技术文章 > mysql 使用存储引擎

mingerlcm 2019-03-11 19:50 原文

 

三 使用存储引擎

方法1:建表时指定引擎

指定innodb,不写默认也是innodb

use 数据库先

create table innodb_t1(id int,name char)engine=innodb;

 

 

create table innodb_t2(id int)engine=innodb;

 

show create table innodb_t1;
show create table innodb_t2;

 

 

 

mysql> create table innodb_t1(id int,name char)engine=innodb;
Query OK, 0 rows affected (0.11 sec)

mysql> create table innodb_t2(id int)engine=innodb;
Query OK, 0 rows affected (0.02 sec)

mysql> show create table innodb_t1;
+-----------+----------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                               |
+-----------+----------------------------------------------------------------------------------------------------------------------------+
| innodb_t1 | CREATE TABLE `innodb_t1` (
  `id` int(11) DEFAULT NULL,
  `name` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-----------+----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> show create table innodb_t1\G;
*************************** 1. row ***************************
       Table: innodb_t1
Create Table: CREATE TABLE `innodb_t1` (
  `id` int(11) DEFAULT NULL,
  `name` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)



mysql> show create table innodb_t2\G;
*************************** 1. row ***************************
       Table: innodb_t2
Create Table: CREATE TABLE `innodb_t2` (
  `id` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

 

 

方法2:在配置文件中指定默认的存储引擎

/etc/my.cnf
[mysqld]
default-storage-engine=INNODB
innodb_file_per_table=1

 

查看

[root@mysql ~]# cd /var/lib/mysql/db1/
[root@mysql db1]# ll
总用量 48
-rw-rw----. 1 mysql mysql   61 10月  6 03:50 db.opt
-rw-rw----. 1 mysql mysql 8586 10月  7 01:22 innodb_t1.frm
-rw-rw----. 1 mysql mysql 8556 10月  7 01:22 innodb_t2.frm
-rw-rw----. 1 mysql mysql 8586 10月  6 16:28 t1.frm
-rw-rw----. 1 mysql mysql   92 10月  6 17:29 t1.MYD
-rw-rw----. 1 mysql mysql 1024 10月  6 17:29 t1.MYI

 

练习

创建四个表,分别使用innodb,myisam,memory,blackhole存储引擎,进行插入数据测试

mysql> create table innodb__t_t1(id int,name char(10))engine=innodb;
Query OK, 0 rows affected (0.30 sec)

mysql> create table innodb__t_t2(id int,name char(10))engine=myisam;
Query OK, 0 rows affected (0.06 sec)

mysql> create table innodb__t_t3(id int,name char(10))engine=memory;
Query OK, 0 rows affected (0.01 sec)

mysql> 
mysql> create table innodb__t_t4(id int,name char(10))engine=blackhole;
Query OK, 0 rows affected (0.05 sec)

 

 

1.innodb存储引擎 我们看到t1表就是innodb,innodb表类型在硬盘上会对应2个文件 frm是表结构 ibd是t1表数据文件

2.memory存储引擎  memory特点是数据存在内存里,不存放在硬盘上,只有表结构 t3.frm 没有表数据

3.backhole存储引擎  也是只有表结构frm

4.myisam存储引擎 对应3个文件  一个frm表结构  ,MYD是myisam的data文件 ,MYI是myisam索引文件

[root@mysql db1]# ll
总用量 152
-rw-rw----. 1 mysql mysql    61 10月  7 04:52 db.opt
-rw-rw----. 1 mysql mysql  8586 10月  7 04:54 innodb__t_t1.frm
-rw-rw----. 1 mysql mysql 98304 10月  7 04:54 innodb__t_t1.ibd
-rw-rw----. 1 mysql mysql  8586 10月  7 04:54 innodb__t_t2.frm
-rw-rw----. 1 mysql mysql     0 10月  7 04:54 innodb__t_t2.MYD
-rw-rw----. 1 mysql mysql  1024 10月  7 04:54 innodb__t_t2.MYI
-rw-rw----. 1 mysql mysql  8586 10月  7 04:54 innodb__t_t3.frm
-rw-rw----. 1 mysql mysql  8586 10月  7 04:54 innodb__t_t4.frm

 总结:不同类型的表,在硬盘上有不同的体现,他们的存储机制都不一样

 

分别对四张表插入一条记录

mysql> insert into innodb__t_t1 values(1,'mike');
Query OK, 1 row affected (0.04 sec)

mysql> insert into innodb__t_t2 values(1,'jack');
Query OK, 1 row affected (0.04 sec)

mysql> 
mysql> insert into innodb__t_t3 values(1,'peter');
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> insert into innodb__t_t4 values(1,'ken');
Query OK, 1 row affected (0.00 sec)

 

 

再查询一下四张表

mysql> select * from innodb__t_t1;
+------+------+
| id   | name |
+------+------+
|    1 | mike |
+------+------+
1 row in set (0.11 sec)

mysql> select * from innodb__t_t2;
+------+------+
| id   | name |
+------+------+
|    1 | jack |
+------+------+
1 row in set (0.10 sec)

mysql> select * from innodb__t_t3;
+------+-------+
| id   | name  |
+------+-------+
|    1 | peter |
+------+-------+
1 row in set (0.00 sec)

mysql> select * from innodb__t_t4;
Empty set (0.00 sec)

 

第四张表是blackhole

结论

#blackhole,往表内插入任何数据,都相当于丢入黑洞,表内永远不存记录

 

 

 

 memory表特点

从上面看到t3表,memory有数据

我们重启mysql服务后,把内存清理了,再查看 mermory的数据表 

service mysqld restart

数据没有了

mysql> select * from db1.innodb__t_t3;
Empty set (0.00 sec)

 

 memory存储引擎

#memory,在重启mysql或者重启机器后,表内数据清空

 

以后用的比较多存储引擎,表结构是 innodb

 

推荐阅读