Mysql学习经验总结(一)

server/2024/12/23 3:46:26/

Mysql的简介:

MySql是一个开源的关系型数据库管理系统,广泛应用于Web应用程序的数据存储和管理。它支持多用户并发访问,具有高性能、稳定可靠、易于使用和管理的特点。

MySql官网提供了详细的文档、下载、社区等资源,官网的地址为:MySQL

1、命名规范

数据库表名、字段名、索引名等等都遵循着命名的规范,命名的可读性要求要高,大家初学的时候都喜欢用拼音来起名,我们命名的时候尽量采用英文,采用驼峰命名或者下划线分割的方式,让人简知意。

反例:

表名:a,b,c
字段名:aa,bb,cc

正例:

表名:student,review,customers
字段名:student_id,review_name,customers_id

        表名、字段名必须使用小写字母,禁止使用数字开头,不要使用拼音,不要使用英文的缩写

2、选择合适的字段类型

设计表的时候,需要选择合适的字段类型,比如说:

        1、根据数据的类型选择字段类型:

                整数型数据可以使用int或者bigint类型、浮点数据可以用float或者double类型、字符型数据可以使用varchar或者char类型

        2、考虑数据的长度:

                如果某个字段的数据长度不会超过10个字符,则可以使用char(10)类型来代替varchar(50)类型,以节省空间。如果存储的值太大,建议字段类型修改text,同时抽出单独一张表,然后再单独抽出一张表,并用主键相互连接。

        3、注意精度和小数位数:

                对于需要精确数值计算的字段(余额、百分比等等),应该选择带有精度和小数位数的字段类型(如decimal)

        4、考虑数据完整性:字段类型也应该考虑到数据的完整性:

                日期型数据应该使用date和datetime类型,以确保输入的日期格式正确。

3、主键设计要合理

        主键的设计在数据库中非常重要,它用于唯一标识表中的每一行数据(也就是可以通过主键来确定行的位置),并且在数据的操作和查询中起到关键的作用。

        通常主键的设计,不要与业务相关联,因为业务是会发生变化的,应当使用自增的id,并且保持主键的连续性。(正常使用的有:自增ID、UUID、或者是雪花ID)

4、选择合适的字段长度

问:数据库中的字段长度表示字符长度还是字节长度?

注:

        1、字符长度就是字符串包含多少个字符,如String str = “hello”,字符有h,e,l,l,o一共5个字符,所以字符个数为5个。

        2、字节长度是变量在内存中占有的空间大小,如int类型占4字节,long类型占8字节等等,并且1字节(byte)=8比特(bit)

        需要注意的是:UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。但是,一个英文字母或者是一个中文汉字 都可以用一个字符的长度来装。

答:再mysql中,varchar和char类型表示字符的长度,而其他类型表示的是字节的长度。

        char(10)表示字符的长度是10。bigint(4)表示显示长度是4个字节,但是因为bigint实际长度是8个字节,所以bigint(4)的实际长度就是8个字节。

所以再设计表时需要考虑一个字段的长度,比如一个用户名字字段(它的长度是5~20个字符),你觉得应该设置多长呢?可以考虑设置为varchar(32).需要注意字段的长度一般设置为2的n次方 如:8、16、32

5、优先考虑逻辑删除,而不是物理删除

什么是物理删除、什么是逻辑删除?

        物理删除:把数据从硬盘中删除

        逻辑删除:可以在你的表中单独添加一列名为is_deleted,用来标记该数据是否可以被前端使用。例如:我在前端注销一个账户,那么就对应将表中的该行数据中的is_deleted字段设置为0或者1,来表示该数据是否可用。

为什么推荐逻辑删除,不推荐物理删除:

        数据的恢复困难、物理删除会导致索引数重构。

6、每个表都最好添加通用字段

        id:主键,一个表必须得有主键,必须!!!

        create_time:创建时间

        creator:创建人

        update_time:修改时间,必须,更新记录时,需要更新它

        update_by:修改人,非必须

        remark:数据的记录备注,非必须

7、控制表中的字段数量

