实习复习纲要-数据库

一.数据库四个属性CAID
C:Consistency(一致性)事务执行前和执行后必须处于一致性状态,例:用户A和用户B的前加起来一共是5000; 无论AB用户之间是如何相互转换的,事务结束后两个用户的钱加起来还是5000,这就是事务的一致性;
A:Atomicity(原子性)事务包含的所有操作要么全部成功,要么全部失败回滚;成功必须要完全应用到数据库,失败则不能对数据库产生影响;
I:Isolation(隔离性) 当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不被其他事务的操作所干扰,多个并发事务之间要相互隔离;
D:Durability(持久性)持久性是指事务的操作,一旦提交,对于数据库中数据的改变是永久性的,即使数据库发生故障也不能丢失已提交事务所完成的改变。

二.集合运算
(1)Union并,Intersection交,Difference差实习复习纲要-数据库
差:A-B是由属于A但是不属于B的元组组成的集合。

(2)Product笛卡尔积 x
实习复习纲要-数据库
当两个表格含有相同属性,比如R和S都有B属性,应该在结果中用R.B和S.B进行区分。

三.自然选择运算
(1)投影 R[]
从表中选出指定的属性值组成一个新表
CN:=CUSTOMER[cname]
取出CUSTOMER表中的cname列形成新表。
(2)选择 where
S where C
C 可以是 >, <, =, >=,<=
当满足的条件是多个时:
S where C and C1,S where C or C1,S where not C
(3)连接 join ∞
如果S和R没有任何相同属性,那么连接就和笛卡尔积一样效果。如果有相同属性,连接和交一样。
连接和交的区别在于,只有两个表属性完全相同才算交,一部分相同就是连接。实习复习纲要-数据库
(4)除法÷
实习复习纲要-数据库
(5)例题
实习复习纲要-数据库
1.先找出c006买的商品:
pc6 := (ORDERS where cid = ‘c006’)[pid]
2.投影出人们的cid和买的商品pid
CP := ORDERS[cid,pid]
3.除法得到买了所有c006买的商品的顾客
CP ÷ pc6

查询所有没有通过代理商a03订购商品的顾客id
1.(ORDERS where aid = ‘a03’)
2.ORDERS[cid] - (ORDERS where aid = ‘a03’)

四.基本语句
1.Create Table
Create Table S
(
sno CHAR(5) NOT NULL UNIQUE,
sname CHAR(10) UNIQUE,
age INT,
PRIMARY KEY(sno)
);
2.Alter Table
Alter Table S Drop Column age
Alter Table S Add Address varchar(30)
新增加的属性不能为NOT NULL,因为原来的元组在这一列的值默认置为NULL。
3.Drop Table
Drop Table S

4.约束
列约束:
NOT NULL
CONSTRAINT
UNIQUE
PRIMARY KEY (=NOT NULL + UNIQUE)
CHECK
REFERENCES

表约束:
UNIQUE
PRIMARY KEY
CHECK
FOREIGN KEY REFERENCES

例:
qty integer not null constraint qtyck check (qty >= 0),
dollars float default 0.0 constraint dollarsck check (dollars>=0),
constraint cidref foreign key (cid) references customers

5.SELECT

选择两条属性:select aid, pid from orders;

选择唯一属性:select distinct pid from orders; (distinct保证返回值是unique的。)

选择TOPn属性:select TOP 4 from student order by age (默认为升序)

6.WHERE

等于:select * from student where dept = ‘computer’
如果找NULL要用IS
select * from student where dept IS NULL
在两个值之间:where age between 22 and 30

在两个选项之间:where dept IN (‘computer’,‘foreign’)

7.函数 count(), AVG(), max(),
Group by pid, 相同pid的元组会排在一起

8.Exist
exist不返回任何数据,只返回TRUE或者FALSE

9.除法Division
ORDERS[cid,aid] DIVIDEBY (AGENTS where city = ‘New York’)[aid]

写全:
select c.cid from customers c
where not exists(select * from agents a
where a.city = ‘New York’ and
not exists (select * from orders x
where x.cid = c.cid and x.aid = a.aid
));

10 INSERT, UPDATE, DELETE

添加INSERT
INSERT INTO student
VALUES (‘95020’,‘chendong’,‘male’,‘IT’,‘18’);

更改UPDATE
UPDATE SC
Set grade = grade*1.1
Where sno = ‘S4’ and cno = ‘C3’

删除DELETE
Delete from SC
Where cno = ‘C4’

五 索引INDEX

1.原理
INDEX通过B+树实现,时间复杂度logn,比按条遍历要快

2.语句
Create cluster index stuname on s(sname)
在s表的sname列建立聚簇索引,这个索引名字叫做stuname

3.聚簇索引和非聚簇索引

聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据
非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置

非聚簇索引都是辅助索引,像复合索引、前缀索引、唯一索引。辅助索引叶子节点存储的不再是行的物理位置,而是主键值,辅助索引访问数据总是需要二次查找。

聚簇索引具有唯一性,由于聚簇索引是将数据跟索引结构放到一块,因此一个表仅有一个聚簇索引。
主键就是聚簇索引。