MySQL建表的规范总结
MySQL数据库设计规范(仅供参考)

MySQL数据库设计规范(仅供参考)MySQL数据库设计规范(仅供参考)⽬录1. 规范背景与⽬的2. 设计规范2.1 数据库设计2.1.1 库名2.1.2 表结构2.1.3 列数据类型优化2.1.4 索引设计2.1.5 分库分表、分区表2.1.6 字符集2.1.7 程序DAO层设计建议2.1.8 ⼀个规范的建表语句⽰例2.2 SQL编写2.2.1 DML语句2.2.2 多表连接2.2.3 事务2.2.4 排序和分组2.2.5 线上禁⽌使⽤的SQL语句1. 规范背景与⽬的MySQL数据库与 Oracle、 SQL Server 等数据库相⽐,有其内核上的优势与劣势。
我们在使⽤MySQL数据库的时候需要遵循⼀定规范,扬长避短。
本规范旨在帮助或指导RD、QA、OP等技术⼈员做出适合线上业务的数据库设计。
在数据库变更和处理流程、数据库表设计、SQL编写等⽅⾯予以规范,从⽽为公司业务系统稳定、健康地运⾏提供保障。
2. 设计规范2.1 数据库设计以下所有规范会按照【⾼危】、【强制】、【建议】三个级别进⾏标注,遵守优先级从⾼到低。
对于不满⾜【⾼危】和【强制】两个级别的设计,DBA会强制打回要求修改。
2.1.1 库名1. 【强制】库的名称必须控制在32个字符以内,相关模块的表名与表名之间尽量提现join的关系,如user表和user_login表。
2. 【强制】库的名称格式:业务系统名称_⼦系统名,同⼀模块使⽤的表名尽量使⽤统⼀前缀。
3. 【强制】⼀般分库名称命名格式是库通配名_编号,编号从0开始递增,⽐如wenda_001以时间进⾏分库的名称格式是“库通配名_时间”4. 【强制】创建数据库时必须显式指定字符集,并且字符集只能是utf8或者utf8mb4。
创建数据库SQL举例:create database db1 defaultcharacter set utf8;。
2.1.2 表结构1. 【强制】表和列的名称必须控制在32个字符以内,表名只能使⽤字母、数字和下划线,⼀律⼩写。
mysql数据库设计总结

mysql数据库设计总结设计一个高效的MySQL数据库需要考虑许多因素,包括数据结构、索引、查询优化、存储引擎选择、安全性等。
以下是一些关键的MySQL数据库设计总结:1. 需求分析:在开始设计之前,理解应用程序的需求是至关重要的。
这包括处理的数据类型、查询需求、性能要求、安全性需求等。
2. 数据结构:设计合适的数据表结构,包括选择合适的数据类型,考虑是否需要使用枚举或集合类型。
规范化:确保数据完整性和减少数据冗余。
3. 索引:索引是提高查询性能的关键。
为经常用于搜索、排序和连接的列创建索引。
避免过度索引,因为它们会增加写操作的负担。
4. 查询优化:优化查询语句,避免全表扫描。
使用`EXPLAIN`来查看查询的执行计划。
5. 存储引擎:根据需求选择合适的存储引擎,如InnoDB或MyISAM。
InnoDB支持事务处理和行级锁定,而MyISAM可能在某些读密集型场景中表现更好。
6. 安全性:限制对数据库的访问,只允许必要的用户和应用程序访问。
使用强密码,并定期更改。
定期备份数据。
7. 备份与恢复:设计一个可靠的备份策略,以防数据丢失。
了解如何从备份中恢复数据。
8. 监控和维护:使用工具监控数据库性能,如`MySQLTuner`。
定期维护数据库,如优化表(`OPTIMIZE TABLE`)和修复表(`REPAIR TABLE`)。
9. 扩展性:设计数据库时考虑到未来的扩展性,如分区、分片或读写分离。
10. 文档化:为数据库设计、表结构、索引和其他关键决策编写文档,以便于未来的维护和理解。
11. 测试:在实际部署之前,在测试环境中对数据库进行彻底的测试,确保其性能和稳定性满足要求。
12. 使用数据库管理工具:如Navicat, DBeaver, Workbench等工具可以帮助更高效地管理MySQL数据库。
13. 考虑使用缓存:如Redis或Memcached,以减少对数据库的直接访问,特别是在读密集型场景中。
数据库表设计的注意事项与规范

