数据库系统概论-[02]数据定义

1、概述

关系数据库系统支持三级模式结构、其模式、外模式和内模式中基本对象有表、视图和索引,因此SQL的数据定义功能包括模式定义、表定义、视图和索引的定义,如下表所示:

说明

SQL通常不提供修改模式定义、修改视图定义和修改索引定义的操作,用户如果想修改这些对象,只能先将他们删除掉、然后再重建。

2、模式的定义与删除

定义模式

在SQL中,模式定义语句如下:

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>

如果没有指定<模式名>,那么<模式名>隐含为<用户名>。

要创建模式,调用该名必须拥有DBA权限,或者获得了DBA授予的CREATE SCHEMA的权限。

eg:

CREATE SCHIEMA  AUTORIZATION WANG;

说明:该语句没有指定模式名,所以模式名隐含为用户名WANG

定义模式实际上定义了一个命名空
间,在这个空间中可以进一步定义该模式包含的数据对象,比如基本表、视图、索引等。

目前在CREATE SCHEMA中可以接收CREATE TABLE、CREATE VIEW 和GRANT子句,也就说用户可以在创建模式的同时在这个模式定义中进一步创建基本表、视图、定义授权。

CREATE SCHEMA TEST AUTHORIZATION ZHANG
   CREATE TABLE TAB1(
        COL1,SMALLINT,
        COL2,INT,
        COL3,CHAR(20)
    );
该语句为用户ZHANG创建了一个模式TEST,并且在其中定义了一个表TAB1。

删除模式

在SQL中,删除模式语句如下:

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

其中CASCADE和RESTRICT两者必选其一。

说明:

CASCADE(级联):表示在删除模式的同时把该模式中所有的数据库对象全部一起删除

RESTRICT(限制):表示如果该模式中已经定义了下属的数据库对象(如表、视图等)则拒绝该删除语句的执行,只有当该模式中没有任何下属的对象时才能执行DROP SCHEMA语句。

eg:

DROP SCHEMA ZHANG CASCADE

该语句删除了模式ZHANG,同时,该模式中已经定义的表TAB1也被删除了。

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

定义基本表

创建了一个模式,就建立了一个数据库的命名空间,一个框架,在这个空间中首先要定义的是该模式包含的数据库基本表。

SQL语言使用CREATE TABLE 语句定义基本表,其基本格式如下:

CREATE TABLE <表名>(
    <列名> <数据类型> [列级完整性约束条件],
    <列名> <数据类型> [列级完整性约束条件],
 <列名> <数据类型> [列级完整性约束条件],
<表级完整性约束条件>

);
说明:

建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由RDBMS自动检查该操作是否违背这些完整性约束条件,如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。

eg:建立一个学生表[Student] 基于mysql数据库

CREATE TABLE Student(
	Sno CHAR(9) PRIMARY KEY,/*列级完整性约束条件,Sno是主码*/
	Sname CHAR(9) UNIQUE,/*Sname取唯一值*/
	Ssex CHAR(2),
	Sage SMALLINT,
	Sdept CHAR(20)
);
系统执行上面的CREATE TABLE语句后,就在数据库中建立一个新的空的学生表Student,并将有关学生表的定义以及有关约束条件存放在数据字典中。

eg:建立一个课程表[Course] 基于mysql数据库

CREATE TABLE Course(
	Cno CHAR(4) PRIMARY KEY,/*列级完整性约束条件,Cno是主码*/
	Cname CHAR(40),
	Cpno CHAR(4),
	Coredit SMALLINT,
	CONSTRAINT FK_ID FOREIGN KEY (Cpno) REFERENCES Course(Cno) /*Cpno的含义是选修课*/
);
eg :建立学生选课表SC

CREATE TABLE SC(
	Sno CHAR(7),
	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中域的概念用数据类型来实现,定义表的各个属性时需要指明其数据类型以及长度,SQL提供了一些重要的数据类型,如下图所示,注意:不同的RDBMS中支持的数据类型不完全相同。

一个属性选用哪种数据类型要根据实际情况来决定,一般要从两个方面来考虑,一是取值范围,二是要做哪些运算,比如对于年龄(Sage)属性,可以采用CHAR(3)作为数据类型,但是考虑到年龄上做算术运算,比如说求平均年龄,所以采用整数作为数据类型,因为CHAR(n)数据类型上不能进行算术运算,整数又分为长整数和短整数两种,因为一个人年龄在百岁左右,所以选用短整数作为年龄的数据类型。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来生做一个苦行僧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值