SQL课堂笔记<2>

2.1 理论 数据结构和形式化定义

1 笛卡尔积

2 候选码和主码的关系:

一个关系/表中只要能唯一标识一个记录的属性列都可以作为候选码,如学生表中的学号,身份证号,手机号
从候选码中选一个特殊作为主码PK, 一个关系表中只有一个PK.
如性别,生日一般叫非主属性

3 基本表:数据库的物理表叫基本表.

由基本表查询出来的结果—视图,是临时表,不以独立存在的,它依赖于基本表存在.
P43 关系操作
最简单的分类: 数据定义,数据查询,数据非查询
数据定义:定义表结构头 (create table ; alter table….)
数据查询: select 字句特别多 ( query( )
数据非查询: 插入记录 insert into ; update ; delete from (noquery( ))

还有分类:

关系运算三大类: 选择,连接,投影

(1)选择: 根据条件从表中查出部分满足条件的记录

select * from 学生表 where 性别=’男’
select * from 学生表 where 性别=’男’ and LEFT(姓名,1)=’李’
(2)连接: 两个或多表同时在逻辑上列向合并.
select 学生表.学号,姓名,课程号,成绩
from 学生表, 成绩表 where 学生表.学号=成绩表.学号
(3)投影: 从表中选出部分列查询结果.
上例中: 学生表.学号,姓名,课程号,成绩

P45 完整性

许多表的结束应该是表头定义时完成的,当表内有大量记录内容时,是无法再增加部分新的约束的.
实际解决办法: select * into 学生表tmp from 学生表
//把原表中数据倒入另一个表,再删除原表的一些结束,再给原表增加新的约束,再从新表倒数据回来
—如果表XX不存在
SELECT * INTO XX FROM YY WHERE 条件
//—–
1 实体完整性:如学号为主码,且不能为空
2 参照完整性:如学生表(父表)按学号与成绩表(子表)建立参照完整性. 以后在增加新数据时,只有学生表已经存在的学号的学生的数据才有插入到成绩表中.
主键,外键: 在学生表中学号是主键,在成绩表中学号不是主键,立足于成绩表时,我们说学号是学生表的外键FK(这样约束后,成绩表的学号必须事先已经在学生表中存在)
3自定义完整性 人为加check (条件)
应用:
(1)定义新表的同时定义约束
Create table xs(学号 nchar(8) not null primary key,
性别 not null default ‘男’ check (性别=’男’ or 性别=’女’ ),
年龄 tinyint check(年龄 between 15 and 30),
)
例:
Create table xs(学号 nchar(8) not null primary key,
性别 nchar(1) not null default ‘男’ check (性别=’男’ or 性别=’女’),
年龄 tinyint check(年龄 between 15 and 30)
)
create table cj(
学号 nchar(8),
课程号 nchar(10),
成绩 tinyint,
foreign key(学号) references xs(学号)
)
补:自定义结束时,可以针对每列单独约束(列级约束),也可以统一对所有列约束(元组级约束)
如: Create table xs(学号 nchar(8) not null primary key,
性别 nchar(1) not null default ‘男’ ,
年龄 tinyint ,
check ((性别=’男’ or 性别=’女’) and (年龄 between 15 and 30))
)
此法的约束检查发生在完成一行数据结束后.而上面的列级约束查检是发生当列完成数据录入时.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章