MySQL 的基础知识

一. MySQL介绍

了解mySQL
  1. MySQL目前属于Oracle甲骨文公司,大家熟悉的关系型数据库有微软的SQL Server,甲骨文的Oracle和MySQL
  2. MySQL分为企业版和社区版,其中社区版是完全免费并且开源的
  3. MySQL和其它关系型数据库有一个非常大的区别,就是支持可更换的插件式的存储引擎,其中InnoDB非常强大
  4. 目前goole、淘宝、百度、腾讯、新浪、facebook等大公司都在使用MySQL作为数据存储层方案
从技术上再了解
  1. MySQL设计成C/S客户端服务器模型,应用作为MySQL Client向MySQL Server发送请求,获取响应,因此MySQL非常适用于集群环境,方便做主从复制,读写分离操作
  2. 为了提高效率,MySQL Client和MySQL Server如果处在不同主机上,当然是通过Socket进行网络通信的;如果它们在同一台机器上,那么Client和Server之间是通过共享内存进行通信的,效率比Socket通信更高
  3. MySQL的服务器模块采用的是I/O复用+可伸缩的线程池,是实现网络高并发服务器的经典模型

二. SQL基础

SQL是结构化查询语言的缩写(Structure Query Language),它是关系型数据库的通用语言,非常强大,可以非常高效的进行数据库的增删改查操作,SQL+索引更是可以实现带各种附加条件的高效率查询操作。

SQL 语句主要可以划分为以下 3 个类别:
DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。
DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、update 和select 等。
DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke 等。

学习关系型数据库,SQL是必须熟练应用的,这需要不断的实践操作!

三. MySQL数据类型

MySQL作为关系型数据库,在二维表中存数据,肯定要规定数据的类型,类型规定了数据的大小,因此使用的时候选择合适的类型,不仅会降低表占用的磁盘空间,间接减少了磁盘I/O的次数,提高了表的访问效率,而且索引的效率也和数据的类型息息相关。

1.数值类型
整数类型字节最小值最大值
TINYINT1有符号 : -128
无符号 : 0
有符号 : 127
无符号 : 255
SMALLINT2有符号 : -32768
无符号 : 0
有符号 : 32767
无符号 : 65535
MEDIUMINT3有符号 : -8388608
无符号 : 0
有符号 : 8388607
无符号 : 1677215
INT、INTEGER4有符号 : -2147483648
无符号 : 0
有符号 : 2147483647
无符号 : 4294967295
BIGINT8有符号 : -9223372036854775808
无符号 : 0
有符号 : 9223372036854775807
无符号 : 18446744073709551615
浮点数类型字节最小值最大值
FOLAT4±1.175494357E-38±3.402823466E+38
DOUBLE8±2.2250738585072014E-308± 1.7976931348623157E+308

上图主要列出了整数类型和浮点数类型,在实际使用中,根据具体的场景选择合适的数据类型很重要!

2.日期和时间

在这里插入图片描述日期类型也是做项目过程中,经常使用的类型信息,尤其是TIMESTAMP和DATETIME两个类型,但是注意TIMESTAMP会自动更新时间,非常适合那些需要记录最新更新时间的场景,而DATETIME需要手动更新。

3.字符串类型

在这里插入图片描述
字符串类型应该是使用最多的了,首先注意char和varchar的区别,然后注意TEXT和BLOB的区别,一般的字符串类型,我们选择varchar类型就可以了,如像博客之类,数据量比较大的类型就选择TEXT或者BLOB,但是TEXT只能存文本,而BLOB还可以存储二进制文件,比如图片等。

4.enum枚举类型和set集合类型

注意,这两个类型,都是限制该字段只能取固定的值,但是枚举字段只能取一个唯一的值,而集合字段可以取任意个值。

四. MySQl运算符

MySQL的运算符和Java语言很多运算符的含义是一样的,但也有区别,运算符多用在SQL语句当中,对SQL查询做各种条件过滤的。

1.算术运算符

在这里插入图片描述

2.逻辑运算符

NOT逻辑非 AND逻辑与 OR逻辑或

