3.2 数据定义

3.2 数据定义

数据定义

♥  SQL的数据定义功能:定义各种数据库的对象
    ◾ 1. 模式定义
    ◾ 2. 表定义
    ◾ 3. 视图定义
    ◾ 4. 索引定义

操作对象创建删除修改
模式create schemadrop schema
create tabledrop tablealter table
视图create viewdrop view
索引create indexdrop indexalter index

各种数据库“对象”

♥  现代关系数据库管理系统提供了一个层次话的数据库对象名机制
    ◾ 一个数据库中可以建立多个模式
    ◾ 一个模式下通常包括多个表、视图和索引等数据库对象
数据库(有的系统称为目录)----> 模式 ---->表(以及视图、索引等)

数据字典

♥  数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有对象的定义信息以及一些统计信息
    ◾ 关系模式、表、视图、索引的定义
    ◾ 完整性约束的定义
    ◾ 各类用户对数据库的操作权限
    ◾ 统计信息等
♥  关系数据库管理系统在执行SQL的数据定义语句时,实际上就是再更新数据字典表中的相信信息

数据定义

    ◾ 1. 模式定义
    ◾ 2. 表定义
    ◾ 3. 索引定义

1. 定义模式

[例 3.1] 为用户WANG定义一个学生-课程模式S-T

create schema "S-T" authorization WANG;

[例 3.2] create schema authorization WANG;
      该语句没有制定<模式名>,<模式名>隐含为<用户名>
♥  定义模式实际上定义了一个命名空间(目录)
♥  在这个空间中可以定义改模式包含的数据库对象,例如基本表、视图、索引等
♥  在create schema中可以接受create table,create view和grant子句
create schema <模式名> authorization <用户名>[<表定义子句> | <视图定义子句> | <授权定义子句>]
[例 3.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(限制)——比较安全
        ● 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行
        ● 仅当该模式中没有任何下属的对象时才能执行
[例 3.4]

drop schema ZHANG CASCADE;

删除模式ZHANG,同时改模式中定义的表TAB1也被删除


3. 基本表的定义

♥  定义基本表

create table <表名>				/* 基本表的名称 */
(<列名><数据类型>[<列级完整性约束条件>]
[,<列名><数据类型>[<列级完整性约束条件>]...]
...
[<表级完整性约束条件>]
);

◾ <列级完整性约束条件>:涉及相应属性列的完整性约束条件
◾ <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
◾ 如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上
[例 3.5] 建立“学生”表Student,学号为主码,姓名取值唯一

create table Student
(Sno char(9) primary key,		/*列级完整性约束条件,Sno是主码*/
Sname char(20) unique,			/*Sname取唯一值*/
Ssex char(2),
Sage smallint,
Sdept char(20)
);

[例 3.6] 建立“课程”表Course

create table Course
(Cno char(4) primary key,		/*列级完整性约束条件,Sno是主码*/
Cname char(40),
Cpno char(4),
Ccredit smallint,
foreign key(Cpno) references Course(Cno)
);

[例 3.7] 建立一个学生选课表SC

create table SC
(Sno char(9),
Cno char(4),		/*列级完整性约束条件,Sno是主码*/
Grade smallint,
primary key(Sno, Cno),	/*主码由两个属性构成,必须作为标记完整性进行定义*/
foreign key(Sno) references Student(Sno),	/*表级完整性约束条件,Sno是外码,被参照表为Student*/
foreign key(Cno) references Course(Cno)		/*表级完整性约束条件,Cno是外码,被参照表为Course*/
);

4. 数据类型

♥  关系模型中“域”的概念用数据类型来实现
♥  定义表的属性是需要指明其数据类型及其长度
♥  选用哪种数据类型
    ◾ 取值范围
    ◾ 要做那些运算

5. 模式与表

♥  每一个基本表需属于某个模式
♥  定义基本表所属模式的方式
    ◾ 方法一:在表名中明显地给出模式名
create table “S-T”.Student(…); /*模式名为S-T/
create table “S-T”.Course(…); /模式名为S-T/
create table “S-T”.SC(…); /模式名为S-T/
    ◾ 方法二:在创建模式的同时创建表
    ◾ 方法三:设置所属的模式
♥  创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属的模式
♥  关系数据库管理系统会以“搜索路径”指向的模式作为数据库对象的模式名
♥  这是搜索路径的方式:
SET search_path TO “S-T”,public;

6. 修改基本表

alter table <表名>
[ADD [COLUMN] <新列名> <数据类型> [完整性约束条件]]
[ADD [表级完整性约束条件]]
[drop [COLUMN] <列名> <数据类型> [完整性约束条件]]

♥  每一个基本表需属于某个模式
♥  定义基本表所属模式的方式
    ◾ 方法一:在表名中明显地给出模式名
create table “S-T”.Student(…); /*模式名为S-T/
create table “S-T”.Course(…); /模式名为S-T/
create table “S-T”.SC(…); /模式名为S-T/
    ◾ 方法二:在创建模式的同时创建表
    ◾ 方法三:设置所属的模式
♥  创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属的模式
♥  关系数据库管理系统会以“搜索路径”指向的模式作为数据库对象的模式名
♥  这是搜索路径的方式:
SET search_path TO “S-T”,public;

create table <表名>				/* 基本表的名称 */
(<列名><数据类型>[<列级完整性约束条件>]
[,<列名><数据类型>[<列级完整性约束条件>]...]
...
[<表级完整性约束条件>]
);

    ◾ CASCADE(级联)——比较危险
        ● 删除模式的同时把该模式中所有的数据库对象全部删除
    ◾ RESTRICT(限制)——比较安全
        ● 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行
        ● 仅当该模式中没有任何下属的对象时才能执行
[例 3.4]

drop schema ZHANG CASCADE;

删除模式ZHANG,同时改模式中定义的表TAB1也被删除

上一篇:3.1 关系数据库标准语言SQL
目    录:《数据库系统概论》
下一篇:3.3 数据查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值