Mysql创建数据库时,发生了什么

创建数据库: CREATE DATABASE dbname;

1.任何一个数据库在datadir下面都有一个datadir/dbname的目录;
2.datadir/下面创建了一个datadir/dbname目录,同时,在datadir/dbname目录下面,创建了一个db.opt。而db.opt文件则是对dbname这个数据库的一些描述,如字符集什么的;

删除数据库: DROP DATABASE dbname;

1.datadir/dbname目录会被删除,包括目录里的文件及子目录,与rm -r datadir/dbnae基本一样;
2.但是如果存储引擎是innodb的时候,直接在datadir下面执行rm -r dbname会导致dbname数据库的内容丢失,但是调用Mysql命令:SHOW DATABASES;的时候,还是看到dbname.因为dbname还存在系统表空间的字典表里。所以直接rm -r dbname不能安全地删除数据库的。
3.如果你在datadir/dbname下创建了一些文件(这些不是mysql创建的),那么调用DROP DATABASE dbname会返回错误。所以你需要先把不是mysql创建的文件删除,再调用DROP DATABASE dbname才是安全的删除。

创建表:CREATE TABLE tb;

每创建一个表都会在datadir/dbname目录下创建一个.frm文件,其中包含表结构的描述信息;而不同的存储引擎可能会添加不一样的文件。

innodb

innodb每创建一个表,都会在系统表空间的数据字典中存储表的信息;innodb会把表内容,就是表里面的数据,索引等存储在两个地方:

  • 系统表空间

    这种表空间是数据目录里的一个,或者多个大文件构成,默认情况下,innodb会把表内容存储到这个文件里面。

  • 独立表空间

    就是每一个表有自己的一个存储表内容的文件。这个文件是.ibd文件。

MYISAM

所有的Myisam表,都会在datadir/dbname目录下创建3个文件:
.frm:包含对表结构的描述;
.MYD:数据文件;
.MYI:索引文件;

MEMORY

memory表是一种内存表,它的表内容不存储在硬盘里,只存储在内存里。所以,如果你的机器重启了,那么你的memory表的内容就不风了。但是memory表还在,因为在datadir/dbname目录下,已经创建了.frm的文件。

创建视图:CREATE VIEW myView

datadir/dbname目录下,一个视图对应一个.frm文件,文件的名字与视图名字一样:myView.frm;文件包含了视图的结构等描述信息;

创建触发器:CREATE TRIGGER myTrig

datadir/dbname目录下,所有的触发器都存储在一个.TRG文件里。文件名与表名一样:dbname.TRG;

IT文库 » Mysql创建数据库时,发生了什么
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址