目录
-
01初识数据库
-
什么是数据库技术
- 数据库技术所研究的问题就是如何科学地组织和存储数据,如何高效地获取和处理数据
-
SQL
- Structured Query Language结构化查询语言
- 专为数据库而建立的操作命令集,一种功能齐全的数据库语言
- 在使用SQL,只需做出“做什么”的命令,“怎么做”是不用使用者考虑的
-
DB,DBS,DBMS之间关系
-
数据 Data
- 对客观事物的符号表示,数据是数据库中存储的基本对象
- 为了存储和处理,将事物特征抽象出来组成一个记录
- 学生档案中的学生记录
- (崔半仙,男,2000,上海,计算机系,2018)
- 数据的形式不能完全表达其内容
- 数据的解释
- 崔半仙是个大学合适呢个,2000年出生,上海人,2018年考入计算机系
-
数据库 DB
- 长期存储在计算机内的、有组织的、可共享的数据集合
- 数据库中的数据按一定的数据模型组织、描述和存储
- 具有较小的冗余度、较高的数据独立性和易扩展性,并可为各个用户共享
-
数据库管理系统 DBMS
- 位于应用程序与存储数据的之间的一层数据管理软件
- 基础软件,一个大型复杂的软件系统
- 用途
- 科学地组织和存储数据
- 高效地获取和维护数据
- 主要功能
- 数据库的定义功能
- 在SQL语言中——DDL语言(数据库定义语言),提供了三个语句:creat(创建)、alter(修改)、drop(删除),操作的对象是数据库中的基本架构—表
- 数据库中存储的各种各样的数据以表的形式来组织和存放的
- 数据库的操作功能
- 借助于SQL语言——DML(数据库操作语言),实现对数据库中存储的数据进行增删改查的操作(insert、delete、update、select)
- 数据库的保护功能
- 数据库的数据恢复、数据库的并发控制、数据完整性控制和数据安全性控制
- 数据库的维护功能
- 数据库中表结构和数据的维护功能
- 数据库的数据导入、转换、存储、数据库性能监控
- 数据库的定义功能
-
优点
- 相互关联的数据的集合
- 较少的数据冗余
- 程序与数据相互对立
- 保证数据的安全、可靠、正确
- 数据可以并发使用并能保证一致性
-
数据库系统 DBS
- 一般由数据库DB、数据库管理系统DBMS(及其开发工具)、应用系统、数据库管理员DBA和用户构成
- 发展经历
-
网状数据库 层次数据库 关系数据库 数据组织方式 网状模型 层次模型 关系模型 架构 图形结构 树形结构 表 - 关系型数据库
- 信息:指的是数据经过加工处理后所获取的有用知识,信息也是以某种形式来表示的
- 信息的分类——信息的三种世界
- 现实世界:存在于人脑之外的客观世界
- 信息世界(观念世界):现实世界在人们头脑中的反映
- 数据世界:信息世界的产物在计算机中的表示
- 实体-联系 模型
- 实体:客观事物在信息世界中称为实体(Entity),是现实世界中任何可区分、识别的事物
- 属性:描述实体或者联系的性质或特征的数据项
- 联系
- 反映事物内部或事物之间的关联集合
- 常见的实体联系:一对一、一对多和多对多
-
-
-
关系模型
-
关系的基本概念
- 关系:一个关系就是一张二维表,通常将一个没有重复行、重复列的二维表看成一个关系,每个关系都有一个关系名
- 元组:二维表的每一行在关系中称为元组,在MySQL中,一个元组就是一个记录
- 属性:表中的列,也叫做字段
- 域:属性的取值范围。(列的取值范围)
- 关键字:关系中能唯一区分、确定不同元组的属性或属性集合(列,一个列或多个列看作是关键字)唯一、不重复、不能为空。
- 主键(主关键字):针对一个表中某个列来说,假如一个表中的某个列设置为主键,那么这个列就一定要求:唯一、不重复、不为空
- 外键:针对两个表来说的,加强表与表之间的联系。
-
关系模式
- 对关系的描述称为关系模式格式为:关系名(属性名1,属性名2,...,属性名n)
-
关系的基本特点
- 关系必须规范化,属性不可再分割
- 在同一关系中不允许出现相同的属性名
- 在同一关系中元组的顺序可以任意
- 在同一关系中属性的顺序可以任意
-
关系运算
- 选择
- 从关系模式中找出满足给定条件的元组组成新的关系
- (从行的角度进行的运算)
- 投影
- 从关系模式中执行若干属性组成新的关系
- (从列的角度进行的运算)
- 连接
- 从两个关系的笛卡尔积中选取属性间满足一定条件的元组,组成新的关系
- 选择
-
-
关系的完整性约束
-
实体完整性
- 主属性值(主关系键的值)不能取空值
-
参照完整性(引用完整性)
-
- 从表参照主表—>从表所做的操作,必须询问主表的意见,主表有的,才能做对应操作;主表没有,就不能进行操作
- 从表中列不是随便参照主表的某个列,必须要求参照主表的这个列必须是主键或唯一约束
-
-
域完整性(用户定义完整性)
- 限制某个列的取值要求,把取值固定在一个有效的集合范围
-
-
三范式
-
关系模式的规范化
- 关系模式要满足的条件成为规范化形式,简称范式
- 目的:为了消除存储异常,减少数据冗余,保证数据的完整性和存储效率,一般规范为3NF即可
-
第一范式 1NF
- 如果关系R的所有属性均为简单属性,即每个属性都是不可再分的,则称R满足第一范式
-
第二范式 2NF
- 如果关系R满足第一范式,且每一个非主键字段完全依赖于主键,则称R满足第二范式
-
第三范式
- 如果关系R满足第二范式,其非主键字段之间不存在依赖关系,则称R满足第三范式
- 一个基本的关系型数据库要满足第一范式;
- 一个完整的关系型数据库要满足第三范式
-
-
ER图
- E-R图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型
- 实体:矩形
- 属性:椭圆
- 联系:菱形
-
MySQL数据库的使用
-
常见数据库
- Oracle
- 应用广泛、功能强大,分布式数据库系统
- 可移植性号
- MySQL
- 开源、免费、与PHP组成经典的LAMP组合
- 快速的、可靠的和易于使用
- SQL Server
- Web上最流行的用于存储数据的数据库
- 易用性好但只能在Windows上运行
- Oracle
- 查看现有的数据库
- show databases;
- 创建数据库
- 格式:create database 数据库的名字;
- 删除自己的shujuku
- drop database 库名;
-
-
-
数据库建表原则和方式
-
MySQL数据类型分类
-
数值
- 整数类型:int
- 小数类型:decimal
- 小数格式:decimal(总长度,小数位)
- decimal(5,2) 要求传递过来的数据总长为5位,小数位2位 eg123.45
-
日期/时间
- 日期和时间类型位DATETIME、DATE、TIMESTAMP、TIME和YEAR
- 每个时间类型有一个有效值范围和一个“零”值,当指定不合法的MySQL不能表示的值时使用零值
-
-
字符串(字符)类型
- CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET
- CHAR 字符串的长度——定长
- VARCHAR 字符串的长度——变长
-
-
数据库建表方式和原则
-
表的创建语法
- Create table 表名( 属性名1 数据类型 [约束条件], 属性名2 数据类型 [约束条件], 属性名3 数据类型 [约束条件] );
- []括号内容为可选内容
- 最后一个属性后没有逗号
-
数据库中注释
- 单行注释 -- 注释内容
- 多行注释 、*/多行注释内容 、*
-
删除表
- drop table 表名;
- 删除多个表
- drop table 表名1,表名2...
-
修改表
- 添加列(属性)
- alter table 表名 add 属性名 数据类型;
- 删除列(属性)
- alter table 表名 drop 属性名;
- 修改属性
- alter table 表名 modify 属性名 数据类型;
- 修改字段名
- alter table 表名 change 就字段名 新字段名 数据类型;
- 添加列(属性)
-
显示表结构
- desc 表名;
-
实例 create datbase MYDB;
-- 先切换数据库,准确切换到要操作的数据库
use mydb;
-- 创建表 student(学号,姓名,年龄,性别)
Create table student( 学号 varchar(10) 姓名 varchar(15),
年龄 int,
性别 char(2) );
--创建员工信息表 员工编号 姓名 工资小数5,2 入职日期datetime
Create table 员工信息表( 员工编号 varchar(7) 姓名 varchar(15),
工资 decimal(5,2),
入职日期 datetime );
-- 删除student表
drop table student;
-- 删除员工信息表
drop table 员工信息表;
-- 给student表添加专业 字符串7
alter table student add 专业 varchar(7);
-- 给student表添加一个出生地 char(10)
alter table student add 出生地 char(10);
-- 删除student表中出生地
alter table student drop 出生地;
-- 更改student表中学号为整型
alter table student modify 学号 int;
-- 把员工信息表中员工编号改成工号
alter table 员工信息表 change 员工编号 工号 varchar(7);
--查看student表结构
desc student;
-
数据的完整性
-
存储在数据库中的数据应该保持准确性和可靠性。
-
-
实体完整性
-
对关系中的记录唯一性
-
定义表中的所有行能唯一的标识
-
表中主属性(字段)不能为Null且不能有相同值
-
一般用主键、唯一索引、unique关键字来实现
-
主键约束
-
主关键字primary key是表中的一个或多个字段,它的值用于唯一地标识表中的某一条记录
-
一个表中有且只有一个主键约束
-
创建表时指定主键
-
添加主键约束
-
建表时是直接添加
-
Create table 表名( 列名1 数据类型 primary key,
列名2 数据类型
);
-- 主键约束的名字写法:PK_列名
Create table 表名( 列名1 数据类型,
列名2 数据类型,
constraint 主键约束的名字 primary key(列名1)
);
Create table 表名( 列名1 数据类型,
列名2 数据类型,
primary key(列名1)
);
-
- 针对已经存在的表,添加主键约束
-
alter table 表名 modify 列名 数据类型 primary key;
alter table 表名 add primary key(列名); alter table 表名 add costraint 主键约束的名字 primary key(列名);
-
-
- 删除主键约束
- alter table 表名 drop primary key;
-
- 联合主键
- 把两个列看成是一个整体,这个整体不为空、唯一、不重复
- 创建表的同时创建联合主键
-
-- 主键约束的名字写法:PK_列名
Create table 表名( 列名1 数据类型,
列名2 数据类型,
constraint 主键约束的名字 primary key(列名1,列名2)
);
Create table 表名( 列名1 数据类型,
列名2 数据类型,
primary key(列名1,列名2)
);
-
- 针对已经存在的表
-
alter table 表名 add primary key(列名1,列名2); alter table 表名 add costraint 主键约束的名字 primary key(列名1,列名2);
-
-
唯一约束
- 指定table的列或列组合不能重复,保证数据的唯一性
- 不允许出现重复的值,但可以为多个null
- 同一个表可以有多个唯一约束,多个列组合的约束
- 如果不给唯一约束名称,就默认和列明相同
- MySQL会给唯一约束的列上默认创建一个唯一索引
- 添加唯一约束
- 创建表的同时创建
-
-- 唯一约束的名字写法:UN_列名
Create table 表名( 列名1 数据类型,
列名2 数据类型,
constraint 唯一约束的名字 unique(列名1),
constraint 唯一约束的名字 unique(列名2)
);
Create table 表名( 列名1 数据类型 unique,
列名2 数据类型 unique,
列名3 数据类型
);
-
- 针对已存在的表
- alter table 表名 add unique(列名1[,列名2]);
- 创建表的同时创建
- 删除唯一约束
- alter table 表名 drop index 唯一约束的名字
-
-
域完整性
- 对数据表中字段属性的约束
- 由确定表结构时所定义的字段的属性决定的
- 限制数据类型、缺省值、规则、约束、是否为空
- 域完整性可以确保不会输入无效的值
-
默认约束
- default
- 当默认约束来修饰某个列的时候,修饰的列即使不写数据也会默认一个值
- 创建表的同时创建
-
Create table 表名( 列名1 数据类型 default ‘字符串类型或者日期类型的默认值’,
列名2 数据类型 default 数值,
列名3 数据类型
);
-
-
针对已经存在的表
-
alter table 表名 modify 列名 数据类型 default '值',
-
-
删除默认约束
-
alter table 表名 modify 列名 数据类型,
-
-
非空约束
-
not null
-
在创建表的同时创建
-
-- 主键约束的名字写法:PK_列名
Create table 表名( 列名1 数据类型 not null,
列名2 数据类型 not null,
列名3 数据类型
);
-
- 针对已经存在的表创建
- alter table 表名 modify 列名 数据类型 not null,
- 删除非空约束
- alter table 表名 modify 列名 数据类型,
-
-
参照完整性
- 表与表之间的数据参照引用
- 使用外键约束实现
- 外键约束
- 外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系
- 表的外键值必须在主表中能找到
- 当主表的记录被从表参照时,主表的记录将不允许删除
- 如果要删除数据,需要先删除从表中依赖该记录的数据
- 创建表的同时创建外键约束
-
主表
Create table 表名(
列名1 数据类型 primary key,
列名2 数据类型
);
从表 FK_列表
Create table 表名(
列名1 数据类型,
列名2 数据类型,
constraint 外键约束的名字 foreign key(从表的列名) reference 主表表名1(列名1)
);
!!
关于引用的列的要求:从表的列和主表的列,列明可以不一样,但是这两个列的数据类型和内容必须保持一致
-
- 针对已经存在的表添加
- alter table 从表表名 constraint 外键约束的名字 foreign key(从表的列名) reference 主表表名1(主表列名);
- 删除外键约束
- alter table 表名 drop foreign key 外键约束的名字;
-
-
-
使用标准SQL增删改
-
SQL语言
- 一种数据库查询和设计语言
- 使得数据库可以通过命令行的方式而非图形化界面的方式对表进行增删改查等操作
- SQL是一门独立的语言,在开发语言中可以嵌入SQL语言对数据库进行操作
-
DDL语句
- 数据库定义语言
- create 创建库表
- alter 修改表
- drop 删除库表
-
DML语言
- 数据库操作语言,对表中数据的操作
- insert 插入(增)
- delete 删除(删)
- update 更新(改)
-
DML-INSERT
- 对表进行新增记录
- 插入的值和列要保持一一对应
-
insert into 表名(列名1,列名2,...) values(值1,值2,...); insert into 表名 values(值1,值2,...); insert into 表名 values(值1,值2,...),(值1,值2,...),(值1,值2,...),...;
-
DML-DELETE
-
对表的数据进行删除
-
和drop区别
-
delete仅限于把表中数据给删除,表还留着
-
drop是把表和数据一并删除
-
-
delete from 表名; 把整个表中的数据全部删除 delete from 表名 where 条件; 根据条件删除 and 多个条件同时满足
or 多个条件只需要满足其中一个
-
-
DML-UPDATE
-
对表的数据进行修改
-
update 表名 set 列名=值; update 表名 set 列名1=值1,列名2=值2....; update 表名 set 列名=值 where 条件;
-
-
查询数据
-
SELECT语句
- select 列名 form 表名;
- select 列名1,列名2,... form 表名;
- * 所有
- 使用关键词DISTINCT查询
- select distinct 列名 from 表名;
- 使用别名查询
- select 列名 '别名' from 表名;
- select 列名1 '别名1',列名2 '别名2',... from 表名;
- select 列名 as '别名' from 表名;
- select 列名1 as '别名1' ,列名2 as '别名2' ,... from 表名;
- 选择查询
- 一般查询都不是对全表所有行的查询,用到where子句
- select 列名 from 表名 where 条件;
- 比较搜索条件
- 比较运算符
- 逻辑运算符
- and 连接多个条件 必须同时满足
- or 连接多个条件 只需要满足其中一个
- 比较运算符
- 范围搜索条件
- 范围搜索返回介于两个指定值之间的所有值
- 包括范围 between
- 排除范围 not between
- 列表搜索条件
- in 关键字使用户可以选择和列表中的任意值匹配的行
- select 列名 from 表名 where 列名 in(值1,值2,..);
- 搜索条件中的字符匹配符
- like 关键字搜索与指定模式匹配的字符串、日期或时间值。
- select 列名 from 表名 where 列名 like '字符模式';
- 涉及空值的查询
- 空值NULL在数据库中表是不确定的值
- 判断某个值是否为NULL值,不能使用普通的比较运算符
- 判断取值为空的语句: 列名 is NULL
- 判断取值不为空的语句: 列名 is not NULL
- 聚合函数
- sum([DISTINCT]<列名>)——计算列总和
- avg([DISTINCT]<列名>)——计算列平均值
- max([DISTINCT]<列名>)——计算列最大值
- min([DISTINCT]<列名>)——计算列最小值
- count(*)——统计表中元组个数
- count([DISTINCT]<列名>)——统计列值个数
- select 聚合函数 from 表名;
- MySQL的行数限定
- select 列名 from 表名 limit [指定开始查询的行,] nums;
- select * from student limit 1,3;
- 数据分组
- group by 语句用于结合合计函数,根据一个或多个列对结果集进行分许
- select 列名,聚合函数 from 表名 group by 列名;
- 分组
- 先查询结果(先统计处相关的总数或者总和)
- 再进行分组(根据某个列来进行分组)
- having通常和group by子句一起使用,相当于一个用于组的where子句
- having子句可以包含聚合函数,但where不可以
- 排序
- order by 语句用于对指定的结果集进行排序
- order by 语句默认升序
- 降序排序可以使用 desc 关键字
- select * from 成绩表 order by 成绩 [desc];
-
-
MySQL函数
-
字符串函数
-
数学函数
-
日期时间函数
-
控制流函数
-
-