第1章 mysql基础

Mr.Tong...
  • mysql
  • mysql
大约 10 分钟

mysql基础

✅1. 概念

  数据库(DataBase,DB),是一个用于存储和管理数据的系统。它是一个组织结构化数据的集合,可以通过各种方式进行访问、管理和操作。数据库可以存储大量的数据,并提供了一种有效的方式来组织和检索这些数据。

  数据库管理系统(Database Management System,简称DBMS),是一种软件系统,用于管理和操作数据库。它提供了一系列功能和工具,用于创建、读取、更新和删除数据库中的数据,以及执行各种查询和分析操作。

数据库管理系统的主要功能包括:

  1. 数据定义语言(Data Definition Language,DDL):用于定义数据库的结构,包括创建、修改和删除数据库、表、索引等对象的语句。
  2. 数据操作语言(Data Manipulation Language,DML):用于对数据库中的数据进行增加、查询、修改和删除操作的语句,如SELECT、INSERT、UPDATE、DELETE等。
  3. 数据查询语言(Data Query Language,DQL):用于从数据库中查询数据的语句,最常见的是结构化查询语言(Structured Query Language,SQL)。
  4. 数据完整性和约束:通过定义约束条件,保证数据库中的数据的完整性和一致性,如主键约束、唯一约束、外键约束等。
  5. 数据安全和权限控制:提供用户认证和授权机制,限制对数据库的访问和操作权限,保护数据的安全性。
  6. 数据备份和恢复:提供数据备份和恢复的功能,以防止数据丢失或损坏。
  7. 并发控制和事务管理:处理多个用户同时访问数据库时可能出现的并发冲突,保证数据的一致性和可靠性。

常见的数据库管理系统包括MySQLOracleMicrosoft SQL ServerPostgreSQL等。它们提供了各种功能和工具,用于管理和操作数据库,满足不同应用场景的需求。

✅2. MySQL

image-20230414224656370

MySQL是一种流行的关系型数据库管理系统(RDBMS),被广泛用于Web应用程序开发以及各种类型的软件开发中。MySQL由瑞典MySQL AB公司开发并维护,现在属于Oracle旗下产品。是一种开源软件,可以根据GPL或商业许可证在各种平台上使用。它支持跨平台,包括LinuxWindowsMac OS X等操作系统,并且具有多语言支持功能。且基于SQL(Structure d Query Language)的标准的关系型数据库,支持事务、外键约束、视图等常见的数据库特性。另外,MySQL还具有存储过程、触发器、函数等高级特性,使得开发人员可以在数据库端实现更加复杂的逻辑处理。

MySQL拥有一个活跃的社区和广泛的用户群体,因此可以享受到许多第三方工具和库对其的支持和扩展。同时,与其他数据库系统相比,MySQL也具有较高的性能和可靠性,并且容易扩展和部署。

✅3. 三大范式

Normal Form范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。简单来说可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。就像英语的四级和六级,相对代表了英语的水平的高低。满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入( insert )、删除( delete )和更新( update)操作异常。

🚩第一范式:

定义:符合1NF的关系中的每个属性都不可再分无重复的列

在使用数据库管理系统的时候比如mysql , sql server等创建的数据表都满足1NF,如果不满足这个范式,是不能创建成功数据表的。属性不可再分的意思是每一个字段都是最小的,不包含其他字段。不重复,原子性

**1NF存在的问题:**数据冗余,插入异常,删除异常,修改异常的问题。

  • 插入异常:如果需要新建一个系,并且有系主任。但是因为还没有学生开始学习,所以主键是空的,肯定是不能插入的。
  • 删除异常:如果需要把某个系下面学生信息都清空,那么这个系也就不存在了。
  • 修改异常∶如果需要把学生的系进行更换,就需要把三条数据里面的系名和系主任都修改才可以。

image-20221110183953964

🚩第二范式:

image-20221110232957549

**定义:**在1NF的基础上,消除了非主属性对于码的部分函数依赖,属性完全依赖于主键 [ 消除部分子函数依赖 ]

  1. 码:

一个表中,可以唯一决定一个元组的属性“集合”。假设K为表中的某个属性,如果在K确定了的情况下,这个表里面其他的属性都可以确定,那么K就叫做候选码,也叫码。

比如通过id可以获取到姓名,系名,系主任名,但是不能确定课名和分数。课名可以获取分数。i学号d -------姓名,系名,系主任课名-----分数

( 学号id,课名)这个属性组就叫做码。

  1. 非主属性:

上面说到的码里面的属性就是主属性,包括id,课名。不是主属性的就是非主属性,包括姓名,系名,系主 任,分数。

  1. 函数依赖:

函数y=f(x)代表了给定一个x的值,y的值也是确定的。在数据表中,在属性X确定的情况下,必定能确定Y的值,那就说Y函数依赖与X写作X---Y。

