数据库学习总结(一)
一.理论知识
1.概念
(1)域:一组具有相同数据类型的集合。
(2)关系:一个关系通常指一张表。
(3)属性:表的一个列即为一个属性。
(4)码:也称为码键,表中的某个属性组,可以唯一的确定一个元组。
(5)元组:表中的一行即为一个元组。
2.设计范式:
(1)第一范式:符合1NF的关系中的每个属性都不可再分
(2)第二范式:是否存在非主属性对于码的部分函数依赖
(3)第三范式:消除了非主属性对于码的传递函数依赖
3.索引:
当表的数据量较大时,查询操作比较耗时,建立索引是加快查询的有效手段,用户可以在表上建立多个索引。数据库索引有多种类型,包括顺序文件上的索引、B+树、散列(hash)索引、位图索引。
(1)顺序文件上的索引:是针对指定属性值升序或者降序存储的关系,在该属性上建立一个顺序索引文件,索引文件由属性值和相应的元组指针组成。
(2)B+数索引:将索引属性组织成B+树形式,B+树的叶节点为属性值和相应的元组指针,其具有动态平衡的优点
4.事务:
(1)事务:是用户定义的一个数据库操作序列,这些操作要不全做,要不全不做,是一个不可分割的工作单位。
(2)锁:
(3)事务的四大特性:
a) 原子性:事务中的操作,要不全做,要不全都不做,是一个不可分割的整体。
b) 一致性:事务结束后,数据库中的数据必须是正确的。
c) 隔离性:一个事务的执行不可以被其他事务干扰,即一个事务的内部操作及其使用的数据对其他的并发事务是隔离的。
d) 永久性:一个事务一旦提交,他对数据库中数据的改变就是永久性的,接下来的其他操作或者故障不应该对其执行结果有任何影响。
二.sql语言
注意:<>代表变量,[]代表可选的内容。
1.数据定义:
(1)定义模式:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
(2)定义基本表:
CREATE TABLE <表名> (
<列名> <数据类型> <完整性约束>,
<列名> <数据类型> <完整性约束>
);
主键完整性约束:PRIMARY KEY
唯一性约束:UNIQUE
非空约束:NOT NULL
定义外键:foreign key (<属性名>) references <表名>(<属性名>)
实例代码如下:
create TABLE student (
Sno CHAR(10) PRIMARY KEY,
Sname CHAR(20),
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
create table course(
Cno char(4) primary key,
Cname char(40) not null,
Cpno char(4),
Ccredit smallint,
foreign key (cpno) references course(Cno)
);
2.数据类型:
(1)char(n)/character(n):定长字符串。
(2)varchar(n)/ charactervarying:变长字符串,最大为n。
(3)clob:字符串大对象
(4)blob:二进制大对象
(5)int,integer:长整数
(6)smallint:短整数
(7)bigint:大整数
(8)Boolean:逻辑布尔量
(9)date:日期包含年月日,格式为yyyy-mm-dd
(10)time:时间,包含时分秒格式为HH:MM:SS
(11)timestamp:时间戳
(12)interval:时间间隔类型
(13)float(n):可以选择精度的浮点数,精度至少为n
(14)real:取决于机器精度的单精度浮点数
(15)double precision:取决于机器精度的双精度浮点数。
3.修改删除基本表
(1)增加新的列
alter table <表名>
ADD <新列名> <数据类型> <完整性约束>
(2)修改列的数据类型
alter table <表名> alter column <属性名> <新数据类型>
(3)删除表:
drop table <表名>
4.建立删除索引
(1)建立索引:
括号里可以重复多次
create [unique] index <索引名> on <表名> (<列名> <次序>, …);
次序可以选择ASC或者DESC,ASC代表升序,DESC代表降序,unique代表着索引只代表唯一的数据记录。
(2)修改索引:
ALTER index <旧索引名> rename to <新索引名>
(3)删除索引:
drop index <索引名>
5.数据查询:
一般格式为
select <目标列表达式> from <表名或者视图名>
[where <条件表达式>]
[group by <列名1>]
[order by <列名2> [asc/desc]]
注意:
目标列表达式不仅仅可以是算术表达式,也可以是字符串常量或者函数等。
目标列表达式为*时,代表全部列。
(1)消除取值重复的行,使用distinct关键字:
select distinct * from student;
(2)查询满足条件的元组,使用where关键字:
常用的查询条件:
- 比较:=,>,<,>=,<=,!=同<>,!>,<!
- between and,not between and
- in,not in
- 字符匹配:like,not like
- 判空:is null,is not null
- 逻辑运算:and,or,not
in判断符举例:
select * from student
where sdept in (‘cs’,‘ma’,‘is’);
in后面加集合,判断所选属性的值是否在集合内。
like举例:
select * from student
where sno like ‘110’
select * from student
where sname like ‘刘%’
代表查询所有姓刘的同学
%和_为通配符,%代表任意长度的字符(可以为0),_代表任意的单个字符
当字符串中存在%或者 _,就需要使用escape字符:
like <匹配串> escape <换码字符>
eg:like ‘db\ _design’ escape '\ ’ ;
关于order by:
后面可以编写多个排序条件,如果前面的相同,则会按后面的进行排序。
6.删除列:
DELETE FROM 表名称 WHERE 列名称 = 值
7.聚集函数:
主要有
count(*) 统计元组个数,即行个数。
count([distinct|all] <列名>) 统计一列中值的个数。
sum([distinct|all] <列名>) 计算一列值的总和
avg([distinct|all] <列名>) 计算一列值的平均值
max([distinct|all] <列名>) 求一列值的最大值
min([distinct|all] <列名>) 求一列值的最小值
8.设置联合主键:
可以设置多个字段共同为主键
ALTER TABLE follow
ADD CONSTRAINT pk_follow PRIMARY KEY (user_id, follow_user_id);