数据库系统概论期末复习二:SQL语句(一)

SQL 功能极强, 9 个动词完成核心功能
我们将从数据定义入手复习SQL语言

第一部分:数据定义

一、模式的定义与删除

1.模式的定义

定义模式实际上定义了一个命名空间
在这个空间中可以进一步定义该模式包含的 数据库对象,例如基本表、视图、索引等
CREATE SCHEMA 中可以接受 CREATE TABLE, CREATE VIEW GRANT 子句
CREATE SCHEMA <模式名>
AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]
例1给用户WANG定义一个学生-课程模式S-T
CREATE SCHEMA “S-T” AUTHORIZATION WANG;
如果没有指定 < 模式名 > ,那么 <模式名 > 隐含为 < 用户名 >
例2
CREATE SCHEMA AUTHORIZATION WANG;

例3为用户ZHANG创建了一个模式TEST,并在其中定义了一个表TAB1

CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1(
    COL1 SMALLINT,
    COL2 INT,
    COL3 CHAR(20),
    COL4 NUMERIC(10,3),
    COL5 DECIMAL(5,2)
    );

2.模式的删除

DROP SCHEMA <模式名> <CASCADE|RESTRICT>

模式的删除有两种情况:

CASCADE( 级联 ) :删除模式的同时把该模式中所有数据库对象全部删除
RESTRICT( 限制 ) :如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。当该模式中没有任何下属的对象时才能执行DROP SCHEMA语句
具体使用哪一种应根据实际题目或实际情况
例4级联删除模式ZHANG
DROP SCHEMA ZHANG CASCADE;

二、基本表的定义、删除与修改

1.基本表的定义

CREATE TABLE <表名>
(<列名> <数据类型>[ 列级完整性约束条件]
[,<列名> <数据类型>[ 列级完整性约束条件] ] …
[,<表级完整性约束条件> ] );
如果完整性约束条件涉及该表多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
例5 建立“学生”表Student,学号是主码,姓名取值唯一
CREATE TABLE Student
(
    Sno CHAR(9) PRIMARY KEY,
    Sname CHAR(20) UNIQUE,
    Ssex CHAR(2),
    Sage SMALLINT,
    Sdept CHAR(20)
);

例6建立一个“课程”表Course

CREATE TABLE Course
( Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpno CHAR(4) ,
Ccredit SMALLINT,
FOREIGN KEY (Cpno)
REFERENCES Course(Cno) /*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/
);

例7建立一个“学生选课”表SC

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中域的概念用数据类型来实现 ,定义表的各个属性时需要指明数据类型及长度。具体选用那种数据类型,需要考虑:① 取值范围 ② 要做哪些运算

2.基本表的修改

ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束] ]
[ DROP <列名><完整性约束名> ]
[ ALTER COLUMN<列名> <数据类型> ];
8. 向Student表增加“入学时间”列,其数据类型为日期型
ALTER TABLE Student
ADD S_entrance DATE;

注:不论基本表中原来是否已有数据,新增加列一律为空值 (NULL)

9. 将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数
ALTER TABLE Student
ALTER COLUMN Sage INT;
10. 增加课程名称必须取唯一值的约束条件
ALTER TABLE Course
ADD UNIQUE(Cname);

3.基本表的删除

DROP TABLE <表名>[RESTRICT| CASCADE];
同样的基本表的删除也有两种:
RESTRICT :删除表是有限制条件的。欲删除的基本表不能被其他表的约束所引用。如果存在依赖该表的对象,则此表不能被删除
CASCADE :删除该表没有限制。在删除基本表的同时,相关的依赖对象一起删除
11. 删除 Student
DROP TABLE Student CASCADE;
① 基本表定义被删除,数据被删除
② 表上建立的索引、视图、触发器等有关对象一般也将被删除
例12.若表上建有视图,选择RESTRICT 时表不能删除,如果选择CASCADE可以删除表,视图也自动被删除
DROP TABLE Student RESTRICT; 

--ERROR: cannot drop table Student because other objects depend on it

DROP TABLE Student CASCADE;

三、索引的建立与删除

1.索引的定义

CREATE [UNIQUE] [CLUSTER] INDEX
<索引名> ON <表名>(<列名>[<次序>] [, <列名>[<次序>] ]…);
其中:
UNIQUE: 表明此索引的每一个索引值只对应唯一的数据记录
CLUSTER ( 聚簇索引 ): 是指索引项的顺序与表中记录的物理顺序一致的索引组织
13. 在Student表的 Sname (姓名)列上建立一个聚簇索引
CREATE CLUSTER INDEX
Stusname ON Student(Sname);
14. 为学生 - 课程数据库中的 Student ,Course, SC 三个表建立索引
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC, Cno DESC);

2.索引的删除

DROP INDEX <索引名>;
15. 删除 Student 表的 Stusname 索引
DROP INDEX Stusname;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值