数据库实验第四周【模式&基本表】

1.定义模式

【例3.1】 为用户WANG定义一个学生-课程模式S-T。

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

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

前提是一定要先有这个WANG用户名。

CREATE SCHEMA "S-T" AUTHORIZATION WANG

【例3.2】CREATE SCHEMA AUTHORIZATION WANG;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
到这里WANG用户已经建立好了。
在这里插入图片描述

新建查询。
在这里插入图片描述
输入SQL语句。选择对应的数据库Student。
在这里插入图片描述


在这里插入图片描述
至此S-T已经建立好了。

【例3.3】 为用户ZHANG创建一个模式TEST,并且在其中定义一个表TAB1。

以下两条语句要一起执行,否则的活,表的模式会被默认成dbo.

在这里插入图片描述

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

在这里插入图片描述

2.删除模式

【例3.4】DROP SCHEMA ZHANG CASCADE;

在SQL中,删除语句如下:

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

在这里插入图片描述
但是这里显示有错误,这是因为SQL serve不支持CASCADE。
需要先删除表TEST.TAB1,再删除TEST模式。

DROP TABLE TEST.TAB1;
DROP SCHEMA TEST;

3.定义基本表

基本格式:

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

【例3.5】建立一个“学生”表Student。

create table Student
	(Sno char(9) primary key,
	Sname char(20) unique,
	Ssex char(2),
	Sage smallint,
	Sdept char(20)
	);

在这里插入图片描述

【例3.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)
	);

在这里插入图片描述

【例3.7】建立学生选课表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 Course(Cno)
	);

在这里插入图片描述

4.数据类型

几种常见的数据类型如下:

SQL 数据类型

5.模式与表

当定义基本表时一般可以有三种方法定义它所属的模式。

方法一,在表名中明显地给出模式名。

CREATE TABLE “S-T”.Student(…);
CREATE TABLE “S-T”.Course(…);
CREATE TABLE “S-T”.SC(…);
/* 以上三个表的模式是S-T */

方法二,在创建模式语句中同时创建表,如例3.3.

方法三,设置所属的模式,这样在创建表时表名中不必给出模式名。

6.修改基本表

SQL语言用ALTER TABLE语句修改基本表,一般格式为

ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;

ADD 子句:用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件。

DROP COLUMN 子句:用于删除表中的列·。1.如果指定了CASCADE短语,则自动删除引用了该列的其他对象。2.如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列。

DROP CONSTRAINT 子句:用于删除指定的完整性约束条件。

ALTER COLUMN 子句:用于修改原有的列定义,包括修改列名和数据类型。

【例3.8】向Student表增加“入学时间”列,其数据类型为日期型。

alter table Student ADD S_entrance date;

在这里插入图片描述
新增加的列一律为空值。

【例3.9】将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。

alter table Student alter column Sage int;

在这里插入图片描述

【例3.10】增加课程名称必须取唯一值的约束条件。

alter table Course add unique(Cname);

在这里插入图片描述

7.删除基本表

一般格式:

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

RESTRICT:即该表的删除时不能被其他表的约束条件所引用,不能能有视图,不能有触发器,不能有存储过程或函数等,否则将删除失败。
CASCADE:即该表的删除没有限制,再删除该表的同时,其相关联的依赖对象都将被一起删除。但是SQLServer并未实现这一功能,所以在执行语句时会出现错误提示。

【例3.11】删除Student表。

drop table Student;

显示错误如下:
在这里插入图片描述
无法删除对象 ‘Student’,因为该对象正由一个 FOREIGN KEY 约束引用。
这时我们需要找到那些表的外键引用了Student。

本例中,Student表被SC表的约束引用,所以无法直接删除。需要先将表SC删除,然后再删除表Student。
至此,删除完成。

drop table SC;
drop table Student;

在这里插入图片描述

【例3.12】若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可以删除表,视图也自动被删除。

先在Student表上建立视图。

create view IS_Student
as
select Sno,Sname,Sage
from Student
where Sdept='IS';

在这里插入图片描述
查看视图。

select *  from Student IS_Student;

在这里插入图片描述

删除Student表。

drop table Student restrict;

在这里插入图片描述

drop table Student cascade;

在这里插入图片描述
这是因为T-SQL与标准SQL不太一样的缘故。

SQL Server “DROP TABLE 表名 CASCADE” 显示"CASCADE"附近有语法错误的原因

在这里插入图片描述
正确语句。

drop table Student ;

再次查看视图。
在这里插入图片描述
视图依旧保存,但是已经失效。
在这里插入图片描述

心得

有的时候,自己的代码运行不出来或者卡在一半了,去网上查资料的时候,整个人都傻了,好多种说法和答案,不知道哪一个才是正确的,我还是按照自己的实验结果来写自己的作业吧。。。

猜你喜欢

转载自blog.csdn.net/qq_45745322/article/details/115066392