数据库表设计的注意事项与规范在进行数据库表设计时,注意事项与规范起着关键的作用。
一个合理的数据库表设计可以提高数据库的性能,减少数据冗余以及确保数据的完整性和一致性。
下面是数据库表设计的一些注意事项与规范,帮助您设计出高效、可靠的数据库表。
1. 选择合适的数据类型:在设计表时,选择合适的数据类型是非常重要的。
不仅要满足数据的实际需求,还要考虑数据存储的效率和性能。
对于字符型数据,使用合适的长度,并使用字符集和校对规则。
对于数字型数据,选择合适的整数或小数类型。
2. 设计主键和唯一键:每个表都需要一个主键来唯一标识每一行数据。
设计主键时,可以选择自增主键,也可以选择主键由业务逻辑生成。
此外,对于需要保证数据唯一性的列,也可以设计唯一键来加强数据完整性。
3. 设置外键关联:在多个表之间建立关联是数据库设计的重要方面。
使用外键可以确保数据的一致性和完整性。
在设计外键时,需要考虑引用完整性,避免删除或修改被引用表中的数据时产生冲突。
4. 避免数据冗余:数据冗余会影响数据库的性能和占用存储空间。
在设计表结构时,要尽量避免数据冗余。
可以通过合理拆分数据表、使用关联查询等方式减少冗余数据,并通过索引优化查询性能。
5. 正确使用索引:索引可以加快数据库的查询速度,但过多或错误的使用索引也会影响性能。
在设计表时,需要根据查询需求选择合适的索引字段。
常用的索引类型包括主键索引、唯一索引和普通索引等。
6. 规范字段命名:在设计数据库表时,需要规范字段命名,以方便理解和维护。
字段名应该具有描述性,并且尽量避免使用缩写和特殊字符。
此外,字段名不应该与数据库关键字冲突。
7. 设计适当的表关系:在建立表之间的关系时,需要设计适当的表关系来满足业务需求。
常用的表关系包括一对一、一对多和多对多关系。
根据业务需求,选择合适的关系类型,并使用外键建立关系。
8. 设计复合索引:当多个字段联合查询时,可以考虑设计复合索引。
复合索引可以提高联合查询的性能,减少扫描数据的次数。
mysql数据表设计原则

mysql数据表设计原则Mysql是一种开源的关系型数据库管理系统,它广泛应用于各种网站和应用程序中。
在使用Mysql时,数据表设计是非常重要的一部分。
本文将介绍mysql数据表设计的原则。
一、概述1.1 数据库设计的重要性数据库设计是任何软件开发项目的关键步骤之一。
一个良好的数据库设计可以提高数据存储和检索效率,降低维护成本和风险,并使系统更加灵活和可扩展。
1.2 数据表设计原则在mysql中,数据表设计需要遵循一些基本原则。
这些原则包括:规范化、简洁性、可读性、可扩展性、可维护性等。
二、规范化2.1 什么是规范化?规范化是指将一个复杂的数据结构分解成多个简单的结构,并通过关系连接来实现对这些结构的访问。
规范化可以消除冗余信息,并确保每个数据项只在一个地方存储,从而提高了数据存储和检索效率。
2.2 规范化级别mysql支持三个规范化级别:第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
通常情况下,我们应该尽可能地满足第三范式。
2.3 规范化的优点规范化可以提高数据存储和检索效率,降低维护成本和风险,并使系统更加灵活和可扩展。
同时,规范化还可以减少数据冗余,提高数据的一致性和完整性。
三、简洁性3.1 什么是简洁性?简洁性是指数据表设计应该尽可能地简单明了,避免不必要的复杂性。
在mysql中,一个简单的数据表通常比一个复杂的数据表更易于维护和管理。
3.2 如何实现简洁性?实现简洁性需要注意以下几点:(1)避免过度设计。
只需创建必要的字段和索引即可。
(2)避免使用过多的触发器、存储过程等数据库对象。
(3)避免使用过多的外键关系。
外键关系可以增加数据一致性,但也会增加查询时间和写入时间。
四、可读性4.1 什么是可读性?可读性是指数据表设计应该易于理解和阅读。
在mysql中,一个易于理解和阅读的数据表可以提高开发效率,并降低出错率。
4.2 如何实现可读性?实现可读性需要注意以下几点:(1)使用有意义的字段名。
mysql建表规范

