数据库复习总结

规范化理论

在关系模式R(U)中,对于U的子集X和Y,

     如果X→Y,但Y Í X,则称X→Y是平凡的函数依赖

      若X→Y,但Y Í X,   则称X→Y是平凡的函数依赖

在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’     Y, 则称Y对X完全函数依赖,记作 X    F    Y。

  若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X   P   Y。

在R(U)中,如果X→Y,(Y ÍX) ,Y→X Y→Z, 则称Z对X传递函数依赖。记为:X → Z

              注: 如果Y→X, 即X←→Y,则Z直接依赖于X。

  1. KR<U,F>中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。
    • 如果U部分函数依赖于K,即K → U,则K称为超码(Surpkey)。
    • 候选码是最小的超码,即K的任意一个真子集都不是候选码。
  2. 若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。

包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)

不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)

数据库概念

什么是数据管理 • 对数据进行收集、分类、组织、编码、存储、检索和维护一系列活动的总和

数据库系统的特点: • 数据结构化 • 数据的共享性高,冗余度低且易扩充 • 数据独立性高 • 数据由DBMS统一管理和控制

数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据 的集合。

net stop mysql80 (手动关闭mysql服务)

net start mysql80 (手动打开mysql服务)

mysql -u root -p(这句话要在cmd 模式下进行,切记不是管理员模式)

单行注释 --或者#

多行注释 /* 内容*/

DDL 数据库定义语言

show databases;显示所有数据库     select database();显示当前数据库

create database if not exists 数据库名 default charset 字符集(例: utf8mb4、UTF-8)

drop database if exists 数据库名 删除数据库   use 数据库名 切换数据库

show tables;查询当前数据库下所有的表   desc 表名,查看表的结构

show create table 表名 显示表的创建语句

表修改操作

添加属性列

Alter table 表名 ADD 字段名 类型长度【comment 注释】【约束】;

例:alter TABLE film add movieID1 VARCHAR(255) COMMENT'电影ID1';

修改数据类型
alter table 表名 modify 字段名 新数据的类型;

修改字段名和字段类型

alter table 表名 change 旧字段名 新字段名 数据类型 类型长度【comment注释】【约束】

ALTER TABLE film CHANGE movieID1 movieID2 VARCHAR(20) comment'电影ID2';

删除字段

alter table  表名 drop 字段名;

修改表名

alter table 表名 rename to 新表名 例子:alter table film rename to film1;

删除表

drop table if exists 表名;

删除指定表,并重建表
truncate table 表名;

DML 数据库操作语言

添加单条数据

insert into 表名(字段名1,字段名2.……) values(数据1,数据2……)

insert into 表名 values (值1,值2……)

批量添加数据

insert into 表名(字段名1,字段名2.……) values(数据1,数据2……),(值1,值2……)

insert into 表名 values (值1,值2……),(值1,值2……)

修改数据

update 表名 set 字段1=值1,字段2=值2,字段3=值3【where 条件】;

删除数据

delete from 表名 【where 条件】

delete from 表名;   清空表中所有数据

DQL 数据库查询语言

select 字段名 from 表名 【where 条件表达式】【group by 列名】【having 条件表达式】【order by 列名 【ASC|DESC】】 ASC表示升序,DESC表示降序

select distinct 字段名 from表名;

字段设置别名

select 字段名(as 别名),字段名【as 别名】 from 表名;

条件语句

between and 包括最小值和最大值

in(数值1,数值2……)在数值中多选一

like 近似匹配,_表示单个字符,%匹配任意个字符

is null 表示为空,AND &&表示并且,OR ||表示或者,NOT !表示非

聚合函数

select 聚合函数(字段名) from 表名;

count 统计数量 max最大值,min最小值avg 平均值 sum求和

分组查询

select 字段名 from 表名 【where 条件】group by 分组字段名 【having 分组后过滤条件】

例:select gender, avg(age) from emp group by gender ;(根据性别分组,统计男性员工和女性员工的平均年龄)

select 字段名 from 表名 order by 字段名1 排序方式,字段名2 排序方式;

分页查询:
select 字段名 from 表名 limit 起始索引,查询记录数;

DCL 数据库控制语言

六类字段:1.客户端访问服务器的字段2.验证用户身份字段3.安全连接字段4.资源限制字段。5.权限字段6.账户是否被锁定字段。

创建用户

