1. 由于对表的操作都是对象层面的操作,因此在对表进行操作是一定要用USE语句指定表所属的数据库:
a. 规则:USE XXX
b. 表示打开名为XXX的数据库;
c. 接下来再使用CREATE TABLE、ALTER TABLE等语句;
2. 表的创建:
a. 一般性规则:
CREATE TABLE XXX (
列名1 数据类型 列级完整性约束,
列名2 数据类型 列级完整性约束,
............
表级完整性约束1,
表级完整性约束2,
................
)
b. 完整性约束:一共有两种,定义在一列上的完整性约束为列级完整性约束,而定义在多个列上的完整性约束就是表级完整性约束;
c. 其中“列名 数据类型”一定要放在最前面,并且列名一定是第一个,数据类型一定是第二个,而后面的列级完整性约束可能有很多,但是顺序可以是任意的;
d. 本例中使用到的几种完整性约束:
主键约束:一张表中有且仅有一个主键,列级完整性约束为PRIMARY KEY,而表级完整性约束为PRIMARY KEY(列名1, 列名2....),后者是将多个列组成一个主键;
唯一键:可以有多个,只有列级完整性约束UNIQUE;
外键:可以有多个外键,而外键只能是表级完整性约束,FOREIGN KEY 本表中的一个列名 REFERENCES 外表名(外表明中的一个属性);
e. 例子:
USE Student_Course
CREATE TABLE Student (
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
)
CREATE TABLE Course (
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
)
CREATE TABLE SC (
Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno, Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
)
3. 修改表:
a. 必须使用USE语句和ALTER TABLE语句;
b. 添加列:ADD 列名 类型 列级完整性约束
c. 修改列的类型(不支持修改列的完整性约束):ALTER COLUMN 列名 修改后的类型
d. 对一个列添加完整性约束:ADD 约束名(列名) //将某种约束施加到某一列上;
4. 删除表:
a. 规则为:DROP TABLE XXX 选项
b. 选项同样是RESTRICT和CASCADE,缺省情况下默认为RESTRICT;
c. RESTRICT将在表有任何依赖的情况下拒绝删除,而CASCADE将表及其一切依赖一并删除(比如表的键、触发器、视图等);
5. 建立和删除索引:
a. 索引的作用:
i. 索引是建立在列上的;
ii. 有点像哈希表,每个元组对应一个索引,在查找的是有就不用根据物理路径进行查找而可以直接根据索引值的指向找到指定元组的物理存储单元;
iii. 可以大大提高查找效率;
b. 索引的特点:索引的具体值的选取由数据库系统来完成,用户不必也无法得知索引的具体值,一般采用B+树和哈希表来实现索引;
c. 索引建立规则:CREATE 索引类型 INDEX 索引名 ON 表名(列名1 次序, 列名2 次序.....)
d. 索引类型:
UNIQUE:表示索引值唯一,一个索引值只对应唯一的一个数据记录,一张表中可以建立多个;
CLUSTER:聚簇索引,表示索引值的顺序和记录的物理存储顺序保持一致,这就相当于数组的随机访问,查找是聚簇索引的速度最快;
注:一张表最多只能有一个聚簇索引,但是可以有多个唯一索引;
聚簇索引使得对表进行记录的插入删除变得非常不方便,代价非常大(类似数组的插入和删除),因此需要经常更新的表不建立聚簇索引;
e. 次序有两种,一种是ASC表示索引值是按照升序排列的,另一种是DESC表示索引值是按照降序排列的;
f. 删除索引的规则:DROP INDEX 索引名 ON 表名 或者 DROP INDEX 表名.索引名 两者都是删除指定表中的指定索引;