0
点赞
收藏
分享

微信扫一扫

数据库系统-数据定义

皮皮球场 2022-03-18 阅读 81

数据库系统-数据定义

SQL的数据定义功能:定义各种数据库的“对象”

  • 模式定义
  • 表定义
  • 视图定义
  • 索引定义

SQL的数据定义语句

操作对象创建删除修改
模式CREATE SCHEMADROP SCHEMA
CREATE TABLEDROP TABLEALTER TABLE
视图CREATE VIEWDROP VIEW
索引CREATE INDEXDROP INDEXALTER INDEX

各种数据库“对象”

现代关系数据库管理相同提供了一个层次化的数据库对象命名机制

  • 一个数据库中可以建立多个模式
  • 一个模式下通常包括多个表、视图和索引等数据库对象

image-20220317144637770

数据字典

数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有对象的定义信息以及一些统计信息:

  • 关系模式、表、视图、索引的定义
  • 完整性约束的定义
  • 各类用户对数据库的操作权限
  • 统计信息等

关系数据库管理系统在执行SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息

数据定义

定义模式

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

CREATE SCHEMA “S-T” AUTHORIZATION WANG

CREATE SCHEMA “S-T” AUTHORIZATION WANG

改语句没有指定 模式名 , 模式名隐含为用户名

  • 定义模式实际上定义了一个命名空间(目录)
  • 在这个空间中可以定义该模式包含的数据库对象,例如基本表、视图、索引等
  • 在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和GRANT子句
CREATE SCHEMA<模式名>AUTHORIZATION<用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]

删除模式

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

  • CASCADE (级联)
    • 删除模式的同时把该模式中所有的数据库对象全部删除
  • RESTRICT (限制)
    • 如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行
    • 仅当该模式中没有任何下属的对象时采纳执行

DROP SCHEMA ZHANG CASCADE

删除模式ZHANG

同时该模式中定义的表也被删除

基本表的定义

定义基本表

	CREATE TABLE <表名>       /* 基本表的名称 */
	(<列名><数据类型>[<列级完整性约束条件>]	/* 组成改表的列 */
	[,<列名><数据类型>[<列级完整性约束条件>]
	...
	[,<表级完整性约束条件>]);
  • 列级完整性约束条件:涉及相应属性列的完整性约束条件
  • 表级完整性约束条件:涉及一个或多个属性列的完整性约束条件
  • 如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上

建立学生表Student。学号是主码,姓名取值唯一

	CREATE TABLE Student
	(
		Son CHAR(9) PRIMARY KEY,
		Sname CHAR(2) UNIQUE,
		Ssex CHAR(2),
		Sage SMALLINT,
		Sdept CHAR(2)
	);

建立一个课程表Course

	CREATE TABLE Course
	(
		Cno CHAR(4) PRIMARY KEY,
		Cname CHAR(40),
		Cpno CHAR(4),
		Ccredit SMALLINT,
		FOREING KEY(Cpno) REFERENCES Course(Cno)
	);

建立一个学生选课表SC

	CREATE TABLE SC
	(
		Sno CHAR(9),
		Cno CHAR(4),
		Grade SMALLINT,
		PRIMARY KEY(Sno,Cno),
		FOREIGN KEY (Sno) REFERENCES Student(Sno),
		FOREIGN KEY (Cno) REFERENCES Student(Cno)
	);

数据类型

关系模型中的“域”的概念用数据类型来实现

定义表的属性时需要指明其数据类型及长度

选用哪种数据类型

  • 取值范围
  • 要做哪些运算

模式与表

每一个基本表需属于某个模式

定义基本表所属模式的方式:

  • 方法一:在表名中明显地给出模式名

    Create table “S-T”.Student(…);

  • 方法二:在创建模式的同时创建表

  • 方法三:设置所属的模式

创建基本表(其他数据库对象也一样)时,若没有指定模式,系统根据搜索路径来确定该对象所属的模式

关系数据库管理系统会以“搜索路径”指向的模式作为数据库对象的模式名

设置搜索路径的方式:

SET search_path TO "S-T",PUBLIC

修改基本表

	ALTER TABLE<表名>
	 [ADD[COLUMN]<新列名><数据类型>[完整性约束]]
	 [ADD<表级完整性约束>]
	 [DROP[COLUMN]<列名>[CASCADE|RESTRICT]]
	 [DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]]
	 [ALTER COLUMN<列名><数据类型>];
  • <表名>是要修改的基本表
  • ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
  • DROP COLUMN子句用于删除表中的列
    • 如果指定了CASCADE短语,则自动删除引用了改列的其他对象
    • 如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除改列
  • DROP CONSTRAINT子句用于删除指定的完整性约束条件
  • ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型

向Studnet表增加 入学时间 列 ,其数据类型为日期型

ALTER TABLE Student ADD S_entrance DATE;

不管基本表中原来是否已有数据,新增加的列一律为空值

将年龄的数据类型由字符型改为整型

ALTER TABLE Student ALTER COLUMN Sage INT;

增加课程名称必须取唯一值的约束条件

ALTER TABLE Course ADD UNIQUE(Cname);

删除基本表

DROP TABLE <表名> [RESTRICT|CASCADE];

  • RESTRICT:删除表是有限制的

    • 欲删除的基本表不能被其他表的约束所引用
    • 如果存在依赖该表的对象,则此表不能被删除
  • CASCADE:删除改表没有限制

    • 在删除基本表的同时,相关的依赖对象一起删除

删除Student表

DROP TABLE Student CASCADE

  • 基本表定义被删除,数据被删除
  • 表上建立的索引、视图、触发器等一般也被删除

索引的定义

建立索引的目的:加快查询速度

关系数据库管理系统中常见索引:

  • 顺序文件上的索引
  • B+树索引
  • 散列(hash)索引
  • 位图索引

特点:

  • B+树索引具有动态平衡的优点
  • HASH索引具有查找速度快的特点

谁可以建立索引

  • 数据库管理员或表的属主(即建立表的人)

谁维护索引

  • 关系数据库管理系统自动完成

使用索引

  • 关系数据库管理系统自动选择合适的索引作为存取路径,用户不必也不能显式地选择索引

建立索引

语句格式:

	CREATE [UNIQUE][CLUSTER]INDEX<索引名>
	ON<表名>(<列名>[<次序>][,<列名>[<次序>]]..);
  • <表名>:要建索引的基本表的名字
  • 索引:可以建立在该表的一列或多列上,各列名之间用逗号分隔
  • <次序>:指定索引值的排序次序,升序:ASC,降序:DESC 缺省值:ASC
  • UNIQUE:此索引的每一个索引值只对应唯一的数据记录
  • CLUSTER:表示要建立的索引是聚簇索引

为学生-课程数据库中的Student,Course,SC三个表建立索引

  • 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);

修改索引

	ALTER INDEX <旧索引名> RENAME TO <新索引名>

将SC表的SCno索引名改为SCSno

	ALTER INDEX SCno RENAME TO SCSno

删除索引

	DROP INDEX <索引名>;

删除索引时,系统会从数据字典中删去有关该索引的描述

删除Student表的Stusname索引

	DROP INDEX Stusname;
举报

相关推荐

0 条评论