mysql数据上传的使用规则_必看的数据库使用规范
发布日期:2021-10-26 17:40:26 浏览次数:4 分类:技术文章

本文共 1762 字,大约阅读时间需要 5 分钟。

【强制】表和列的名称必须控制在32个字符以内,表名只能使用字母、数字和下划线,一律小写。

【强制】表名要求模块名强相关,同一模块使用的表名尽量使用统一前缀。

【强制】创建表时必须显式指定字符集为utf8或utf8mb4。

【强制】列名尽量不用关键字(如type,order等)。

【强制】创建表时必须显式指定表存储引擎类型,如无特殊需求,一律为InnoDB。

【强制】建表必须有comment。

【强制】对于超过100W行的大表进行alter table,必须经过DBA审核,并在业务低峰期执行,多个alter需整合在一起。

因为alter table会产生表锁,期间阻塞对于该表的所有写入,对于业务可能会产生极大影响。

【建议】建表时关于主键:表必须有主键

(1)强制要求主键为id,类型为int或bigint,且为auto_increment 建议使用unsigned无符号型。

(2)标识表里每一行主体的字段不要设为主键,建议设为其他字段如user_id,order_id等,并建立unique key索引。

因为如果设为主键且主键值为随机插入,则会导致innodb内部page分裂和大量随机I/O,性能下降。

【建议】核心表(如用户表)必须有行数据的创建时间字段create_time和最后更新时间字段update_time,便于查问题。

【建议】表中所有字段尽量都是NOT NULL属性,业务可以根据需要定义DEFAULT值。

因为使用NULL值会存在每一行都会占用额外存储空间、数据迁移容易出错、聚合函数计算结果偏差等问题。

【建议】中间表用于保留中间结果集,名称必须以tmp_ 开头。备份表用于备份或抓取源表快照,名称必须以bak_开头。中间表和备份表定期清理。

【示范】一个较为规范的建表语句:

CREATE TABLE user_info (

`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',

`user_id` bigint(11) NOT NULL COMMENT '用户id',

`username` varchar(45) NOT NULL COMMENT '真实姓名',

`email` varchar(30) NOT NULL COMMENT '用户邮箱',

`nickname` varchar(45) NOT NULL COMMENT '昵称',

`birthday` date NOT NULL COMMENT '生日',

`sex` tinyint(4) DEFAULT '0' COMMENT '性别',

`short_introduce` varchar(150) DEFAULT NULL COMMENT '一句话介绍自己,最多50个汉字',

`user_resume` varchar(300) NOT NULL COMMENT '用户提交的简历存放地址',

`user_register_ip` int NOT NULL COMMENT '用户注册时的源ip',

`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',

`user_review_status` tinyint NOT NULL COMMENT '用户资料审核状态,1为通过,2为审核中,3为未通过,4为还未提交审核',

PRIMARY KEY (`id`),

UNIQUE KEY `uniq_user_id` (`user_id`),

KEY `idx_username`(`username`),

KEY `idx_create_time_status`(`create_time`,`user_review_status`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='网站用户基本信息'

转载地址:https://blog.csdn.net/weixin_33952775/article/details/113597143 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mysql 备份不了了_mysql不能备份问题
下一篇:matlab的坐标是日期的显示范围_MATLAB图像处理:30:移动显示图像的X和Y坐标范围...

发表评论

最新留言

不错!
[***.144.177.141]2024年04月19日 21时15分42秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

【大话Java面试】-如何通俗易懂的理解Redis的分布式寻址算法hash slot? 2021-06-29
【大话Java面试】-如何通俗易懂的理解单例模式? 2021-06-29
【大话Java面试】请列出Java中几个常用的设计模式? 2021-06-29
【大话Java面试】-如何通俗易懂的理解Java异常以及Java异常处理? 2021-06-29
【大话Mysql面试】-Mysql的索引为什么要使用B+树,而不是B树,红黑树等之类? 2021-06-29
【大话Mysql面试】-如何通俗易懂的了解Mysql的索引最左前缀匹配原则 2021-06-29
【大话Mysql面试】-MYSQL的两种存储引擎MyISAM与InnoDB的区别是什么? 2021-06-29
【大话Mysql面试】-InnoDB可重复读隔离级别下如何避免幻读?MVCC和next-key是什么 2021-06-29
【大话Mysql面试】-Mysql如何恢复数据?如何进行主从复制?Binlog日志到底是什么? 2021-06-29
理解String.intern()和String类常量池疑难解析例子 2021-06-29
python flask打造前后端分离的口罩检测 2021-06-29
【大话Mysql面试】-MySQL基础知识 2021-06-29
【大话Mysql面试】-MySQL数据类型有哪些 2021-06-29
【大话Mysql面试】-MySQL数据引擎 2021-06-29
【大话Mysql面试】-常见SQL语句书写 2021-06-29
【大话Mysql面试】-SQL语句优化 2021-06-29
【大话Mysql面试】-Mysql事务以及隔离级别 2021-06-29
【大话Mysql面试】-Mysql索引 2021-06-29
【大话Mysql面试】-Mysql锁 2021-06-29
【大话Mysql面试】-Mysql常见面试题目 2021-06-29