40
社区成员




MySQL是一款广泛应用于中小型网站的数据库管理系统,属于关系型数据库。它由瑞典MySQL AB公司开发,后被甲骨文公司收购。
MySQL具有以下几个特点:
开源免费:用户可以免费使用和修改MySQL源代码。
跨平台:支持多种操作系统,如Windows、Linux、macOS等。
易用性:MySQL提供了丰富的命令和函数,方便用户进行数据库操作。
高性能:查询速度快,支持多种存储引擎,可根据需求选择合适的引擎。
数据库设计的三大范式是关系数据库设计的基本原则,它们旨在减少数据冗余和依赖,从而提高数据的一致性和完整性。以下是三大范式的详细说明:
第一范式要求表格中的所有字段都是原子性的,也就是说,每个字段只包含最小的数据单位,不可再分。具体要求如下:
每一列都是不可再分的数据项,确保数据的原子性。
每一行都要有唯一性,通常通过设置主键来实现。
表中不能有重复的行。
例如,如果一个表中的某一列包含了地址信息,而地址信息又可以分为街道、城市、国家等,那么这个表就不满足第一范式。
第二范式在第一范式的基础上,要求表中的所有非主属性完全依赖于主键。也就是说,表中的每一列都必须直接依赖于主键,而不是依赖于主键的一部分。为了满足第二范式,通常需要以下步骤:
满足第一范式。
确保表有一个主键。
非主属性必须完全依赖于主键,而不是部分依赖。
如果一个表中的主键是由多个列组成的复合主键,并且表中有一些列只依赖于主键的一部分,那么这个表就不满足第二范式。
第三范式在第二范式的基础上进一步减少数据冗余,要求表中的所有字段不仅直接依赖于主键,而且不存在传递依赖,即不依赖于其他非主属性。具体要求如下:
满足第二范式。
表中不存在非主属性对主属性的非直接依赖。
表中不存在非主属性对非主属性的传递依赖。
例如,如果一个表中有一个订单号(主键),客户编号(非主属性),客户姓名(依赖于客户编号),那么客户姓名对订单号就是传递依赖,不满足第三范式。
三大范式为数据库设计提供了一套逐步严格的规则,通过遵循这些范式,可以设计出结构合理、冗余度低、易于维护的数据库。但是,在实际应用中,为了性能优化,有时会故意违反某些范式,进行适当的冗余设计。因此,设计数据库时,需要根据实际需求和场景来平衡范式规则和性能考量。
下载MySQL安装包:访问MySQL官方网站,直接百度搜索进他官网,选择合适的版本(建议用8.0)进行下载。
安装MySQL:根据操作系统,按照安装向导的提示完成安装。安装过程中,请记住设置的root用户密码,后续将使用该密码登录MySQL,还有,装好Workbench,比你用命令行好用多了,至于教程里没提到的,可以不装。
验证安装:在命令行输入以下命令,如果出现MySQL版本信息,说明安装成功。
mysql --version
数据库中的数据类型定义了数据在数据库中的存储格式。不同的数据库管理系统(DBMS)支持不同的数据类型,但以下是一些常见的数据类型。这个做到心里有数就好,不用背,会查就行。
我不会在本文提SQL语句,因为除非你真的要玩数据库,否则没必要专门学,大不了问AI,目的是开发,而不是考试。
整数类型是数据库中用于存储没有小数部分的数值的数据类型。它们通常用于表示数量、计数、序列号等不需要小数精度的数值。
数据类型 | 存储大小 | 范围/说明 |
---|---|---|
整数类型 | ||
TINYINT | 1 字节 | -128 到 127(有符号),0 到 255(无符号) |
SMALLINT | 2 字节 | -32,768 到 32,767(有符号),0 到 65,535(无符号) |
MEDIUMINT | 3 字节 | -8,388,608 到 8,388,607(有符号),0 到 16,777,215(无符号) |
INT / INTEGER | 4 字节 | -2,147,483,648 到 2,147,483,647(有符号),0 到 4,294,967,295(无符号) |
BIGINT | 8 字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(有符号),0 到 18,446,744,073,709,551,615(无符号) |
使用整数类型时,应考虑以下因素:
选择适合数据范围的类型,以避免浪费存储空间。
如果确定数据不会是负数,使用UNSIGNED
属性可以增加可存储的最大值。
ZEROFILL
主要用于显示目的,不改变数值本身。
整数类型可以进行算术运算,因此对于需要计算的字段,使用整数类型可以提高性能。
浮点类型是数据库和编程语言中用于存储带有小数部分的数值的数据类型。浮点数可以表示非常大或非常小的数值,并且可以包含小数点后的精度。
数据类型 | 存储大小 | 范围/说明 |
---|---|---|
浮点类型 | ||
FLOAT | 4 字节 | 精确到小数点后大约 7 位数字,用于一般用途的浮点数计算 |
DOUBLE | 8 字节 | 精确到小数点后大约 15 位数字,提供比 FLOAT 更高的精度 |
DECIMAL / NUMERIC | 可变长度 | 用户定义精度(小数点前后位数),用于金融计算和高精度数值 |
选择使用哪种浮点数类型时,需要考虑以下因素:
数据的精度要求。
数据的范围。
存储空间的考虑。
性能需求,因为 DECIMAL
的计算通常比 FLOAT
和 DOUBLE
慢。
字符串类型是数据库中用于存储文本数据的数据类型。它们可以用来保存各种文本信息,如姓名、地址、描述等。不同的数据库管理系统提供了不同类型的字符串数据类型。
数据类型 | 存储大小 | 范围/说明 |
---|---|---|
字符串类型 | ||
CHAR | 固定长度,最大 255 字符 | 存储固定长度的字符串,不足部分用空格填充,适用于固定长度的数据如邮政编码 |
VARCHAR | 可变长度,最大 255 字符(MySQL 中最大 65,535 字符) | 存储可变长度的字符串,比 CHAR 更节省空间,适用于可变长度的数据如姓名 |
TEXT | 可变长度,最大 65,535 字符 | 存储长文本数据,适用于文章、描述等长文本信息 |
MEDIUMTEXT | 可变长度,最大 16,777,215 字符 | 类似于 TEXT,但存储容量更大,适用于更长的文本数据 |
LONGTEXT | 可变长度,最大 4,294,967,295 字符 | 类似于 TEXT 和 MEDIUMTEXT,但存储容量最大,适用于极长的文本数据 |
选择使用哪种字符串类型时,需要考虑以下因素:
数据的长度和类型。
是否需要预先定义值。
是否需要存储二进制数据。
性能需求,因为长文本类型可能会影响查询性能。
日期和时间类型是数据库中用于存储日期和/或时间的特定数据类型。这些类型允许开发者以标准化的方式处理时间信息,从而确保数据的一致性和准确性。
数据类型 | 存储大小 | 范围/说明 |
---|---|---|
日期和时间类型 | ||
DATE | 3 字节 | 存储日期,格式为 YYYY-MM-DD,适用于日期信息如出生日期 |
TIME | 3 字节 | 存储时间,格式为 HH:MM:SS,适用于时间信息如会议时间 |
DATETIME | 8 字节 | 存储日期和时间,格式为 YYYY-MM-DD HH:MM:SS,适用于同时包含日期和时间的信息 |
TIMESTAMP | 4 字节 | 存储时间戳,通常表示自 Unix 纪元(1970-01-01 00:00:00 UTC)以来的秒数,适用于记录时间戳信息 |
在MySQL数据库中,YEAR
类型是用来存储年份值的。以下是 YEAR
类型的一些特点和细节
YEAR` 类型字段占用的存储空间是1个字节。
YEAR
类型可以存储的年份范围是 1901
到 2155
。
如果插入的值超出这个范围,MySQL会报错。
- 格式
YEAR
类型可以接受以下格式的值:
1.四位数字,例如 2024
。
2.两位数字,例如 24
(如果是两位数字,70
到 99
会被解释为 1970
到 1999
,而 00
到 69
会被解释为 2000
到 2069
)。
3.还可以使用字符串形式,例如 '2024'
或 '24'
。
如果在创建表时没有指定 YEAR
类型的列的默认值,那么默认值是 0000
。
YEAR
类型通常用于存储出生年份、事件年份等只需要年份信息的情况。
1.当使用 YEAR
类型时,由于它只存储年份信息,所以如果需要更详细的日期信息(如月份、日),应该使用 DATE
或 DATETIME
类型。
2.YEAR类型在处理时通常比
DATE或
DATETIME` 类型更加高效,因为它占用的存储空间更小。
在MySQL数据库中,TIME
类型是用来存储时间值的,它只包含小时、分钟和秒,不包含日期部分。以下是 TIME
类型的一些特点和细节:
TIME
类型字段占用的存储空间是3个字节。
TIME
类型可以存储的时间范围是 -838:59:59
到 838:59:59
。
负值表示在一天中的时间之前,而正值表示在一天中的时间之后。
1.TIME
类型可以接受以下格式的值:
2.HH:MM:SS
(或者 HHMMSS
),例如 '08:30:15'
或 '083015'
。
3. D HH:MM:SS
(或者 D HHMMSS
),D
表示天数,可以是负数或正数,例如 '1 08:30:15'
或 '1 083015'
。
如果在创建表时没有指定 TIME
类型的列的默认值,那么默认值是 00:00:00
。
TIME
类型通常用于存储时间信息,如会议时间、工作时间、事件时间等,当只需要时间而不需要日期时。
1.TIME
类型不包含日期部分,如果需要同时存储日期和时间,应该使用 DATETIME
或 TIMESTAMP
类型。
2.TIME
类型可以存储超过24小时的时间值,这意味着它不仅仅限于一天之内的普通时间表示。
TIME
类型时,应该注意其范围和格式,以确保存储正确的时间值。在MySQL数据库中,并没有一个名为 DAYTIME
的数据类型。这可能是一个误解或者是对某个特定数据库系统中的自定义类型的引用。在标准的MySQL数据库中,用来存储日期和时间的数据类型主要有以下几种:
DATE
- 用来存储日期,格式为 YYYY-MM-DD
。
TIME
- 用来存储时间,格式为 HH:MM:SS
。
DATETIME
- 用来存储日期和时间,格式为 YYYY-MM-DD HH:MM:SS
。
TIMESTAMP
- 用来存储日期和时间,格式与 DATETIME
相同,但是范围较小,并且具有特殊的自动初始化和更新特性。
如果你在其他数据库系统或者特定的上下文中遇到了 DAYTIME
类型,那么这可能是特定于那个系统的一个类型。在这种情况下,你需要查阅那个数据库系统的官方文档来了解 DAYTIME
类型的具体用法和特性
在数据库管理系统中,二进制类型用于存储二进制数据,如文件、图像、音频和其他非文本格式的数据。
数据类型 | 存储大小 | 范围/说明 |
---|---|---|
二进制类型 | ||
BINARY | 固定长度,最大 255 字节 | 存储固定长度的二进制数据,不足部分用 0x00 填充,适用于固定长度的二进制数据如加密密钥 |
VARBINARY | 可变长度,最大 255 字节 | 存储可变长度的二进制数据,比 BINARY 更节省空间,适用于可变长度的二进制数据如图片文件数据 |
BLOB | 可变长度,最大 65,535 字节 | 存储大量二进制数据,适用于存储文件、图片等大型二进制数据 |
BLOB类型实际上是一种二进制大对象,它可以存储大量的二进制数据。
使用二进制类型时需要注意以下几点:
存储二进制数据可能会占用大量空间,特别是对于大型的BLOB数据。
在检索二进制数据时,可能需要使用特定的函数来处理或转换数据。
对于大型二进制数据,可能需要考虑数据库的性能和数据备份策略。
二进制数据通常不适合直接用于SQL查询中的WHERE子句,因为它不是按照文本方式比较的。
本文只是让诸位对什么叫关系型数据库,数据库内部架构要如何设计,数据库内部有什么数据类型有大概的了解,如果确实想玩数据库,可以再去找资料,而做小项目开发用数据库储存和管理数据,Flask操作MySQL就完全够了,所以下一篇,Flask操作MySQL数据库,记得看。