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

本文详细介绍了在MySQL中创建和删除数据库的过程,并解释了不同存储引擎(如InnoDB和MyISAM)如何处理数据和索引文件。此外,还探讨了创建表、视图和触发器时文件系统的具体变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建数据库: 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;

### MySQL 创建数据库的注意事项与最佳实践 在 MySQL创建数据库是一项基本而重要的任务,合理的规划和配置能够显著提升系统的可维护性和性能。以下是关于 MySQL 数据库创建过程中需要注意的事项以及一些最佳实践: #### 1. **命名规范** - 数据库名称应具有描述性并遵循统一的命名规则,便于识别其用途。通常建议使用小写字母、数字和下划线组合来定义名称[^1]。 - 避免使用特殊字符或保留关键字作为数据库名。 #### 2. **字符集与排序规则的选择** - 在创建数据库需指定合适的字符集(Character Set)和排序规则(Collation)。常用的字符集有 `utf8mb4` 和 `latin1`,其中 `utf8mb4` 支持更广泛的 Unicode 字符编码。 ```sql CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; ``` - 排序规则决定了字符串比较的行为方式,推荐默认使用 `_general_ci` 或者针对特定语言环境调整为更适合的选项。 #### 3. **权限控制** - 明确分配给用户的访问权限范围,在创建数据库的同考虑安全策略设置相应的 GRANT 权限语句。 ```sql GRANT ALL PRIVILEGES ON my_database.* TO 'username'@'localhost'; FLUSH PRIVILEGES; ``` #### 4. **存储引擎选择** - 虽然创建数据库本身不涉及具体表级存储引擎设定,但从全局角度出发仍要提前思考主要使用的存储引擎类型(InnoDB, MyISAM 等)[^1]。InnoDB 是事务支持型首选方案;MyISAM 则适用于读密集场景但缺乏外键约束功能。 #### 5. **备份机制建立** - 对于生产环境下新建的每一个重要业务相关联的新建DB实例都应当立即纳入定期自动增量/全量备份计划之中[^2]。利用诸如 mysqldump 工具完成初始迁移工作之后还需持续优化效率更高的复制同步架构部署如 Binlog 增量拉取等方式替代传统导出导入流程减少延迟影响正常运行间窗口期长度等问题发生概率及其严重程度评估分析过程记录存档留底备查之用。 #### 6. **监控与扩展能力预留** - 设计初期就考虑到未来可能的增长趋势,包括但不限于容量预估、分区技术运用等方面的内容安排好足够的冗余空间以便应对突发状况下的快速扩容需求。 --- ### 示例代码片段展示如何正确创建带参数的数据库 ```sql CREATE DATABASE IF NOT EXISTS sample_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 同步赋予某用户对该 DB 的完全操控权 GRANT ALL ON sample_db.* TO 'app_user'@'%'; FLUSH PRIVILEGES; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值