数据库系统原理实验作业三:SQL Server操作

操作

  • 一,准备
  • 二,操作练习
    • 1. 模式的定义与删除
      • 1.1为用户WANG定义一个学生-课程模式S-T
      • 1.2语句没有指定<模式名>创建架构,<模式名>隐含为<用户名>
      • 1.3创建了一个模式TEST,并且在其中定义一个表TAB1
      • 1.4 DROP SCHEMA <模式名>

一,准备

排版有问题啊…(咋整啊)
首先要创建用户WANG,如下图
数据库系统原理实验作业三:SQL Server操作_第1张图片

二,操作练习

1. 模式的定义与删除

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

CREATE SCHEMA "S-T"AUTHORIZATION WANG;

刷新后在架构上看到新出现的S-T(wang虽然标错但是还是可以建立(后来重启后解决了。离谱))
数据库系统原理实验作业三:SQL Server操作_第2张图片

1.2语句没有指定<模式名>创建架构,<模式名>隐含为<用户名>

CREATE SCHEMA AUTHORIZATION WANG;

数据库系统原理实验作业三:SQL Server操作_第3张图片
发现奇怪的现象,命令执行了,在架构里看不到新建立的模式WANG,在问了老师后,原因应该是T-SQL和SQL不同。
可以看看sql server文档,显然我是有点看不太懂,找了找分析。
这是链接:https://blog.csdn.net/weixin_30784945/article/details/96261257

1.当前支持不指定架构名称的 CREATE SCHEMA 语句,目的是为了向后兼容。 此类语句并不在数据库中实际创建架构,但它们会创建表和视图,并授予权限。 主体不需要 CREATE SCHEMA 权限来执行这一早期形式的 CREATE SCHEMA,因为不会创建任何架构。 此功能将从 SQL Server 的未来版本中删除。
2.需要对数据库拥有 CREATE SCHEMA 权限。
3.若要创建在 CREATE SCHEMA 语句中指定的对象,用户必须拥有相应的 CREATE 权限。
4.若要指定其他用户作为所创建架构的所有者,则调用方必须具有对该用户的 IMPERSONATE 权限。 如果指定一个数据库角色作为所有者,则调用方必须拥有该角色的成员身份或对该角色拥有 ALTER 权限。

我的理解就是创建之前必须获得权限,并且不在数据库中实际创建架构,但用它们创建表和视图,并授予权限。(不知道理解的对不对,有错的话,希望大佬指正)

1.3创建了一个模式TEST,并且在其中定义一个表TAB1

连着写第一个可以不用写TEST

CREATE SCHEMA TEST AUTHORIZATION WANG--不要加分号
CREATE TABLE TAB1(COL1 SMALLINT,
				  COL2 INT,
				  COL3 CHAR(20),
				  COL4 NUMERIC(10,3),
				  COL5 DECIMAL(5,3)				  
);
CREATE TABLE TEST.TAB2(COL1 SMALLINT,
						COL2 INT,
						COL3 CHAR(20),
				  		COL4 NUMERIC(10,3),
				 		COL5 DECIMAL(5,3)
);

这期间又遇到问题,我人晕了。最后在我坚持不懈的努力重启后解决了(amazing)
数据库系统原理实验作业三:SQL Server操作_第4张图片
数据库系统原理实验作业三:SQL Server操作_第5张图片

数据库系统原理实验作业三:SQL Server操作_第6张图片

1.4 DROP SCHEMA <模式名>

DROP SCHEMA TEST CASCADE;是错误的

这是因为SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字
将其CASCADE删去后,依旧有错误显示

因为我们删除TEST架构前,要先删除架构中创建的对象tab1,tab2

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

数据库系统原理实验作业三:SQL Server操作_第7张图片

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

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

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

数据库系统原理实验作业三:SQL Server操作_第8张图片

2.3 建立一个“课程”表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

2.4 建立一个学生选课表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)
);

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

ALTER TABLE Student ADD S_entrance DATE;

数据库系统原理实验作业三:SQL Server操作_第9张图片

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

ALTER TABLE Student ALTER COLUMN Sage INT;

数据库系统原理实验作业三:SQL Server操作_第10张图片

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

ALTER TABLE Course ADD UNIQUE(Cname);

改变后的变化
数据库系统原理实验作业三:SQL Server操作_第11张图片

2.8 删除Student表

直接删除会有问题,因为sc表还有对他的引用

DROP TABLE Student

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(‘表名’) --通过这个来得到约束名

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

数据库系统原理实验作业三:SQL Server操作_第12张图片
删除这一约束

--ALTER TABLE 外码的表名 DROP CONSTRAINT 外键约束名
ALTER TABLE SC DROP CONSTRAINT FK__SC__Sno__2C3393D0

之后就可以删除表了

DROP TABLE Student ;

数据库系统原理实验作业三:SQL Server操作_第13张图片

2.9 若表上建有视图,表的删除。

删除表时,如果有视图要先删掉视图,才能删掉表

DROP VIEW View_1;--删除视图操作

三,总结

1.T-SQL和SQL语句有一些不同,有问题时可以查查文档。
2.SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字

解决了问题你会像他一样快乐。
数据库系统原理实验作业三:SQL Server操作_第14张图片

你可能感兴趣的:(数据库作业,sql,数据库)