MySQL数据库(超详细万字长文,建议收藏)

一、MySQL简介

MySQL是一个开源免费的关系型数据库管理系统,由瑞典MySQL  AB公司开发,属于Oracle旗下产品。MySQL是流行的关系型数据库之一。

二、MySQL的特点

1. 开源性:MySQL是一个开源的关系型数据库。

2. 高性能:MySQL采用了多种优化技术,比如索引,查询缓存和高效的存储引擎,可以快速的检索数据和处理。适用于处理大量数据和高并发请求,具有高新能、高并发、高可用的特点。

3. 简单易用:MySQL易于安装和配置,并且有很好的兼容性,支持多种操作系统,比如Windows、Linux、macOS等。

4. 安全性:MySQL提供了多层次的安全措施,包括密码保护,基于角色的访问控制,SSL连接加密等,以保护数据免受未授权访问和安全威胁。

5. 可扩展性:MySQL具有良好的可扩展性,可以通过主次复制,分片和分区等技术来实现数据的扩展,从而提高系统的高可用性和高性能。

6. 跨平台性:MySQL可以在不同平台上运行,比如Windows、Linux、macOS等。

7. 支持多种存储引擎:MySQL支持多种存储引擎,包括InnoDB、MyISAM等。每种引擎都有特定的优势和用途。

三、SQL简介

1. SQL的介绍

SQL全称Structured Query Language,也就是结构化查询语言,是一种用于处理关系型数据库中数据的高级非编程化语言。用户可以通过编写SQL语句来查询、更新和管理数据库中的数据。SQL的核心部分包括数据定义、数据操作和数据控制等功能,通过这些功能用户可以定义数据库结构,操作数据,以及控制对数据的权限。

2. SQL的分类

数据定义语言(DDL):用于创建数据和修改数据库对象(如表和索引)的结构。

数据操纵语言(DML):包括INSERT、UPDATE、DELETE等语句,用于对数据库中的数据进行新增、修改、删除等操作。

数据控制语言(DCL):用于控制用户对数据的访问权限,例如通过GRANT和REVOKE语句

数据查询语言(DQL):用于对数据进行查询操作,例如通过SELECT语句

3. SQL的特点

1.高度非过程化:用户只需要描述想完成的操作,而无需具体说明操作的细节,比如数据的存储路径等。

2.语言简洁:易学易用:SQL的语法结构相对来说比较简单,易于学习和使用。

3.广泛的应用范围:几乎所有的关系型数据库管理系统都支持SQL,比如Server、MySQL、PostgreSql等。

四、 数据库的三大范式

1. 第一范式(1NF)

每一列属性(字段)不可分割,字段必须保证原子性。两列的属性值相近或者一样时,尽量合并到一列或者分表,以确保数据不冗余。

2. 第二范式(2NF)

每一行的数据只能与其中一行有关即主键一行数据只能做一件事情或者表达一个意思,只要数据出现重复,就要进行表的拆分。

3. 第三范式(3NF)

数据不能存在传递关系,每个属性都跟主键有直接关联而不是间接关联。

五、数据库的数据类型

MySQL数据库支持多种数据类型,主要分为:数值类型、日期和时间类型、字符串类型、二进制类型。

1. 数值类型

整数类型:TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT。这些类型方别占用不用的存储空间,提供不同的取值范围。

数据类型 字节数 无符号数的取值范围 有符号数的取值范围
TINYINT 1 0~255 -128~127
SMALLINT 2 0~65535 -32768~32768
MEDIUMINT 3 0~16777215 -8388608~8388608
INT 4 0~4294967295 -2147483648~8388608
BIGINT 8 0~18446744073709551615 -9223372036854775808~9223372036854775808

 浮点数类型和定点数类型:在MySQL数据库中使用浮点数和定点数来存储小数。浮点数的类型有两种:单精度浮点数类型(FLOAT)和双精度浮点数类型(DOUBLE)。而定点数类型只有一种即DECIMAL类型。

数据类型 字节数 有符号的取值范围 无符号的取值范围
FLOAT 4 -3.402823466E+38~-1.175494351E-38 0和1.175494351E-38~3.402823466E+38
DOUBLIE 8 -1.7976931348623157E+308~2.2250738585072014E-308 0和2.2250738585072014E-308~1.7976931348623157E+308
DECIMAL M+2 -1.7976931348623157E+308~2.2250738585072014E-308 0和2.2250738585072014E-308~1.7976931348623157E+308

DECIMAL类型的取值范围与DOUBLE类型相同。但是,请注意:DECIMAL类型的有效取值范围是由M和D决定的。其中,M表示的是数据的长度,D表示的是小数点后的长度。比如,将数据类型为DECIMAL(6,2)的数据6.5243 插入数据库后显示的结果为6.52

2. 日期和时间类型

MySQL提供的表示时间和日期的数据类型有:YEAR、DATE、TIME、DATETIME和TIMESTAMP。

数据类型 字节数 取值范围 日期格式 零值
YEAR 1 1901~2155 YYYY 0000
DATE 4 1000-01-01~9999-12-31 YYYY-MM-DD 000-00-00
TIME 3 -835:59:59~835:59:59 HH:MM:SS 00:00:00
DATETIME 8 10001-01-01 00:00:00~9999-12-31 00:00:00 YYYY-MM-DD HH:MM:SS 0000-00-00 00:00:00
TIMESTAMP 4 1970-01-01 00:00:01~2038-01-19 03:14:07 YYYY-MM-DD HH:MM:SS 0000-00-00 00:00:00
2.1 YEAR类型