比如:在表中,给定一个学号,必定能得到唯一的一个姓名。那就说姓名函数依 赖于学号。写作:学号---姓名 在表中的函数依赖还有

  • 学号-----系名
  • 学号-----系主任
  • (学号,课名)-----成绩
  1. 完全函数依赖:

​ 在一张表中,若×→Y,且对于X的任何一个真子集(假如属性组×包含超过一个属性的话),x'→Y不成立,那么我们称Y对于X完全函数依赖,记作XF→Y。比如(学号,课名)-----成绩 ​ 学号和课名都是X的真子集,但是如果只有学号,或者只有课名,是不能得到一个唯一的成绩。满足完全函数依赖的要求,所以Y完全函数依赖于X

  1. 部分函数依赖:

如果Y函数依赖于X,但是Y不完全函数依赖于X,那就叫做部分函数依赖。比如(学号,课名)------姓名。 由学号可以得到唯一的姓名,但是由课名不能得到唯一的姓名。所以称为Y部分函数依赖X。

  1. 判断是否符合2NF

就是看数据表中是否存在非主属性对于码的部分函数依赖。若存在,则数据表最高只符合1NF的要 求,若不存在,则符合2NF的要求。 步骤:

  • 第一步:找出数据表中所有的码。( id,课名)

  • 第二步:根据第一步所得到的码,找出所有的主属性。id和课名

  • 第三步∶数据表中,除去所有的主属性,剩下的就都是非主属性了。姓名,系名,系主任,分数。

  • 第四步:查看是否存在非主属性对码的部分函数依赖。

    对于(学号,课名)→姓名,有学号→姓名,存在非主属姓名部分依赖课名。

  1. 解决的问题:数据冗余
  • 数据冗余:减少了冗余。
  1. 还存在的问题:插入异常,删除异常,修改异常的问题。
  • 插入异常∶如果需要新建一个系,并且有系主任。但是因为还没有学生开始学习,所以主键是空的,肯定是不能插入的。
  • 删除异常∶如果需要把某个系下面学生信息都清空,那么这个系也就不存在了。
  • 修改异常(解决一范式的问题):如果需要把学生的系进行更换,就需要把三条数据里面的系名和系主任都修改才可以。2NF可以只修改一个字段就可以实现。

🚩第三范式

image-20221110234855417

  1. 定义

3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。也就是说,如果存在非主属性对于码的传递函数依赖,则不符合3NF的要求。

  1. 传递函数依赖:

如果Y依赖于X,Z又依赖于Y,那就说Z依赖于X。

比如:系名依赖于学号,系主任依赖于系名,那么系主任传递函数依赖于学号。不满足3NF

image-20221110234542044

  1. 解决问题:
  • 插入异常:如果需要新建一个系,并且有系主任但是因为还没有学生开始学习,所以主键是空的,肯定是不能插入的。现在需要新建一个系是不会出问题的。
  • 删除异常∶如果需要把某个系下面学生信息都清空,那么这个系也就不存在了。这时候清空只需要清空第二个表,不会影响其他表。不会出现异常。I

✅4. SQL

SQL:Structure Query Language(结构化查询语言),SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。

  • 各数据库厂商都支持ISO的SQL标准,普通话

  • 各数据库厂商在标准的基础上做了自己的扩展,方言

SQL 是一种标准化的语言,它允许你在数据库上执行操作,如创建项目,查询内容,更新内容,

并删除条目等操作。

Create, Read, Update, and Delete 通常称为CRUD操作。

✅5. 数据类型和编码

数据类型解释
int整型
double浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,即最大值为999.99;默认支持四舍五入
char固定长度字符串类型; char(10) 'aaa ' 占10位
varchar可变长度字符串类型; varchar(10) 'aaa' 占3位
text字符串类型,比如小说信息;
blob字节类型,保存文件信息(视频,音频,图片);
date日期类型,格式为:yyyy-MM-dd;
time时间类型,格式为:hh:mm:ss
timestamp时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime日期时间类型 yyyy-MM-dd hh:mm:ss

编码方式:gb2312,utf-8,gbk,iso-8859-1

排序规则:

  • gbk_chinese_ci :非二进制存储,不区分大小写
  • gbk_bin:以二进制形式进行存储,区分大小写

日期类型值的区别:

 date:yyyy-MM-dd (年月日)

 time:hh:mm:ss (时分秒)

 datetime:yyyy-MM-dd hh:mm:ss (年月日时分秒)

注意: 为空的条件:列名 is null or 列名='',两个单引号表示空字符串。

✅6. 运算符

算术运算符+,-,*,/(除法),求余(%)示例: 5/2、 5%2、2/5、2%5
赋值运算符=示例: name='张三'
逻辑运算符and(并且),or(或者),not(取非)作用:用于连接多个条件时使用
关系运算符>,<,>=,<=,!=(不等于),=(等于),<>(不等于)

你认为这篇文章怎么样?

  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.14.1