CREATE USER  ‘用户名’@‘主机名’ [ IDENTIFIED BY [ PASSWORD ] ‘密码’ ] [ ,用户 [ IDENTIFIED BY [ PASSWORD ] ‘密码' ]]

SELECT host, user FROM mysql.user;(查看是否被创建)

DROP USER [IF EXISTS] 账户名 [, 账户名] …;删除用户

mysqladmin –u 用户名 [–h 主机地址] –p password 新密码    修改密码

ALTER USER 账户名 IDENTIFIED BY '明文密码'; 设置密码

内置函数,调用方法 select 函数;

函数

功能

CONCAT(S1,S2,...Sn)

字符串拼接,将S1,S2,... Sn拼接成一个字符串

LOWER(str)

将字符串str全部转为小写

UPPER(str)

将字符串str全部转为大写

LPAD(str,n,pad)

左填充,用字符串pad对str的左边进行填充,达到n个字符 串长度

RPAD(str,n,pad)

右填充,用字符串pad对str的右边进行填充,达到n个字符 串长度

TRIM(str)

去掉字符串头部和尾部的空格

SUBSTRING(str,start,len)

返回从字符串str从start位置起的len个长度的字符串

函数

功能

CEIL(x)

向上取整

FLOOR(x)

向下取整

MOD(x,y)

返回x/y的模

RAND()

返回0~1内的随机数

ROUND(x,y)

求参数x的四舍五入的值,保留y位小数

函数

功能

CURDATE()

返回当前日期

CURTIME()

返回当前时间

NOW()

返回当前日期和时间

YEAR(date)

获取指定date的年份

MONTH(date)

获取指定date的月份

DAY(date)

获取指定date的日期

DATE_ADD(date, INTERVAL expr type)

返回一个日期/时间值加上一个时间间隔expr后的时间值

DATEDIFF(date1,date2)

返回起始时间date1 和 结束时间date2之间的天数

函数

功能

IF(value , t , f)

如果value为true,则返回t,否则返回 f

IFNULL(value1 , value2)

如果value1不为空,返回value1,否则 返回value2

CASE WHEN [ val1 ] THEN [res1] ... ELSE [ default ] END

如果val1为true,返回res1,... 否 则返回default默认值

CASE [ expr ] WHEN [ val1 ] THEN [res1] ... ELSE [ default ] END

如果expr的值等于val1,返回 res1,... 否则返回default默认值

select id, name,

(case when math >= 85 then '优秀' when math >=60 then '及格' else '不及格' end ) '数学', (case when english >= 85 then '优秀' when english >=60 then '及格' else '不及格' end ) '英语', (case when chinese >= 85 then '优秀' when chinese >=60 then '及格' else '不及格' end ) '语文' from score;

关系

候选码(Candidate key):若关系中的某一属性组的值能唯 一地标识一个元组,则称该属性组为候选码。

简单的情况:候选码只包含一个属性

全码(All-key):关系模式的所有属性是这个关系模式的候选 码,称为全码。

主码(Primary key):若一个关系有多个候选码,则选定其 中一个为主码。

主属性(Primary /attribute):候选码的诸属性称为主属性。

不包含在任何候选码中的属性称为非主属性或非码属性

基本关系的6条性质:

① 列是同质的,即每一列来自同一个域

② 不同的列可出自同一个域  

其中的每一列称为一个属性

    不同的属性要给予不同的属性名

③ 列的顺序无所谓,列的次序可以任意交换

④ 任意两个元组的候选码不能相同

⑤ 行的顺序无所谓,行的次序可以任意交换

⑥ 分量必须取原子值,即每一个分量是不可分的数据项。

R(U,D,dom,F)

R 关系名

U 组成该关系的属性名集合

D 属性组U 中属性所来自的域

dom 属性向域的映象集合

F 属性间的数据依赖关系集合

关系模式 

对关系的描述

静态的、稳定的

关系

关系模式在某一时刻的状态或内容

动态的、随时间不断变化的

完整性规则

实体完整性规则的说明

(1)实体完整性规则是针对基本关系而言的。 一个基本表通常对应现实世界的一个实体集。 (2)现实世界中的实体是可区分的,即它们具有某种唯 一性标识。

(3)关系模型中以主码作为唯一性标识。

(4)主码中的属性即主属性不能取空值。

概括为一句话,即主码的属性值不能为空

p 设F 是基本关系R 的一个或一组属性,但不是关系R 的码。

如果F与基本关系S的主码Ks 相对应,则称F是 基本关系R 的外码.

 基本关系R 称为参照关系(Referencing Relation)

基本关系S称为被参照关系(Referenced Relation)或目标 关系(Target Relation)

谁是主码谁就是被参照关系。

关系R和S不一定是不同的关系 š

目标关系S的主码Ks 和参照关系的外码F必须定义 在同一个(或一组)域上 š

外码并不一定要与相应的主码同名

参照完整性规则

若属性(或属性组)F 是基本关系R 的外码,它与基本关系 S的主码Ks相对应(基本关系R 和S 不一定是不同的关 系),则对于R 中每个元组在F 上的值必须为:

· 或者取空值(F 的每个属性值均为空值)

· 或者等于S中某个元组的主码值

用户定义完整性是针对某一具体关系数据库的约束条件,反应某一具体应用所设计的数据必须满足的语义要求。

关系操作

五种基本关系操作,选择,投影,并,差,笛卡尔积

全部:选择,投影,连接,除,并,差,交,笛卡尔积

运 算 符 含 义 集合 运算符 ∪ 并 - 差 ∩ 交 × 笛卡尔积 专门的 关系 运算符 σ 选择 π 投影 连接 ÷ 除

传统的集合运算:并,差,交,笛卡尔积

专门的关系运算:选择,连接,投影,除

选择是以行的角度进行运算的  选择的结果是表中的某几行

投影是以列的角度进行运算的 投影的结果是表中的某几列

等值连接是根据给定的条件进行两表的连接,自然连接不同于等值连接的地方就是会去掉重复列。

左外连接,只保存左边关系中的元组

右外连接:只保存右边关系中的元组

关系代数表达式的优化指的是 提前做选择操作,每个操作后先做投影操作

完整性阐释

数据库的完整性

数据的完整性与相容性

数据的完整性和安全性是两个不同概念 –

数据的完整性与安全性

数据的完整性

防止数据库中存在不符合语义的数据和不正确的数据

防范对象:不合语义的、不正确的数据

–数据的安全性 保护数据库防止恶意的破坏和非法的存取

防范对象:非法用户和非法操作

实体完整性定义就是定义主键的存在

列级约束与表记约束两种情况

单个主码定义可以采用列级约束与表级约束,多个主码要定义时采用表级约束

实体完整性检查

(1)检查主码值是否唯一,如果不唯一则拒绝插入或修改;

(2)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。

定义表之后添加主键:
alter table 表名 add primary key (字段列表)

删除主键:
alter table 表名 drop primary key;

参照完整性

表级约束例子:FOREIGN KEY (Sno) REFERENCES Student(Sno),

参照完整性检查与违约处理

  1. 拒绝(no action)2.级联(cascade)3.设置为空值(set-null)

显式说明

FOREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADE /*当删除“学生表”中的元组时,级联删除SC表中相应的元组*/ ON UPDATE CASCADE, /*当更新“学生表”中的“学号”属性时,级联更新SC表中相应的元组*

添加外键

ALTER TABLE teacher2  ADD CONSTRAINT fk_teacher_dept2  FOREIGN KEY(deptId) REFERENCES teacher_dept1(id);

删除外键:
alter table 表名 drop foreign key 外键名;

用户定义完整性

not null 不为空,unique not null 唯一且不为空

check短语:Ssex CHAR(2) CHECK (Ssex IN (‘男’,’女’)), /*性别属性Ssex只允许取‘男’或‘女’ */

完整性约束命名语句
constraint <完整性约束条件名><完整性约束条件>

触发器

触发器的创建

CREATE TRIGGER 触发器名{BEFORE|AFTER} ON 表名FOR EACH {ROW|STATEMENT}触发体

触发器类型:
1.insert触发器,NEW代表已经插入或者即将插入的数据

  1. update触发器,OLD代表修改之前的数据,NEW代表修改之后的数据
  2. delete触发器,OLD代表已经删除或者即将被删除的数据

单独的触发器没有,后面必须接操作。

删除触发器

DROP TRIGGER触发器名字

修改表添加唯一约束

alter table 表名 add constraint约束名 unique(属性名);

删除唯一约束

alter table 表名drop index 约束名;

添加检查约束

alter table 表名 add constraint 检查名 check(检查条件);

删除检查约束

alter table 表名 drop constraint 检查名

Column添加非空约束与删除非空约束都是对属性名的修改

ALTER TABLE teacher_dept3  CHANGE COLUMN location  location VARCHAR(50) NOT NULL;

ALTER TABLE teacher_dept3  CHANGE COLUMN location location VARCHAR(50) NULL;

添加默认值约束删除默认值约束也是对属性名的修改

ALTER TABLE teacher_dept4  CHANGE COLUMN location  location VARCHAR(50) DEFAULT 'Shanghai';

ALTER TABLE teacher_dept4  CHANGE COLUMN location  location VARCHAR(50) DEFAULT NULL;

查询

select 字段列表 from 表1 join 表2 on 连接条件

自身连接查询

自身连接查询通过起别名的方式让两个属性可以进行比较

假设有一个表为C

select cx.cno,cy.cpno from c cx,c cy where cx.cpno=cy.cno;

外连接查询:


select 字段列表 from 表1 left outer join 表2 on 连接条件

右外连接同左外连接

嵌套查询

子查询的限制,不能用order by

三种情况

子查询返回一个值

直接采用等式不等式进行查询

子查询返回一组值

采用any 与all进行查询,any任意一个值 ,all 所有的值

使用exists谓词

exists对子查询 不返回一个值,返回的是TRUE或者FALSE。

集合查询

并操作 UNION 交操作 intersect 差操作 except

视图

创建视图

create view 视图名【列名】as <子查询> [with check option];

• WITH CHECK OPTION

• 对视图迚行UPDATE,INSERT和DELETE操作时要保证更新、插入,删除的行满足视图定义中的谓词条 件(即子查询中的条件表达式)

• 子查询可以是仸意的SELECT语句,是否可以含有ORDER BY子句和DISTINCT短语,则决定具体系统的实 现

视图的属性列名全部省略或者是全部列出,不能仅仅只列一部分

当需要对视图保持条件永远成立的时候加入 with check option

删除视图

drop view 视图名[cascade](cascade表示级联删除)

带表达式的视图必须明确定义组成视图的各个属性列名

视图的作用

  1. 简化用户的操作
  2. 使用户能从多种角度看待同一数据
  3. 对重构数据库提供了一定程度的逻辑独立性
  4. 能够对机密数据提供安全保护
  5. 适当的利用视图能够更清晰的表达查询

存储过程

特点:1.封装、复用 2.可以接受参数也可以返回数据 3.减少网络交互,效率提升

创建存储过程

create procedure 存储过程名称(参数列表)

begin

sql语句

end

调用存储过程 call 存储过程名称【参数】

查看:show create procedure 名称;

删除存储过程:drop procedure if exists 存储过程名称

修改结束命令

delimiter @@

例:

delimiter @@

CREATE PROCEDURE f1()

BEGIN

select COUNT(*) from spj;

end @@

(此时;不再是语句结束的标志,变成了@@

变量

三种变量:系统变量,用户定义变量,局部变量

系统变量

全局变量和会话变量

用户定义变量

赋值:1.set @var_name=expr[,@vartime=expr]……;

2. set @var_name:=expr[,@var_name:=expr]……;

3.select @var_name :=expr [,@var_name :=expr]……;

4.select 字段名 into @var_name from 表名;

使用:select @var_name;

局部变量:
声明:declare变量名 变量类型 【default】;

赋值:set变量名=值;

set变量名:=值;

select 字段名 into 变量名 from 表名;

if语句

If 条件 THEN

elseIF 条件2 Then

Else

end if;

存储过程

in 该类参数作为输入,也就是需要调用时传入值;

out 该类参数作为输出,也就是改参数可以作为返回值

inout 既可以作为输入参数,也可以作为输出参数;

create procedure 存储过程名字(【in/out/inout 参数名 参数类型】)

beigin

sql语句

end;

case 语句

例子:
create procedure p6(in month int)

begin

 declare result varchar(10);

case when month >= 1 and month <= 3 then

 set result := '第一季度';

when month >= 4 and month <= 6 then

set result := '第二季度';

when month >= 7 and month <= 9 then

 set result := '第三季度';

when month >= 10 and month <= 12 then

set result := '第四季度';

else set result := '非法参数';

end case ;

select concat('您输入的月份为: ',month, ', 所属的季度为: ',result);

end;

 call p6(16);

where语句

where 条件 do

sql 语句

end while

repeat语句

repeat

sql逻辑

until 条件

end repeat

loop语句:
begin_label:loop

sql 逻辑

end loop end_lable

level lable 退出指定标记的循环体

游标

声明游标:
declare 游标名称 cursor for查询语句;

打开游标;

open 游标名称;

获取游标记录;

FETCH 游标名称 into 变量【,变量】;

关闭游标:
close 游标名称;

逻辑1.声明游标,存储查询结果集2.准备:创建表结构3.开启游标,4.获取由表中的记录5.插入到新表中6.关闭游标

存储函数

create function 存储函数名称(【参数列表】)

returns type [characteristic]

begin

sql语句

return。。。。。。;

end;

characteristic说明:

 •DETERMINISTIC:相同的输入参数总是产生相同的结果

•NO SQL :不包含 SQL 语句。 •READS SQL DATA:包含读取数据的语句,但不包含写入数据的语句。

调用函数:
select 函数名(参数);

查看函数定义

show create function 函数名;

删除函数:
drop function 函数名;

事务

定义::是一组操作系列的集合,它是一个不可分割的工作单位,事务会把所有的操作作 为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

事务是恢复和并发控制的基本单位

COMMIT

• 事务正常结束

• 提交事务的所有操作(读+更新)

• 事务中所有对数据库的更新写回到磁盘上的物理数据库中

ROLLBACK

• 事务异常终止

• 事务运行的过程中发生了故障,不能继续执行

• 系统将事务中对数据库的所有已完成的操作全部撤销

• 事务滚回到开始时的状态

start transaction;开始事务

SET @@autocommit = 0 ;关闭自动提交功能;直到遇到commit或者rollback

事务的特性ACID特性:
1.原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败
2.一致性:事务完成是必须所有的数据保持一致的状态
3.隔离性:数据库系统提供的隔离机制,保证事务不受外部并发操作影响的环境下运行
4.持久性:事务一旦提交或者回滚,他对数据库中数据的改变就是永久的

并发控制

事务并发执行带来的问题:1.会产生多个事务同时存取同一数据的情况,2.可能会存取和存储不正确的数据,破坏事务的隔离性和数据库的统一性

并发操作带来的数据不一致性:1.丢失修改,2.不可重复读,3.读‘脏数据‘

查看事务隔离级别:
select @@transaction_isoLation;

并发控制的主要技术:
1.封锁 2.时间戳3.乐观控制法4.多版本并发控制

封锁

封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求, 对其加锁

加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务 不能更新此数据对象。

基本封锁类型

排他锁(X锁) 共享锁(S锁)

排它锁X又称为写锁

• 若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A 加任何类型的锁,直到T释放A上的锁

 • 保证其他事务在T释放A上的锁之前不能再读取和修改A

封锁协议

一级封锁协议
事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。

可防止丢失修改,并保证事务T是可恢复的,不能保证可重复读和不读脏数据

二级封锁协议

一级封锁协议加上事务T在读数据R之前必须先对其加S锁,读完后即可释放s锁

二级封锁协议可以防止丢失修改和读‘脏数据’。

三级封锁协议

一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。

三级封锁协议可防止丢失修改、读脏数据和不可重复读

避免活锁,采用先来先服务的策略

DBMS在解决死锁的问题上更普遍的是采用诊断并接触死锁的方法

死锁的诊断:超时法,等待图法

可串行化调度 • 可串行化(Serializable)调度:多个事务的并发执行是正确的,当且仅当其结果与按某 一次序串行地执行这些事务时的结果相同 • 可串行性(Serializability)是并发事务正确调度的准则。 一个给定的并发调度,当且 仅当它是可串行化的,才认为是正确调度

冲突可串行化

不能交换的动作:
同一事务的两个操作,不同事务的冲突操作

可串行化调度,不一定满足可串行化条件,但是满足冲突可串行化条件的是可串行化调度。

两段锁的含义:
第一阶段是获得封锁,也称为扩展阶段

Ø事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁 •

 第二阶段是释放封锁,也称为收缩阶段

 Ø事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁

遵守两段锁协议的一定是可串行化调度,但是可串行化调度不一定遵守两段锁协议

数据库恢复

恢复机制涉及的两 个关键问题一是如何建立冗余数据,一是如何利用这些冗余数据实施数据库恢复。

数据库管理系统对故障的对策 ü 保证故障发生后,能把数据库中的数据从错误状态恢复到某种逻辑一致的状态 ü 保证事务ACID ü DBMS提供恢复子系统 • 恢复技术是衡量系统优劣的重要指标

故障分类

事务故障 恢复的本质:撤销事务

系统故障 系统重新启动时,恢复程序让所有非正常种植的事务回滚,强行撤销()UNDO事务

介质故障

系统必须具有检测故障并把数据库从错误状态中恢复到某一正确状态的功能, 这就是数据库恢复。 Ø 数据库恢复的基本原理就是利用存储在系统其他地方的冗余数据来修复

建立索引:
create 【unique】[fulltext] index 索引名 on 表名(列名次序)

表名:要建立索引的基本表的名字

列名 可以建立在该表的一列或多列上,各列名之间用逗号分割

次序:指定索引值的排列次序,升序ASC 降序DESC 缺省值ASC

unique 此索引的每一个索引值只对应唯一的数据记录

fulltext 建立的索引是全文索引

查看索引:
show index from table_name(表名);

修改索引:
alter table 表名 add index 索引名【索引名类型】(列名)

ALTER INDEX 旧索引名RENAME TO 新索引名

删除索引:
drop Index 索引名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值