YEAR类型用于表示年份,在MySQL中,可以使用三种格式指定YEAR类型的值。

1.使用4为字符串或数字表示,范围是"1901"~"2155"或1901~2155。输入"2024"或2024插入到数据库中的值都是2024

2.使用两位字符表示,范围是"00"~"69"。其中,"00"~"69"范围的值会转换为2000~2069范围的YEAR值,"70"~"99"范围的值会被转换为1970~1999范围的YEAR值。例如:当取值为"01"到"69"时,表示2001到2069。

3.使用两位数字表示,范围是1~99。其中,1~99范围的值会被转换为2001~2099范围的YEAR值,66~99范围的值会被转换为1966~1999范围的YEAR值。例如:输入19插入到数据库中的值为2019。

注意:当使用YEAR类型时,一定要区别"0"0.因为字符串格式的"0"表示的YEAR值是2000年而数字格式的0表示的YEAR的值是0000年。从MySQL5.5.27开始,2位格式的YEAR已经不推荐使用。YEAR默认格式就是"YYYY",没有必要写成YEAR(4),从MySQL8.0.19开始,不推荐使用指定显示宽度的YEAR(4)数据类型。

2.2 TIME类型

TIME类型用于表示时间值,不包含日期部分,它是显示形式一般为HH:MM:SS格式,其中,HH表示小时,MM表示分钟,SS表示秒数。在MySQL中可以使用三种格式类指定TIME类型的值。

1. 以"D HH:MM:SS"、"HH:MM:SS"、"HH:MM"、"D HH:MM"、"D HH"或者"SS"格式表示。其中,D表示天,可取0—34之间的值。在插入数据时如果使用带有D格式的字符串插入TIME类型的字段时,D会被转化为小时,小时的值计算格式为(DX24+HH)。如果使用带有冒号不带D格式的字符串插入TIME时,表示当天时间,例如,输入"2 11:30:50"插入数据库中的日期为59:30:50。不带冒号输入12:12数据库中表示为12:12:00。

2. 以"HHMMSS"字符串格式或者HHMMSS数字格式表示。例如:输入"121212"或121212插入数据库中的日期为12:12:12

3. 使用CURRENT_TIME或NOW()函数就会插入当前系统时间。

2.3 DATE类型

DATE类型表示日期,没有时间部分,格式为YYYY-MM-DD,其中YYYY表示年份,MM表示月份,DD表示日期。在向DATE类型的字段插入数据时,同样需要满足一定的格式条件。

1.以YYYY-MM-DD格式或者YYYYMMDD格式表示的字符日期时,其取值范围是1000-01-01~9999-12-31.YYYYMMDD格式会被转换成YYYY-MM-DD格式。

2.以YY-MM-DD格式或者YYMMDD格式表示的字符串日期时,此格式周工两位数值或者字符串满足YEAR类型的格式条件为:当年份取值为00~69时,会被转换成2000~2069;当年份取值为70~99时,会被转换成1970~1999。

3.使用CURRENT_DATE()或者NOW()函数,就会插入当前系统时间

2.4 DATETIME类型

DATETIME类型用于表示日期和时间,它的显示形式为"YYYY-MM-DD HH:MM:SS",其中YYYY表示年份,MM表示月份,DD表示日期,HH表示小时,MM表示分钟,SS表示秒数。在MySQL中,可以使用4种格式来指定DATETIME类型的值。

1. 以"YYYY-MM-DD HH:MM:SS"或者"YYYYMMDDHHMMSS"字符串格式表示的日期和时间,取值范围是"1000-01-01 00:00:00"~"9999-12-31 23:59:59"。例如:输入"2024-01-01 11:11:11"或"2024-01-01 11:11:11"插入数据库中的DAETIME值都为2024-01-01 11:11:11。

2. 以"YYYY-MM-DD HH:MM:SS"或者"YYYYMMDDHHMMSS"字符串格式表示的日期和时间,取值范围是"00"~"99",两位数的年份规则符合YEAR类型的规则,00~69表示2000到2069,70~99表示1970到1999。

3.以YYYYMMDDHHMMSS或者YYMMDDHHMMSS的格式表示日期时间。比如插入20180505083055或者180505083055都表示插入数据库中的值都是2018-05-05 08:30:55。

4.使用CURRENT_TIME或NOW()函数就会插入当前系统时间。

3.字符串类型

在MySQL中通常用CHAR和VARCHAR来定义字符串。

CHAR与VARCHAR的区别:

CHAR是存储的是定长字符串,VARCHAR存储的是可变长度的字符串

当数据为CHAR(M)类型时,不管插入值的长度实际是多少它所占用的存储空间都是M字节;而VARCHAR(M)所对应的数据所占用的字节数为实际长度加1

插入值 CHAR(3) 存储空间 VARCHAR(3) 存储空间
"" "" 3个字节 "" 1个字节
"a" "a" 3个字节 "a" 2个字节
"ab" "ab" 3个字节 "ab" 3个字节
"abc" "ab" 3个字节 "abc" 4个字节
"abcd" "ab" 3个字节 "abc" 4个字节

文本类型:主要用于表示大文本数据,比如,文章内容,评论,详情等。

数据类型 存储范围
TINYTEXT 0~255字节
TEXT 0~65535字节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值