本帖最后由 镖师 于 2023-7-12 15:20 编辑
拓展1:阿里巴巴《Java开发手册》之MySQL字段命名
-
【强制 】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。
- 正例:aliyun_admin,rdc_config,level3_name
- 反例:AliyunAdmin,rdcConfig,level_3_name
-
【强制 】禁用保留字,如 desc、range、match、delayed 等,请参考 MySQL 官方保留字。
-
【强制 】表必备三字段:id, gmt_create, gmt_modified。
- 说明:其中 id 必为主键,类型为BIGINT UNSIGNED、单表时自增、步长为 1。gmt_create, gmt_modified 的类型均为 DATETIME 类型,前者现在时表示主动式创建,后者过去分词表示被动式更新
-
【推荐 】表的命名最好是遵循 “业务名称_表的作用”。
- 正例:alipay_task 、 force_project、 trade_config
-
【推荐 】库名与应用名称尽量一致。
-
【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。
拓展2:如何理解清空表、删除表等操作需谨慎?!
表删除 操作将把表的定义和表中的数据一起删除,并且MySQL在执行删除操作时,不会有任何的确认信息提示,因此执行删除操作时应当慎重。在删除表前,最好对表中的数据进行备份 ,这样当操作失误时可以对数据进行恢复,以免造成无法挽回的后果。
同样的,在使用ALTER TABLE 进行表的基本修改操作时,在执行操作过程之前,也应该确保对数据进行完整的备份 ,因为数据库的改变是无法撤销 的,如果添加了一个不需要的字段,可以将其删除;相同的,如果删除了一个需要的列,该列下面的所有数据都将会丢失。
拓展3:MySQL8新特性—DDL的原子化
在MySQL 8.0版本中,InnoDB表的DDL支持事务完整性,即DDL操作要么成功要么回滚 。DDL操作回滚日志写入到data dictionary数据字典表mysql.innodb_ddl_log(该表是隐藏的表,通过show tables无法看到)中,用于回滚操作。通过设置参数,可将DDL操作日志打印输出到MySQL错误日志中。
分别在 MySQL5.7 和 MySQL8.0 中创建数据库和表:
create database mytest;
use mytest;
create table book1(
book_id INT,
book_name varchar(255)
);
show tables;
(1) 在5.7中,测试步骤:
删除数据表book1和数据表book2(注意,book2并不存在)
drop table book1, book2;
执行后,因为没有book2,报错,但是你会看到 book1 不存在了;
(2) 在8.0中,测试和 1 一样,你会发现,book1 还存在;
DDL的原子化 的意思就是:执行DDL回滚因为存在事务,事务的特点是,事务是一个整体,要么成功、要么失败,不可分割,这种不可分割的特性就叫做原子性;
|