前言
本篇文章为数据库系统概论学习笔记之一,主要用于复习~
如果有错误或者歧义的地方希望大佬们指出,免得误导更多人!!!
正文
定义基本表
SQL语言使用 CREATE TABLE
语句定义基本表,格式如下
建表的同时还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中。
举例:
其中PRIMARY KEY
表示主码、UNIQUE
表示取值唯一,它们都是列级完整性约束条件。除此之外还有NOT NULL
表示不为空
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
运行结果表示建表成功。
此时,数据库中建立一个新的空“学生”表 Student,并将有关该表的定义及有关约束条件存放在数据字典中。
接下来我们再建两个表。
CREATE TABLE Course(
Cno CHAR(4) PRIMARY KEY, -- 列级完整性约束条件,Cno是主码
Cname CHAR(40) NOT NULL, -- Cname 不能取值为空
Cpno CHAR(4),
Ccredit SMALLINT,
-- 表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno
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), -- 表级完整性约束条件,Sno是外码,被参照表是Student
FOREIGN KEY(Cno) REFERENCES course(Cno) -- 表级完整性约束条件,Cno是外码,被参照表是Course
);
通过以上三个建表,我们知道定义表的各个属性时需要指明其数据类型及长度。SQL标准支持多种数据类型,如下列出几种常见数据类型
一个属性选用哪种数据类型需要考虑
- 取值范围
- 做哪些运算
修改基本表
用
ALTER TABLE
语句可以修改基本表。
ADD
子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件DROP COLUMN
子句用于删除表中的列。如果指定了CASCADE则自动删除引用了该列的其他对象,比如视图。如果指定了RESTRICT短语,则如果该列被其他对象引用,RDBMS将拒绝删除该列DROP CONSTRAINT
子句用于删除指定的完整性约束条件ALTER COLUMN
子句用于修改原有的列定义,包括修改列名和数据类型。
例:
-- 向Student表添加“入学时间”,其数据类型为日期。
ALTER TABLE Student ADD S_entrance DATE;
-- 添加课程名称必须取唯一值的约束条件
ALTER TABLE course ADD UNIQUE(Cname);
删除基本表
DROP TABLE
语句可以删除基本表。
- 若选择
RESTRICT
,则该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束引用(如CHECK FROEIGN KEY等约束),不能有视图,触发器,不能有存储过程或函数。如果存在这些依赖该表的对象,则此表不能被删除。(默认情况) - 若选择
CASCADE
,则该表的删除没有限制条件。在删除基本表的同时,相关的依赖对象,例如视图,都将被一起删除。
注意
:不同的数据库产品在遵守SQL标准的基础上具体实现细节和处理策略会与标准有差别。
下面就SQL 2011标准
对 DROP TABLE的规定,对比分析Kingbase ES
、 Oracle 12c Release1(12.1)
、MS SOL Server 2012
这三种数据库产品对DROP TABLE的不同处理策略。
R表示 RESTRICT,即 DROP TABLE<基本表名> RESTRICT; C表示CASCADE,即 DROP TABLE<基本表名>CASCADE。其中 Oracle 12c没有 RESTRICT选项;SOL Server没有RESTRICT和 CASCADE选项。
“X”
表示不能删除基本表,“√”
表示能删除基本表,“保留”表示删除基本表后
还保留依赖对象。