建表的时候一张表的字段就不要过多了。尽量不要超过20个。超出的话要考虑如何拆分,也就是通常表——详情表

        查询效率:当表中保存的数据量很大的时候,查询操作需要检索的数据也会随之增加。如果表的字段数量过多,查询的操作就需要读取更多的数据,这回导致查询的效率变慢。

        数据库设计的复杂性:当表的字段过多的时候,数据库的设计和维护变得更加复杂。

8、MySQL 字段属性应该尽量设置为 NOT NULL

        如果没有特殊的理由,一般建议将字段定义为not null

原因:

        1、节省空间:当字段不需要存储任何东西时,“”是不占用空间的,但是null其实是占用空间的,null就是什么都没有,连\0都没有,\0在字符串中是结束符(因为mysql的底层是由C++实现的),但是在物理内存是占空间的,等于一个字节,而null就是连这一个字节都没有。

        2、对null处理比较麻烦【不能用=null来查询数据,需要用is null 】:对null处理的时候只能用is null或者is not null,而不能采用+、in、<、>、!=、这些操作符号。比如:要查询:where name != “havename”,如果存在name为null的值的记录,那么查询的结果中就不会包含name为null值的记录。

如果将字段默认设置成一个空的字符串或者常量值并没有什么不同,且都不会影响到引用逻辑,那就可以将这个字段设置为not null。


http://www.ppmy.cn/server/46867.html

相关文章

React@16.x(12)ref 转发-forwardRef

目录 1&#xff0c;介绍2&#xff0c;类组件如何使用4&#xff0c;应用场景-高阶组件HOC 1&#xff0c;介绍 上篇文章中提到&#xff0c;ref 只能对类组件使用&#xff0c;不能对函数组件使用。 而 ref 转发可以对函数组件实现类似的功能。 使用举例&#xff1a; import Re…

MFC工控项目实例之二添加iPlotx控件

承接专栏《MFC工控项目实例之一主菜单制作》 在WIN10下使用Visual C 6.0 &#xff08;完整绿色版&#xff09;添加iPlotx控件的方法。 1、在资源主对话框界面点击鼠标右键如图选择插入Active控件点击进入。 2、选择iPlotx Contrlolh点击确定。 3、在对话框界面插入iPlotx控件。…

【ECMAScript 详解:现代 JavaScript 的核心】

ECMAScript 详解 ECMAScript 是 JavaScript 的官方标准&#xff0c;它定义了 JavaScript 的核心语法和功能。在这篇文章中&#xff0c;我们将深入探讨 ECMAScript 的各个方面&#xff0c;包括历史背景、语言特性、新功能和未来发展趋势。 目录 介绍 什么是 ECMAScript&#x…

linux 查看 线程名, 线程数

ps -T -p 3652 ps H -T <PID> ps -eLf | grep process_name top -H -p <pid> 查看进程创建的所有线程_ps 显示一个进程的所有线程名字-CSDN博客

使用Bash脚本确保定时任务的单例执行

简介&#xff1a; 在Linux系统中&#xff0c;定时任务是自动化运维的重要组成部分。然而&#xff0c;有时候我们可能需要确保某个定时任务在任何给定时间点只运行一次&#xff0c;以避免资源冲突或数据不一致。本文将介绍如何使用Bash脚本和文件锁来实现单例定时任务。 什么是…

轻松拿捏C语言——【文件操作】

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f389;创作不易&#xff0c;请多多支持&#x1f389; &#x1f308;感谢大家的阅读、点赞、收藏和关注&#x1f495; &#x1f339;如有问题&#xff0c;欢迎指正 目录 &#x1f…

JVM双亲委派模型

在之前的JVM类加载器篇中说过&#xff0c;各个类加载器都有自己加载的范围&#xff0c;比如引导类加载器只加载Java核心库中的class如String&#xff0c;那如果用户自己建一个包名和类名与String相同的类&#xff0c;会不会被引导类加载器加载。可以通过如下代码测试&#xff0…

【文末附gpt升级秘笈】OpenAI的治理结构

OpenAI的治理结构具有其独特性和复杂性&#xff0c;以下是关于其治理结构的详细描述&#xff1a; 组织形态&#xff1a; OpenAI成立于2015年&#xff0c;是一家美国人工智能研究公司&#xff0c;旨在实现安全的通用人工智能&#xff08;AGI&#xff09;并让其有益于人类。组织…