mysql建表规范在MySQL中建表时,遵循一定的规范是非常重要的,可以提高数据库的性能和可维护性。
以下是一些常见的MySQL建表规范建议。
1. 使用有意义的表名:表名应反映表的内容和含义,避免使用无意义的缩写或简写。
2. 使用小写字母和下划线:表名、列名和其他对象名都应该使用小写字母和下划线的组合,这样有助于代码的可读性和可维护性。
3. 使用具有复数意义的表名:如果表存储的是多个实体对象,应该使用复数形式的表名来表示。
4. 使用主键:每个表都应该有一个主键来唯一标识每一行数据。
主键可以是单列或多列的组合。
5. 主键选择:选择适合的主键类型,可以是整数类型(如INT、BIGINT)或字符串类型(如VARCHAR)。
对于自增主键,可以使用AUTO_INCREMENT。
6. 不要使用保留字:避免使用MySQL的保留字作为表名、列名等对象名,以免引起语法错误。
7. 使用适当的数据类型:选择合适的数据类型来存储数据,避免浪费存储空间和降低性能。
例如,存储整数使用整数类型,存储日期和时间使用日期和时间类型。
8. 使用约束保证数据的完整性:使用约束(如NOT NULL、UNIQUE、FOREIGN KEY等)来确保数据的完整性,避免无效或重复的数据。
9. 添加索引:根据查询的需求和频率,添加索引以加快数据的检索速度。
但是,也要注意不要过度索引,以免降低插入和更新操作的性能。
10. 使用适当的引擎:根据需求选择适当的存储引擎,如InnoDB、MyISAM等。
每种引擎都有其特点和适用场景。
11. 正规化数据:对于大型数据库,使用正规化的数据结构可以避免数据冗余和更新异常,提高数据的一致性和维护性。
12. 给表和列命名:使用具有描述性的命名来提高代码的可读性和可维护性。
避免使用无意义的缩写和不规范的命名。
13. 使用备注:为表、列和其他对象添加注释,这样可以方便他人理解和维护代码。
14. 考虑数据的增长:在设计表结构时,要考虑到数据的增长,以免出现性能瓶颈或扩展困难。
mysql数据库名,表名,列名大小写敏感规则

mysql数据库名,表名,列名大小写敏感规则MySQL是一种开源的关系型数据库管理系统,它支持多种操作系统,并且广泛用于Web应用程序的开发中。
在MySQL中,数据库名、表名以及列名的大小写敏感规则对于开发人员来说非常重要。
首先,MySQL区分大小写是有规则的。
这意味着如果在创建数据库、表或列时使用不同的大小写形式,MySQL将会将它们视为不同的对象。
例如,创建一个名为"MyDatabase"的数据库和一个名为"mydatabase"的数据库将被视为两个不同的数据库。
在Windows操作系统中,默认情况下,MySQL是不区分大小写的。
这意味着在创建数据库、表或列时,不论使用何种大小写形式,MySQL都会将它们视为相同的对象。
例如,创建一个名为"MyDatabase"的数据库和一个名为"mydatabase"的数据库将被视为同一个数据库。
然而,在Linux和Unix操作系统中,MySQL是区分大小写的。
这意味着在创建数据库、表或列时,不同的大小写形式会被视为不同的对象。
例如,在Linux和Unix操作系统中,创建一个名为"MyDatabase"的数据库和一个名为"mydatabase"的数据库将被视为两个不同的数据库。
虽然在Windows中默认情况下不区分大小写,在Linux和Unix操作系统中区分大小写,但MySQL提供了一个配置选项来控制是否区分大小写。
这个选项被称为"lower_case_table_names",它有三个可能的值:0、1、2。
当"lower_case_table_names"的值为0时,MySQL将严格区分大小写,并将创建的数据库、表和列视为区分大小写的对象。
当"lower_case_table_names"的值为1时,MySQL将将创建的数据库、表和列视为不区分大小写的对象。
mysql表设计原则和三大范式

