三 使用存储引擎
方法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_t1G; *************************** 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_t2G; *************************** 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