数据库原理
2024-12-18 17:25:43 0 举报
AI智能生成
数据库原理作业
作者其他创作
大纲/内容
数据库系统的基本原理
数据库系统的应用
数据库的四个基本概念
数据data
数据库DB
数据库管理系统
数据库系统
数据模型
数据结构、数据操作、完整性约束
概念模型(ER图)、逻辑模型(层次、网状、关系)、物理模型
三级模式(模式、内模式、外模式)
关系数据模型
关系模式、关系、关系数据库
关系
形式化主义
完整性:实体、参照性、用户定义
关系代数:交、并、差、笛卡尔积、选择、投影、链接、除
关系数据库标准语言SQL
SQL语言的组成
数据定义语言DDL
创建;create
修改:alter
删除:drop
重命名:rename
数据操纵语言DML
增加:inser into 表名
修改:update 表名
删除:delete from 表名 where 条件
数据控制语言DCL
commit:提交数据到数据库进行保存
rollback:恢复初始状态
grant:授权
revoke:撤销
数据定义
数据库的定义和删除
创建数据库:create database 数据库名
选择数据库:use 数据库名
删除数据库:drop database 数据库名
数据类型
字符串类型
char(L):描述定长的字符串,L为字符串长度,范围0-255,比L大截断,比L小用空格填补
varchar(L):描述变长的字符串,L为字符串长度,范围0-65535,比L大截断,比L小不会用空格填补
字符串值用单引号或双引号括起来,例如‘abc’“男”
数值类型
int:用于表示整数
decimal(p,s):表示所有数值数据,p表示数值数据最大长度,s表示数值诗句中小数点后的数字位数
日期和时间类型
date:用来保存固定长度的日期数据,格式为‘YYYY-MM-DD’
time:用来保存固定长度的时间数据,格式为‘HH:MM:SS’
datetime:用来保存固定长度的日期时间数据,格式为‘YYYY-MM-DD HH:MM:SS’
布尔类型
只有两个值——true和false即真值假值
基本表的定义、删除和修改
创建表:create table 表名(列名,数据类型,列约束)
修改表:alter table 表名(add/drop/modify/change)
删除表:drop table 表名
截断表:truncate table 表名
截断表:truncate table 表名
数据查询
基本查询
select 列名 from 表名 where...between...and...order by...desc...
结果去重:distinct 列名
分组查询
语法结构:select 列名 from 表名 where 条件 group by 分组依据
分组过滤:语法结构:select 列名 from 表名 where 条件 group by 分组依据 having 过滤规则
聚合函数
语法结构:select 聚合函数(列名)from 表名
sum(),求所有行中单列的总和
avg(),平均值
max(),最大值
min(),最小值
count(),总行数
子查询
语法结构:select 列名 from 表名 where 条件=(子查询)
枚举查询;select 列名 from 表名 where 列名 in (子查询结果)
select 列名 from (子查询的结果集) as 别名 where 条件
合并查询结果
select 语句1 union【all】 select 语句2
数据的维护
插入数据
insert into 表名(列名1,列名2)values(值1,值2)
insert into 表名 values(值1,值2,值3)
insert into 表名 values(值1,值2,值3)
更新数据
update 表名 set 列名=值 where 条件
更改整列:update 表名 set 列名=值
更改整列:update 表名 set 列名=值
删除数据
delete from 表名 where 条件
删除表中所有记录:delete from 表名 或 truncate table 表名
删除表中所有记录:delete from 表名 或 truncate table 表名
索引和视图
索引的创建与删除
创建索引:create index 索引名 on 表名(列名)
查看索引:show index from 表名
删除索引:drop index 索引名 on 表名
视图
创建视图;create view 视图名(别名) as select 语句
修改视图:alter view 视图名(别名) as select 语句
删除视图:drop view 视图名
关系模型的基本理论
关系模型的基本概念
基本术语
关系:用于描述数据的一张二维表,表的行成为元组,列成为属性
域:列(属性)的取值范围
候选键:也称候选码,唯一的标识关系中没一个元组的最小属性集,一个关系可能有多个候选键
主键:也称主码,它是一个唯一识别关系中元组的最小属性集合,用户可以从关系的候选键中指定一个作为关系的主键,一个关系最多只能指定一个主键,主键的列不能取null值
主属性:候选键中所有的属性都称为主属性
非主属性:不包含在任何候选键中的属性
全码:关系中所有属性的组合是该关系的一个候选码,则该候选码成为全码
外键:关系R中的某个属性K是另一个关系S中的主键,则K是R的外键
关系的特征
1.每一列中的分量是同一类型的数据,来自同一个域
2.不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名
3.各列的顺序在理论上是无序的
4.任意两个元组的候选码不能相同
5.行的顺序无所谓
6.每一个分量都必须是不可分的数据项
2.不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名
3.各列的顺序在理论上是无序的
4.任意两个元组的候选码不能相同
5.行的顺序无所谓
6.每一个分量都必须是不可分的数据项
数据库完整性
3类完整性规则
实体完整性规则
主键的各个属性都不能为空值
参照完整性规则
外键或者取空值(要求外键的每个属性均为空值),或者等于被参照关系中的主键的某个值
用户定义完整性规则
属性的取值应当满足用户定义的约束条件
MySQL提供的约束
主键约束:primary key
1.值唯一
2.不能为空值
2.不能为空值
唯一约束:unique
1.值唯一
2.可有一个且仅有一个空值
2.可有一个且仅有一个空值
检查约束:check(条件)
外键约束
被定义为外键的字段,其取值只能为主表中引用字段的值或null值
外键约束设定
实现两表外键约束,并指定为级联更新
constraint 约束名 foreign key(列名) references 另一个表名(列名) on update cascade
实现两表外键约束,并指定为级联删除
constraint 约束名 foreign key(列名) references 另一个表名(列名) on dedate cascade
触发器
create trigger 触发器名
before|after
insert|delete|update
on 表名
for each row
<触发体>
before|after
insert|delete|update
on 表名
for each row
<触发体>
关系代数(示例看书p113-120)
关系代数的基本操作
并
R∪S
差
R-S:保留属于R不属于S的元组
笛卡尔积
R×S:R中的每个元组与S中每个元组组合
投影
从R中选择出若干属性列组成新的关系
选择
运算对象:可以是常数,或属性名、列的序号
运算符:算术比较运算符(<、>、<=、>=、=、≠)和逻辑运算符(逻辑与、逻辑或、逻辑非)
关系代数的四个组合操作
交
连接
自然连接
除
数据库编程
mysql编程基础
常量
字符串常量:指用单引号或双引号括起来的字符序列
数值常量:可以分为整数常量和小数常量
日期和时间常量:使用特定格式的字符日期值表示,用单引号括起来。例:‘2023/01/01’
布尔值常量
只有true和false两个值,SQL命令的运行结果用1代表true,用0代表false
变量
局部变量
定义与赋值:SET@局部变量名=表达式1,@局部变量名=表达式2....
局部变量的显示:select@局部变量名,@局部变量名...
全局变量
全局变量名称 说明
@@back_log 返回MySQL主要链接请求的数量
@@basedir 返回MySQL安装基准目录
@@license 返回服务器的许可类型
@@port 返回服务器侦听TCP/IP连接所用的端口
@@storage_engine 返回储存引擎
@@version 返回服务器版本号
@@back_log 返回MySQL主要链接请求的数量
@@basedir 返回MySQL安装基准目录
@@license 返回服务器的许可类型
@@port 返回服务器侦听TCP/IP连接所用的端口
@@storage_engine 返回储存引擎
@@version 返回服务器版本号
常用系统函数
字符串函数
计算字符串字符数和字符串长度
计算字符串字符数和字符串长度:select char_length('中国')字符数,length('中国')字符串长度
CHAR_LENGTH(str):返回字符串str所包含的字符个数
LENGTH(str):返回字符串的字节长度的。汉字为3字节,数字或字母1字节
合并字符串函数
concat(s1,s2,...)返回链接参数产生的字符串,如果任何一个参数为null则返回值为null
字符串大小写转换函数
lower(str):将字符串str中的字母字符全部转换成小写字母
upper(str):将字符串str中的字母字符全部转换成大写字母
删除空格函数
ltrim(str):返回删除前导空格的字符串str
rtrim(str):返回删除尾部空格的字符串str
trim(str):返回删除两侧空格的字符串str
取子串函数
substring(str,start,length):返回字符串str从start开始长度为length的子串
数学函数
ABS(x):返回x的绝对值
PI():返回圆周率Π的值
SQRT():返回非负数的二次方根
MOD(m,n):返回m被n除后的余数
round(x,y):把x四舍五入到y指定的精度返回,如果y为负数,则将保留x值到小数点左边y位
日期和时间函数
获取当前系统的日期及取日期的年、月、日的函数
curdate():返回当前日期系统,格式为‘YYYY-MM-DD’
year(d)、month(d)、day(d):分别返回日期或日期时间d的年、月、日的值
例:select curdate(),year(curdate()),month((curdate)),day(curdate())
获取当前系统的日期时间的函数
CURRENT_TIMESTAMP()、LOCALTIME()、NOW()和SYSDATE()都返回当前系统的日期时间,格式为‘YYYY-MM-DD HH:MM:SS’
系统信息函数
USER():返回当前登录的用户名
DATABASE():返回当前所使用的数据库的名
VERSION():返回MySQL服务器版本号
条件控制函数
IF()函数
格式:IF(条件表达式,v1,v2) :如果条件表达式是真,则函数返回v1值,否则返回v2值
CASE()函数
格式:case 表达式 when v1 then r1 when v2 then r2......[else rn] end :如果表达式的值等于某个vn则返回对应位置then后的结果,如果与前面的值都不想等,则返回else后面的rn
程序控制流语句
语句块、注释和重置命令结束标记
语句块
BEGIN...END
用法:BRGIN
SQL语句|SQL语句块
END
SQL语句|SQL语句块
END
注释
单行注释
使用“#”符号作为单行语句的注释符,写在需要注释的行或语句后面
多行注释
使用/*和*/括起来可以连续书写多行注释语句
重置命令结束标记
DELIMITER 符号
存储函数
存储函数的创建
create function 函数名(参数名 参数数据类型)
returns 函数返回值的数据类型
begin
函数体
return 语句;
END
returns 函数返回值的数据类型
begin
函数体
return 语句;
END
调用存储函数
select 函数名(参数值)
删除存储函数
drop function 函数名
条件判断语句
程序中变量的使用
声明变量
declare 局部变量名(,局部变量名,...)数据类型(default 默认值)
为变量赋值
set 局部变量名=表达式1(,局部变量名=表达式2)
IF语句
形式一
if 条件 then
SQL语句块1;
else
SQL语句块2;
end if;
SQL语句块1;
else
SQL语句块2;
end if;
形式二
if 条件 then
SQL语句块1;
elseif 条件2 then
SQL语句块2;
...
else
SQL语句块n;
end if;
SQL语句块1;
elseif 条件2 then
SQL语句块2;
...
else
SQL语句块n;
end if;
case语句
形式一
case 表达式
when 表达式值1 then SQL 语句块1;
when 表达式值2 then SQL 语句块2;
...
when 表达式值n then SQL语句块n;
[else SQL语句块n+1;]
end;
when 表达式值1 then SQL 语句块1;
when 表达式值2 then SQL 语句块2;
...
when 表达式值n then SQL语句块n;
[else SQL语句块n+1;]
end;
形式二
case 表达式
when 条件1 then SQL 语句块1;
when 条件2 then SQL 语句块2;
...
when 条件n then SQL语句块n;
else SQL语句块n+1;
end;
when 条件1 then SQL 语句块1;
when 条件2 then SQL 语句块2;
...
when 条件n then SQL语句块n;
else SQL语句块n+1;
end;
循环语句
loop循环
标签:LOOP
SQL语句块;
IF 条件表达式 THEN
LEAVE标签;
END IF;
END LOOP;
SQL语句块;
IF 条件表达式 THEN
LEAVE标签;
END IF;
END LOOP;
while循环
while 条件表达式 do
SQL语句块;
end while;
SQL语句块;
end while;
repeat循环
repeat
SQL语句块;
until 条件表达式;
end repeat;
SQL语句块;
until 条件表达式;
end repeat;
存储过程
创建存储过程
create procedure 存储过程名()
begin
过程体;
end
begin
过程体;
end
调用存储过程
call 存储过程名();
存储过程的参数
create procedure 存储过程名(
[in|out|inout]参数1数据类型,
[in|out|inout]参数2数据类型,...)
begin
过程体;
end
[in|out|inout]参数1数据类型,
[in|out|inout]参数2数据类型,...)
begin
过程体;
end
in参数:为输出参数,参数值由调用者传入,并且只能够被存储过程读取
out参数:为输出参数,参数值由存储过程写入,out类型的参数适用于存储过程向调用者返回多条信息的情况
inout参数:可以接收一个值,但是不能在过程中修改这个值
删除存储过程
drop procedure 存储过程名
游标
游标的定义和使用
声明游标
declare 游标名 cursor
for select 语句;
for select 语句;
打开游标
open 游标名;
提取数据
fetch 游标名 into 变量名1,变量名2...
关闭游标
close 游标名;
异常处理
declare 错误处理类型 handler for 错误触发条件 自定义错误处理程序;
关系模型规范化设计理论
关系模式中可能存在的异常
可能存在的异常
数据冗余
冗余的表现是某种信息在关系中存储多次
插入异常
插入异常的表现是元组插入不进去
删除异常
删除异常的表现是删除时删掉了其他不应删除的信息
更新异常
更新异常的表现是修改一个元组却要求修改多个元组
函数依赖
函数依赖的定义
R(U)是属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,对于X的每一个具体值,Y都有唯一的具体值与之对应,则称X函数决定Y,或Y函数依赖于X,记作X→Y,称X为决定因素,Y为依赖因素。
发现函数依赖(P228-229)
根据完整的样本数据发现函数依赖
根据数据语义发现函数依赖
最小函数依赖集(P230-231)
函数依赖的推理规则
Armstrong公理
自反性,增广性,传递性
Armstrong公理的理论
合并性,分解性,结合性,伪传递性
求最小函数依赖集
每个函数依赖的最右边都是单属性(可通过分解性实现)
函数依赖集F中没有冗余的函数依赖
F中每个函数依赖的左边没有多余的属性
候选键
定义
设R是一个具有属性集合U的关系模式,K属于U,若满足右侧两个条件,则称K是R的一个候选键
K→U
不存在K的真子集Z,使得Z→U
属性集的闭包
设F是属性集U上的函数依赖集,X是U的子集,那么属性集X的闭包用X+表示,它是一个从F集使用函数依赖推理规则推出的所有满足X→A的属性A的集合
求候选键(P233)
关系模式的规范化
范式及规范化
范式:指关系模式的规范形式
规范化:将一个给定的关系模式转换为某种范式的过程成为关系模式的规范化过程,简称规范化
完全函数依赖、部分函数依赖和传递函数依赖
以函数依赖为基础的范式
范式
1NF:满足属性不可再分
2NF:消除非主属性对码的部分函数依赖
3NF:消除主属性对码的传递函数依赖
4NF:消除多值依赖
5NF:将表分割成尽可能小的块
BCNF:消除主属性对码的部分和传递函数依赖
关系的分解(P239-243)
无损连接分解
无损连接分解的测试
保持函数依赖分解
0 条评论
下一页