MySQL基础知识点,小白入!

目录

一、MySQL简介

二、SQL语句的划分

三、MySQL的数据类型

1.整数类型

2.浮点数类型和定点数类型

3.日期与时间类型

4.字符串类型

四、数据库范式

1、第一范式(1NF)每一列要保持原子特性

2、第二范式(2NF):属性需要完全依赖主键(针对复合主键)

3、第三范式(3NF):属性不依赖于非主属性(消除传递关系)

4、BC范式(BCNF):每一个表中只有一个候选键

5、第四范式(4NF):消除表中的多值依赖

总结


一、MySQL简介

关系型数据库有微软的SQL Server、甲骨文提供的Oracle和MySQL。其中MySQL分为企业版和社区版,社区版是完全免费且开源的,学习阶段使用社区版就ok了。

MySQL和其他的关系型数据库的区别是,支持插件式的存储引擎,存储引擎包括innodb、myisam等。大量的公司使用的MySQL作为数据存储层方案,比如:腾讯、Facebook等。

MySQL设计成C/S(客户端/服务端)的模型,用户可以通过MySQL 的Client向MySQL的服务端发送命令,MySQL服务端对命令进行相应的处理。MySQL适合做集群化环境处理,方便做主从复制、读写分离操作。mysql服务端为了提高用户的并发量,采用的是IO复用和线程池的,实现网络高并发的经典模型。

二、SQL语句的划分

DDL(Data Definition Language)数据定义语言,该语言定义了不同的数据库、表、列、索引等数据库对象的定义。

DML(Data Manipulation Language)数据操纵语言,主要用于数据库中数据库记录的增删改查等操作。

DCL(Data Control Language)数据控制语言,对数据库设置访问权限和安全级别,例如grant,remove等关键字。

三、MySQL的数据类型

在MySQL中,二维表来存储数据,需要指定字段的数据类型,类型是用来规定数据大小使用

1.整数类型

标准SQL中支持INTEGER和SMALLINT这两类整数类型。MySQL数据库除了支持这两种类型以外,还扩展支持了TINYINT、MEDIUMINT和BIGINT。

表1 MySQL的整数类型
整数类型字节数无符合数的取值范围有符合数的取值范围
TINYINT10~255-128~127
SMALLINT20~65535-32768~32767
MEDIUMINT30~16777215-8388608~8388607
INT40~4294967295-2147483648~2147483647
INTEGER40~4294967295-2147483648~2147483647
BIGINT80~18446744073709551615-9223372036854775808~9223372936854775807

2.浮点数类型和定点数类型

MySQL中使用浮点数类型和定点数类型来表示小数。浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型)。定点数类型就是DECIMAL型。下面从这三种类型的字节数、取值范围等方面进行对比。

表2 MySQL的浮点数类型和定点数类型
整数类型字节数负数的取值范围非负数的取值范围
FLOAT4

-3.402823466E+38~-1.175494351E-38

0和1.175494351E-38~3.402823466E+38
DOUBLE8-1.7976931348623157E+308~-2.2250738585072014E-3080和2.2250738585072014E-308~1.7976931348623157E+308

DECIMAL(M,D)或DEC(M,D)

M+2-1.7976931348623157E+308~-2.2250738585072014E-3080和2.2250738585072014E-308~1.7976931348623157E+308

注:从表2中可以看到,DECIMAL型的取值范围与DOUBLE相同。但是,DECIMAL的有效取值范围有M和D决定。而且,DECIMAL型的字节数是M+2.也就是说,定点数的存储空间是根据其精度决定的。

3.日期与时间类型

MySQL中有多种表示日期和时间的数据类型,其中,YEAR类型表示时间;DATE类型表示日期;TIME类型表示时间;DATETIME和TIMESTAMP表示日期和时间。下面从这五种日期与时间类型的字节数、取值范围和零值等方面进行对比。

表3 MySQL的日期与时间类型
整数类型字节数取值范围零值
YEAR11901~21550000
DATE41000-01-01~9999-12-310000:00:00
TIME3-838:59:59~838:59:5900:00:00
DATEYIME81000-01-01 00:00:00~9999-12-31 23:59:590000-00-00 00:00:00
TIMESTAMP419700101080001~2038011911140700000000000000

注:从表3中可以看到,每种日期与时间类型都有一个有效范围。如果插入的值超过了这个范围,系统就会报错,并将零值插入到数据库中。

4.字符串类型