mysql表设计原则和三大范式
一、MySQL表设计原则
1、数据表应该有一个主键,主键必须是唯一可标识每行数据的。
2、应尽可能使用自然标识而不是系统生成的标识,如id、seria_no等。
3、字段提供前后文命名服务。
4、应不使用null,尤其是关系表的主键字段不推荐使用null。
5、不要过度设计数据表,一个数据表尽可能包含相关信息。
6、有选择地使用索引,以便提高查询的效率。
7、应避免删除表,如有必要可以加入删除字段instead of DROP TABLE
8、应使用自动增长的字段
二、三大范式
第一范式(1NF):字段是原子性的,没有任何子字段,也不能有任何一个字段有多值,例如A表中有个字段叫GoodsItems,这个字段是用来存放商品信息的,但是会有多个商品的情况,这样就说明GoodsItems字段不满足1NF了,它要被拆分成多个字段,例如GoodsItems_1、GoodsItems_2
第二范式(2NF):字段无重复,也称去冗余范式,即一个表中不能存在相同的字段,例如一张表中有两个字段叫num,同时也不能存在冗余字段
第三范式(3NF):字段独立,字段不能存在耦合,即不能如:A表中有两个字段叫age,name,其中age存放的是name字段对应的年龄信息,这样就说明字段name和age不满足3NF了,要把这两个字段分别放在不同的表中。
mysql列名规则

