数据库作业3:第三章例题实践

本文利用SQL Server实现《数据库系统概论(第5版)》[例3.1]~[例3.12]

定义模式

新建数据库“Test20210322”,新建用户,设置用户名为“ZHANG”,登录名选择为第一个;
在这里插入图片描述

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

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

  
 
  • 1

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

CREATE SCHEMA "S-T" AUTHORIZATION ZHANG;

  
 
  • 1

在这里插入图片描述
[例3.2]该语句没有指定<模式名>,所以<模式名>隐含为用户名ZHANG;

CREATE SCHEMA AUTHORIZATION ZHANG;

  
 
  • 1

在这里插入图片描述
[例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)
);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

删除模式

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

DROP SCHEMA <模式名><CASCADE|RESTRICT>;
/*CASCADE是级联,表示在删除模式的同时把该模式中所有的数据库对象全部删除*/
/*RESTRICT是限制,表示如果模式中已经定义了下属的数据库对象,则拒绝该删除语句的执行。*/

  
 
  • 1
  • 2
  • 3

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

DROP SCHEMA ZHANG CASCADE;

  
 
  • 1

但是当我在运行的时候出现了报错!!
在这里插入图片描述
经过查询之后发现是“SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字”
因此我将CASCADE删除

DROP SCHEMA ZHANG;

  
 
  • 1

在这里插入图片描述
然后再一次的报错!!
提示TAB1正在引用它,经过查询资料之后发现在SQL Server中需要将TAB1对象删除。

DROP TABLE TEST.TAB1;
DROP SCHEMA TEST;

  
 
  • 1
  • 2

在这里插入图片描述
成功删除!!!所以在以后使用时记得“SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字”并且“在删除模式时需要将引用的表先删除”

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

定义基本表

创建了一个模式就建立了一个数据库的命名空间,一个框架,在这个空间中首先定义的是该模式包含的数据库基本表。
SQL语言使用CREATE TABLE语句定义基本表,其基本格式如下:

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

  
 
  • 1
  • 2
  • 3
  • 4

[例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)
);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
在这里插入图片描述

[例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)/*表级完整性,Cpno为外码,参照Course表中的Cno列*/
);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
在这里插入图片描述
[例3.7]建立学生选课表SC。

CREATE TABLE SC(/*创建学生选课表*/
	Sno CHAR(9),
	Cno CHAR(4),
	Grade SMALLINT,
	PRIMARY KEY(Sno,Cno),/*表的完整性,主码由Sno和Cno构成*/
	FOREIGN KEY(Sno) REFERENCES Student(Sno),/*表级完整性约束条件,Sno为外码,参照Student表*/
	FOREIGN KEY(Cno) REFERENCES Course(Cno)/*表级完整性约束条件,Cno为外码,参照Course表*/
);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述
在这里插入图片描述

修改基本表

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

ALTER TABLE Student ADD S_entrance DATE;

  
 
  • 1

在这里插入图片描述

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

ALTER TABLE Student ALTER COLUMN Sage INT;

  
 
  • 1

在这里插入图片描述

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

ALTER TABLE Course ADD UNIQUE(Cname);

  
 
  • 1

在这里插入图片描述

删除基本表

[例3.11]删除Student表;

DROP TABLE Student

  
 
  • 1

在这里插入图片描述
在删除时再一次报错!!
提示该对象正由FOREIGN KEY约束引用
使用如下SQL语句查询出表中外键约束名称:

SELECT NAME
FROM SYS.FOREIGN_KEY_COLUMNS F JOIN SYS.OBJECTS O ON F.CONSTRAINT_OBJECT_ID=O.OBJECT_ID
WHERE F.PARENT_OBJECT_ID=OBJECT_ID('SC')

  
 
  • 1
  • 2
  • 3

在这里插入图片描述
然后将外键约束名删除:

ALTER TABLE SC DROP CONSTRAINT FK__SC__Sno__2B3F6F97

  
 
  • 1

在这里插入图片描述
删除成功!!
[例3.12]若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可以删除表,视图表也自动被删除。

CREATE VIEW IS_SC
AS
SELECT Sno,Cno,Grade
FROM SC
WHERE Sno='IS';

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
至此,例题3.1~3.12全部实现!在实践过程中删除部分出现了很多问题,SQL Server与课本中部分操作仍有区别,在使用时多查多看寻求帮助,问题都得以解决,感谢阅读~

文章来源: blog.csdn.net,作者:+51,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_51776413/article/details/115099177

(完)