1.SQL中的数据定义
SQL支持关系数据库系统的三级模式结构,其模式,外模式和内模式的基本对象有表,视图和索引。
1.1基本表的定义
(1)建表
CREATE TABLE <表名> (
<属性列名1><数据类型>[<列级完整性的约束条件>];
<属性列名2><数据类型>[<列级完整性的约束条件>];
<属性列名3><数据类型>[<列级完整性的约束条件>];
...............
<属性列名n><数据类型>[<列级完整性的约束条件>];
[<表级的完整性约束条件>]
);
例如,
CREATE TABLE Student(表名) (
Sid char(6) not null, //定义学号Sid,并且不为空
Sname char(20) not null, //定义学生名字,并且不为空
PRIMARY KEY(Sid) //定义Sid为表级约束,为这个表的主键(主键的介绍下面会说)
);
(2)SQL提供的主要数据类型
(3)完整性的约束条件
1)实体完整性定义
主键的建立语法:
PRIMARY KEY <属性列组>
(注意,主键可以是一个属性,也可以多个属性)
设置为主键后,每次插入数据或者对主键进行更新时,RDBMS会按照实体完整性规则进行检查:
a. 主键是否唯一,如果不唯一就拒接插入或者修改;
b. 主键是否为空,只要有一个为空就拒接插入或修改。
2)参照完整性定义
创建外键语法:
FOREIGN KEY(<外键>) REFERENCES <被参照在表名>(<与外键对应的主键名>)
注意,为保证完整性的实现,需要在定义表时进行约束定义:
a. ON DELETE{ CASCADE | NO ACTION }: 当删除被参照表的元组(某一主键值)时,参照表中的所有关联元组产生级联操作(也被删除)或被拒接执行。
b. ON UPDATE { CASCADE | NO ACTION } : 当修改被参照表中元组的主键时,参照表中的所有关联元组产生级联操作(对应的外键值夜被修改)或拒接执行。
例如,
CREATE TABLE SC (
SNO CHAR(6) NOT NULL,
CNO CHAR(6) NOT NULL,
GRADE DEC(4,1) DEFAULT NULL,
PRIMARY KEY(SNO,CNO), //在表级定义主键
FOREIGN KEY(SNO) REFERENCES S(SNO) //定义外键SNO,参照关系S的主键SNO
ON UPDATE CASCADE //当修改S的SNO时,级联修改SC中相应的元组
ON DELETE ON ACTION, //当删除S的元组会破坏参照完整性时拒接执行
FOREIGN KEY(CNO) REFERENCES C(CNO) // 定义外键CNO,参照关系C的主键CNO
ON UPDATE CASCADE //当修改C的CNO时,级联修改SC中相应的元组
ON DELETE NO ACTION, //当删除C的元组会破坏参照完整性时拒接执行
CHECK(GRADE BETWEEN 0.0 AND 100.0)); //定义GRADE的取值在0.0到100.0之间
3)用户定义完整性
常见的用户定义的完整性约束有:
a. NOT NULL 或 NULL 约束:NOT NULL 约束下不应许属性值为空,而NULL 约束应许属性值为空。
b. UNIQUE约束: 为唯一性约束,即不应许属性列中出现重复的属性值。
c. DEFAULT约束: 为默认值约束。
d. CHECK约束: 为检查约束。
(4)基本表的修改
1)增加列或表约束规则
ALTER TABLE <表名> ADD <属性列名><数据类型>[完整性约束] | <完整性约束>;
例如,ALTER TABLE Student ADD Sbirthday CHAR(20) NOT NULL;
2)删除原有的列或约束规则
ALTER TABLE <表名>
DROP { [CONSTRATNT]<完整性约束> | COLUMN<属性列名>
[CASCADE | RESTRICT] };
CASCADE: 表示在基表中删除某属性列时,所有引用该列的视图和约束也被自动删除。
RESTRICT: 在没有视图或约束引用该属性时,才能被删除。
3)修改原有列的类型
ALTER TABLE <表名> ALTER COLUMN <属性列名><数据类型>;
例如,
a, 在学生表S中加入表示学生所在系SD的属性列。
ALTER TABLE S ADD SD CHAR(16);
b, 在学生关系表S补充定义SND为主键。
ALTER TABLE S ADD PRIMARY KEY(SNO);
c, 删除基表S中学生的性别SEX属性列。
ALTER TABLE S DROP COLUMN SEX;
d, 将基表S中的学生姓名SN长度修改为12.
ALTER TABLE S ALTER COLUMN SN CHAR(12);
(5)基本表的删除
删除表的语法:
DROP TABLE <表名> [CASCADE | RESTRICT };
CASCADE: 表示该表删除没有条件限制。(在删除表的同时,在该表建立的视图和索引等也都会被删除)
RESTRICT: 表示该表的删除是有限制的,如果存在依赖该表的对象,则该表不能被删除。即如果要删除的基本表不能被其他 表的约束所引用,不能有视图,触发器,存储过程或函数等。且该项为默认项。