字符串类型包括CHAR、VARCHAR、BLOB、TEXT、ENUM和SET。其中,CHAR类型和VARCHAR类型是MySQL中较为常用的字符串类型,这里着重讲这两中常用类型。

两者的不同是:CHAR类型的长度是固定的,而VARCHAR类型的长度是可变的。例如,CHAR(100)就是指定CHAR类型的长度是100;VARCHAR(100)的最大长度是100,但是,不是每条记录都占用100个字节,而是在这个最大取值范围内,使用多少分配多少。VARCHAR类型实际占用的空间为字符串的实际长度加1,因为字符串的结束标识符占用了1个字节。下面讲CHAR(5)和VARCHAR(5)的对比。

表4 CHAR(5)与VARCHAR(5)的对比
插入值CHAR(5)占用字节数VARCHAR(5)占用字节数
‘’‘’5个字节‘’ 1个字节
‘1’‘1’5个字节‘1’2个字节
‘123’‘123’5个字节‘123’4个字节
‘123 ’‘123’5个字节‘123 ’5个字节
‘12345’‘12345’5个字节‘12345’6个字节

四、数据库范式

  • 外键(外码):一个属性,是其他表中的一个属性,当前表可以通过该属性和其他表建立联系
  • 主键:在一个表中一个属性(一个组合属性)可以找到表中其他的属性(主键具有唯一性)

1、第一范式(1NF)每一列要保持原子特性

列是基本的数据项,列是不可以进行分割,否则设计成一对多的关系。(注意:不符合1NF不能称之为关系型数据库)

如:表中存在一个字段地址字段,可以细分为省、市、区,则该字段是不满足第一范式的,可将表拆分成专门地址信息。

用户表(name、age、address);   //address不满足第一范式,进行拆分

用户表(name、age、addressId)和地址表(addressId,prince、city,..)

2、第二范式(2NF):属性需要完全依赖主键(针对复合主键)

第二范式(2NF)是在第一范式(1NF)的基础上,满足第二范式(2NF)必须先满足第一范式(1NF)。如果表是单主键,那么主键以外的列必须完全依赖于主键;如果表是复合主键,那么主键以外的列必须完全依赖于主键,不能仅依赖主键的一部分。即非主属性完全依赖于主键,如果不是依赖主键,应该拆分成新的主题,设计成一对多的和关系。

示例:

选课关系表(学号、姓名、年龄、课程名称、成绩、学分)

分析:学分只和课程名称相关,学分只部分依赖复合主键;姓名、年龄和学号相关,姓名,年龄部分依赖于复合主键;成绩是完全依赖于复合主键。

结论:不满足第二范式,进行拆分:

学生表(学号、姓名、年龄) 

课程表(课程名称、学分) 

选课成绩表(学号、课程名称、成绩) 

注:下划线的属性为该表的主键,主键可以是复合主键,即多个属性,下同。

3、第三范式(3NF):属性不依赖于非主属性(消除传递关系)

第三范式(3NF)是在第二范式的基础上得到的,第三范式(3NF)要求:表中的非主键列必须和主键直接相关而不能间接相关;也就是说:非主键列之间不能相关依赖。

示例:学生表(学号、姓名、年龄、学院、学院电话) 

分析:姓名、年龄、学院等都依赖于主键可以直接查询,但学院电话是需要先查询到学院,在查询到学院电话,即学院电话不依赖于主键,存在传递依赖,

结论:将表进行拆分,消除传递依赖

学生表(学号、姓名、年龄、学院) 

学院表(学院名称、学院电话) 

4、BC范式(BCNF):每一个表中只有一个候选键

BC范式在满足前三范式的基础上的一种特殊情况,即每个表中的只有一个候选键(数据库中每一行的值都不同,则称之为候选键)

5、第四范式(4NF):消除表中的多值依赖

示例:

学生表(学号、姓名、技能)  技能描述:“Java、MySQL” “JAVA、MYSQL”

分析:需要维护数据一致性问题,进行拆分:

学生表(学号、姓名)

技能表(技能ID、技能名称)

学生技能表(学号、技能ID)

总结

通过范式可知:范式越高、表越多、表越多会带来相关问题,例如:

1、查询时需要连接多表,增加了查询的复杂度;

2、表越多,查询过程中会降低数据库的查询性能。


以上都是学习过程中的知识点总结,如果有错误或者有疑问,欢迎一起交流吖~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值