【数据库系统原理作业】三:数据定义的相关操作

一、建立用户

在连接对象之后,建立一个新的数据库,起名为Test,在其路径下找到安全性→用户,右键,新建用户。
在这里插入图片描述
在显示的窗口中,输入新用户的用户名,并按照书中的例子填入登录名。点击确定,即创建好了一个新的用户。
在这里插入图片描述

二、例题

1.模式的定义与删除

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

新建一个查询,输入以下语句:

Create Schema "S-T" Authorization WANG;

刷新资源管理器,就可以在架构中找到新建的"S-T"
在这里插入图片描述

②.输入CREATE SCHEMA AUTHORIZATION WANG;

该语句没有指定<模式名>,<模式名>隐含为<用户名>
在没有创建模式的情况下,默认的模式名为dbo,表名为dbo.*。

③.为用户WANG创建一个模式TEST,并且在其中定义一个表TAB1;然后继续建立表TAB2

新建查询,输入以下语句

CREATE SCHEMA TEST AUTHORIZATION WANG
CREATE TABLE TAB1(
	COL1 SMALLINT,
	COL2 INT,
	COL3 CHAR(20),
	COL4 NUMERIC(10,3),
	COL5 DECIMAL(5,2)
);--创建TAB1
GO--将查询分批进行
CREATE TABLE TEST.TAB2(
	COL1 SMALLINT
);--创建TAB2

执行后:
在这里插入图片描述
我们可以看到,TAB1和TAB2都是在TEST模式下建立的表,这说明我们有两种方式在TEST模式下建表:

  1. 在建立模式后,不加分号,建立一张表
  2. 在要建立的表前加上TEST.

当不加TEST.时,TAB2被归于了默认模式dbo下
在这里插入图片描述

④.DROP SCHEMA TEST CASCADE;

当我们输入语句时,出现以下错误:
在这里插入图片描述
这是因为SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字
将其CASCADE删去后,依旧有错误显示:
在这里插入图片描述
这说明我们在删除TEST架构前,要先删除架构中创建的对象

DROP TABLE TEST.TAB1;
DROP TABLE TEST.TAB2;
DROP SCHEMA TEST;

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

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

CREATE TABLE Student(
	Sno CHAR(9) PRIMARY KEY,--主码
	SNAME CHAR(20) UNIQUE,--约束,取唯一值
	Ssex CHAR(2),
	Sage SMALLINT,Sdept CHAR(20)
);

②.建立一个“课程”表Course

CREATE TABLE Course(
	Cno CHAR(4) PRIMARY KEY,
	Cname CHAR(40),
	Cpno CHAR(4),
	Ccredit SMALLINT,
	FOREIGN KEY(Cpno) REFERENCES Course(Cno)
	--Cpno是外码,被参照表是Course,被参照列是Cno
);

③.建立一个学生选课表SC

CREATE TABLE SC(
      Sno CHAR(9), 
      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
);

3.索引的建立与删除

①.向Student表增加“入学时间”列,其数据类型为日期型

ALTER TABLE Student ADD S_entrance DATE;

执行结果:
在这里插入图片描述

②.将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。

ALTER TABLE Student ALTER COLUMN Sage INT;

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

ALTER TABLE Course ADD UNIQUE(Cname);

④. 删除Student表

和例题4相同,SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字
而我们在例题7中,创建了一个引用Student的Sno为外码的SC表,所以我们无法直接删除Student
在这里插入图片描述
所以在删除Student前,要先删除SC中对于Sno的约束
使用如下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')

执行结果:
在这里插入图片描述
得到Sno的约束名后,输入下面的语句即可删除对Sno的约束

ALTER TABLE SC DROP CONSTRAINT FK__SC__Sno__5165187F

然后再执行如下语句即可删去Student表

DROP TABLE Student ;

⑤.若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可删除表,视图自动被删除 。

与上一题类似,视图需手动删除,然后才能删除表

DROP VIEW View_1;--删除视图

三、总结

1.做实验的过程中有出现“无法删除xxxx,因为他不存在或您不具备相应的权限”的错误,虽然看着很难受,但是却可以正常执行查询。。。

2.在例题1.③中,不加GO会出现错误“CREATE SCHEMA 必须是批处理中仅有的语句”,所以要想运行一次完成架构与表的建立,需要加入GO语句进行分隔。

GO是批处理的终止符号,由于创建架构必须是查询批次中的第一个语句。所以你必须在后面加上GO,用于终止批处理。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值