【数据库实验报告】模式,基本表的相关操作

本文详细介绍了SQL中模式(Schema)的创建、删除以及表的建立、修改和删除操作,包括添加和删除约束、更改列数据类型等。同时,讨论了在T-SQL中,删除表和模式时遇到的问题,如需先删除依赖的对象和视图,以及T-SQL与标准SQL在删除行为上的差异。
摘要由CSDN通过智能技术生成

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

首先我们先在数据库(stu)里建立一个用户WANG

在这里插入图片描述
然后执行命令

CREATE SCHEMA "S-T" AUTHORIZATION WANG;

在这里插入图片描述

例3.2 CREATE SCHEMA AUTHORIZATION WANG;

这里没有指定schema_name,标准sql应该默认会讲schema_name默认设置为用户名,但在SQL server中不是这样的,运行标题那个语句不会报错,但架构那里也没有任何变化。在微软的帮助文档里,看到一个备注。微软的帮助文档点此
在这里插入图片描述
(题外话,微软tql)
看样子T-SQL在这种情况下不会报错也不会创建架构。

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

执行命令

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

注意上面第一行是没有分号的,这样写可以省略TEST。
下面在TEST下创建TAB2
下面这个语句他会有红线提醒,但是执行没有问题,(这个问题我暂时没有解决)在这里插入图片描述

CREATE TABLE TEST.TAB2  ( COL1 SMALLINT);

在这里插入图片描述

例3.4 DROP SCHEMA TEST CASCADE;

删除test模式
执行标题的代码会出现
在这里插入图片描述
我们删除CASCADE,还是不行
在这里插入图片描述
查一下帮助文档
在这里插入图片描述
看来如果架构里面有数据库对象就不能删除他,我们得先删除其内的对象。
在这我们先通过gui删除表。删除好之后我们继续执行上面的命令
在这里插入图片描述
删除成功!

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

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

有人可能会说,这个Student前面为什么没有架构的名字。其实他会默认有一个名字,在这里就是dbo架构。
在这里插入图片描述

例3.6 建立一个“课程”表Course

CREATE TABLE Course
			(Cno CHAR(4) PRIMARY KEY,
			 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),
			 Grade SMALLINT,
			 PRIMARY KEY(Sno,Cno),
			 FOREIGN KEY (Sno) REFERENCES Student(Sno),
			 FOREIGN KEY (Cno) REFERENCES Course(Cno)
			);

在这里插入图片描述

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

在这里插入图片描述

例3.11 删除Student表

在这里插入图片描述
和删除模式类似,也不能这样。
在这里插入图片描述
我们查询一下帮助文档
在这里插入图片描述
那么我们得首先删除那个外键:我们在sc里Sno参照了Student里的Sno,我们直接

ALTER TABLE SC DROP CONSTRAINT Sno;--错误的写法

这样是不行的,查了一下帮助文档
在这里插入图片描述

在这里插入图片描述
还是看不太懂,大概是FK_属性名_B,这个B还是不知如何获取,参考了一下博客大佬博客
使用了代码

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')

找到了SC上的外键引用的名字,然后删除

ALTER TABLE SC DROP  CONSTRAINT FK__SC__Sno__2C3393D0 ;

然后再删除表Student

DROP TABLE Student;

在这里插入图片描述
删除成功!

例3.12 若表上建有视图,使用RESTRICT时表不能删除;使用CASCADE时可以删除表,视图也自动删除。

首先我们创建视图IS_Student(当然上个实验我们删除了Student表,现在已经再次创建了)

CREATE VIEW IS_Student
AS
	SELECT Sno,Sname,Sage
	FROM Student
	WHERE Sdept='IS';

在这里插入图片描述
然后删除!(和例题3.4 3.11一样,DROP操作不支持CASCADE。)
在这里插入图片描述

在这里插入图片描述

但是我们发现,虽然Select没有了,但是仍然存在,昨天晚上我一度以为是我操作错了,今天又试了一遍,还是这样。看来,标准sql里,使用CASCADE删除表时,视图也自动删除;但在T-SQL里,视图还留着。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值