mysql列名规则MySQL是一种关系型数据库管理系统,它的列名规则是非常重要的。
在MySQL中,列名是用来标识表中的每一列的名称。
在这篇文章中,我们将会详细介绍MySQL列名规则。
1. 列名长度MySQL列名的长度不能超过64个字符。
这是因为MySQL使用UTF-8编码,每个字符占用3个字节,所以最多只能有64/3=21个字符。
2. 列名字符集MySQL支持多种字符集,包括ASCII、UTF-8、GBK等。
在创建表时,需要指定列名的字符集。
如果不指定,默认使用数据库的字符集。
3. 列名命名规则MySQL列名可以包含字母、数字和下划线,但必须以字母开头。
列名不区分大小写,但建议使用小写字母,这样可以避免与MySQL 关键字冲突。
4. 列名命名规范为了方便管理和维护,建议遵循以下列名命名规范:(1)使用有意义的列名,能够清晰地表达列的含义。
(2)避免使用缩写和简写,这样可以避免歧义。
(3)使用下划线分隔单词,这样可以提高可读性。
(4)避免使用MySQL关键字作为列名,否则会导致语法错误。
(5)避免使用特殊字符,如空格、逗号、点等。
5. 列名命名示例下面是一些列名命名示例:(1)user_id:表示用户ID。
(2)user_name:表示用户名。
(3)create_time:表示创建时间。
(4)update_time:表示更新时间。
(5)is_deleted:表示是否删除。
总结MySQL列名规则是非常重要的,它能够影响到数据库的性能和可维护性。
在创建表时,需要遵循列名长度、字符集、命名规则和命名规范等规则。
只有遵循这些规则,才能够创建出高效、可维护的数据库。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Mysql建表与索引使用规范整理
一,设计表规范:
1. MySQL建表,字段需设置为非空,需设置字段默认值。
2. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL。
3. MySQL建表,如果字段等价于外键,应在该字段加索引。
4. MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否默认值,需保持一致,否则无法正确使用索引进行关联对比。
5. MySQL使用时,一条SQL语句只能使用一个表的一个索引。
所有的字段类型都可以索引,多列索引的属性最多15个。
6. 如果可以在多个索引中进行选择,MySQL通常使用找到最少行的索引,索引唯一值最高的索引。
7. 建立索引index(part1,part2,part3),相当于建立了index(part1),index(part1,part2)和index(part1,part2,part3)三个索引。
8. MySQL针对like语法必须如下格式才使用索引:
SELECT * FROM t1 WHERE key_col LIKE ‘ab%’ ;
9. SELECT COUNT(*) 语法在没有where条件的语句中执行效率没有SELECT
COUNT(col_name)快,但是在有where条件的语句中执行效率要快。
10. 在where条件中多个and的条件中,必须都是一个多列索引的key_part属性而且必须包含key_part1。
各自单一索引的话,只使用遍历最少行的那个索引。
11. 在where条件中多个or的条件中,每一个条件,都必须是一个有效索引。
12. ORDER BY 后面的条件必须是同一索引的属性,排序顺序必须一致(比如都是升序或都是降序)。
13. 所有GROUP BY列引用同一索引的属性,并且索引必须是按顺序保存其关键字的。
14.、JOIN 索引,所有匹配ON和where的字段应建立合适的索引。
15. 对智能的扫描全表使用FORCE INDEX告知MySQL,使用索引效率更高。
16. 定期ANALYZE TABLE tbl_name为扫描的表更新关键字分布。
17. 定期使用慢日志检查语句,执行explain,分析可能改进的索引。
18. 条件允许的话,设置较大的key_buffer_size和query_cache_size的值(全局参数),和sort_buffer_size的值(session变量,建议不要超过4M)。
二,命名规范:
1.主键的命名采用如下规则:
主键名用pk_开头,后面跟该主键所在的表名。
主键名长度不能超过30个字符。
如果过长,可对表名进行缩写。
缩写规则同表名的缩写规则。
主键名用小写的英文单词来表示。
2.外键的命名采用如下规则:
外键名用fk_开头,后面跟该外键所在的表名和对应的主表名(不含t_)。
子表名和父表名自己用下划线(_)分隔。
外键名长度不能超过30个字符。
如果过长,可对表名进行缩写。
缩写规则同表名的缩写规则。
外键名用小写的英文单词来表示。
3.索引的命名采用如下规则:
1)索引名用小写的英文字母和数字表示。
索引名的长度不能超过30个字符。
2)主键对应的索引和主键同名。
3)唯一性索引用uni_开头,后面跟表名。
一般性索引用ind_开头,后面跟表名。
4)如果索引长度过长,可对表名进行缩写。
缩写规则同表名的缩写规则
5)索引基本语法
CREATE INDEX 索引名称ON 表名(字段);
show index from 表名;
drop index 索引名称on 表名;
6)唯一值越多的字段,使用索引的效果越好。
设置联合索引时,唯一值越多的,越应该放在“左侧”。
三,SQL语句优化规范:
1. 使用mysql explain 对sql执行效率进行检测,explain显示了mysql如何使用索引来处理select语句以及连接表。
可以帮助选择更好的索引和写出更优化的查询语句。
1) 使用方法:在select语句前加上explain即可
2) explain 分析结果形式如下:
table | type | possible_keys | key | key_len | ref | rows | Extra
explain 分析结果形式中各属性含义:
table :显示这一行的数据是关于哪张表的
type :这是重要的列,显示连接使用了何种类型。
从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
possible_keys :显示可能应用在这张表中的索引。
如果为空,没有可能的索引。
可以为相关的域从WHERE语句中选择一个合适的语句
key :实际使用的索引。
如果为NULL,则没有使用索引。
很少的情况下,MYSQL会选择优化不足的索引。
这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
key_len:使用的索引的长度。
在不损失精确性的情况下,长度越短越好
ref:显示索引的哪一列被使用了,如果可能的话,是一个常数
rows:MYSQL认为必须检查的用来返回请求数据的行数
Extra :返回的描述的意义
2. 尽量使用"inner join " 查询替换子查询条件中的"in " ,防止由于数据量过大,引发数据库挂起问题
3.使用索引应注意问题:
1)查询语句的where条件后边使用“!=”或“<>”时,索引不生效,和普通字段一样
2)查询语句的where条件后边使用字符串函数或其他函数,索引不生效,和普通字段一样3)使用连接(join)查询时,只有在主键和外键的数据类型相同时索引才会生效
4)查询语句的where条件后边使用Like关键字应注意,like '%jx%' 和like '%jx'方式索引均不生效,like 'jx%'方式索引生效
5)InnoDB数据表不支持全文索引。