3.比较运算符

在这里插入图片描述
例如:

//使用算数运算符,把tcount_tbl表中所有记录的runoob_count字段更新,在原来的值上加1
update tcount_tbl  set  runoob_count=runoob_count+1;


//使用逻辑运算符and和关系运算符>=,把成绩及格的学生信息获取出来
select a.id a.name a.age a.sex from runoob_user a inner join runoob_score b on a.id = b.id and b.average>60.0; 

五. 数据库范式

应用数据库范式可以带来许多好处,但是最重要的好处归结为三点:
1)减少数据冗余(这是最主要的好处,其他好处都是由此而附带的)
2)消除异常(插入异常,更新异常,删除异常)
3)让数据组织的更加和谐…

1.第一范式(1NF)

第一范式是指数据库表中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性

2.第二范式(2NF)

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。

例如,在选课关系表(学号,课程号,成绩,学分),关键字为组合关键字(学号,课程号),但由于非主属性学分仅依赖于课程号,对关键字(学号,课程号)只是部分依赖,而不是完全依赖,因此此种方式会导致数据冗余以及更新异常等问题,解决办法是将其分为两个关系模式:学生表(学号,课程号,分数)和课程表(课程号,学分),新关系通过学生表中的外关键字课程号联系,在需要时进行连接。

简单说:消除部分依赖。

3.第三范式(3NF)

如果关系模型R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。

设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。

以学生表(学号,姓名,课程号,成绩)为例,其中学生姓名无重名,所以该表有两个候选码(学号,课程号)和(姓名,课程号),故存在函数依赖:学号——>姓名,(学号,课程号)——>成绩,唯一的非主属性成绩对码不存在部分依赖,也不存在传递依赖,所以属性属于第三范式。

简单说 : 建立在第二范式基础上,消除传递依赖。

4.BC范式(BCNF)

一个满足BCNF的关系模式的条件:

  • 1.所有非主属性对每一个码都是完全函数依赖。
  • 2.所有的主属性对每一个不包含它的码,也是完全函数依赖。
  • 3.没有任何属性完全函数依赖于非码的任何一组属性。

假设仓库管理关系表(仓库号,存储物品号,管理员号,数量),满足一个管理员只在一个仓库工作;一个仓库可以存储多种物品,则存在如下关系:
(仓库号,存储物品号)——>(管理员号,数量)
(管理员号,存储物品号)——>(仓库号,数量)

所以,(仓库号,存储物品号)和(管理员号,存储物品号)都是仓库管理关系表的候选码,表中唯一非关键字段为数量,它是符合第三范式的。但是,由于存在如下决定关系:
(仓库号)——>(管理员号)
(管理员号)——>(仓库号)

即存在关键字段决定关键字段的情况,因此其不符合BCNF。把仓库管理关系表分解为两个关系表仓库管理表(仓库号,管理员号)和仓库表(仓库号,存储物品号,数量),这样这个数据库表是符合BCNF的,并消除了删除异常、插入异常和更新异常。

5.第四范式(4NF)

设R是一个关系模型,D是R上的多值依赖集合。如果D中存在凡多值依赖X->Y时,X必是R的超键,那么称R是第四范式的模式。

例如,职工表(职工编号,职工孩子姓名,职工选修课程),在这个表中,同一个职工可能会有多个职工孩子姓名,同样,同一个职工也可能会有多个职工选修课程,即这里存在着多值事实,不符合第四范式。如果要符合第四范式,只需要将上表分为两个表,使它们只有一个多值事实,例如职工表一(职工编号,职工孩子姓名),职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,所以符合第四范式。

各范式的关系图 :
在这里插入图片描述

从上面对于数据库范式进行分解的过程中不难看出,应用的范式越高,表越多。
表多会带来很多问题:
1. 查询时需要连接多个表,增加了SQL查询的复杂度
2. 查询时需要连接多个表,降低了数据库查询性能

        因此,并不是应用的范式越高越好,要看实际情况而定。第三范式已经很大程度上减少了数据冗余,并且基本预防了数据插入异常,更新异常,和删除异常了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值