作业原地址:作业
需要使用:新建查询,输入语句,执行。
注:“√”(分析,快捷键ctrl+F5) ,执行前先分析,查看是否有错误语句。
新建数据库:右键数据库,新建数据库“STU”。或输入语句:
CREATE DATABASE STU;
新建用户:点开安全性→右键用户→新建用户→输入用户名→选择登录名。
1.定义模式
语句:CREATE SCHEMA AUTHORIZATION;
【3.1】为用户WANG定义一个学生-课程模式S-T。
CREATE SCHEMA "S-T" AUTHORIZATION WANG;
截图:
————创建成功√。
注:查看是否已经存在用户WANG,若没有,则可以新建。
【3.2】CREATE SCHEMA AUTHORIZATION WANG;
该语句没有指定,所以隐含为用户名WANG。
CREATE SCHEMA AUTHORIZATION WANG;
【3.3】为用户WANG创建了一个模式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),
);
截图:
2.删除模式
语句:DROP SCHEMA;
【3.4】DROP SCHEMA WANG CASCADE;
删除模式ZHANG,同时该模式中定义的表TAB1也被删除
DROP SCHEMA WANG CASCADE;
这里出现了问题,向同学请教之后才明白,SQL Server不支持使用CASCADE/RESTRICT删除,若删除,可手动删除或直接输入语句
DROP SCHEMA WANG;
参考链接:https://blog.csdn.net/qq_38975453/article/details/104691601
3.基本定义表
SQL语言使用CREATE TABLE 语句定义基本表,其基本格式如下:
CREATE TABLE
( [ ]
[, [ ] ]
…
[, ] );
【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)
);
截图:
【3.6】 建立一个“课程”表Course。
CREATE TABLE Course
(Cno CHAR(4) PRIMARY KEY, /*列表完整性约束条件,Cno是主码*/
Cname CHAR(40)NOT NULL, /*列表完整性约束条件,Cname不能取空值*/
Cpno CHAR(4), /*Cpno的含义是先修课*/
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
/*表级完整性约束条件,Cpno是外码,被参照表是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),
/*表级完整性约束条件,Sno是外码,被参照表是Student*/
FOREIGN KEY (Cno)REFERENCES Course(Cno)
/*表级完整性约束条件,Cno是外码,被参照表是Course*/
);
截图:
4.修改基本表
SQL 语言用ALTER TABLE 语句修改基本表,其一般格式为:
ALTER TABLE
[ ADD[COLUMN] [ 完整性约束 ] ]
[ ADD ]
[ DROP [COLUMN] [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT[ RESTRICT | CASCADE ] ]
[ALTER COLUMN ] ;
是要修改的基本表;
ADD 子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件;
DROP COLUMN 子句用于删除表中的列;
DROP CONSTRAINT 子句用于删除指定的完整性约束条件;
ALTER COLUMN 子句用于修改原有的列定义,包括修改列名和数据类型。
注:
如果指定了CASCADE短语 ,则自动删除引用了该列的其他对象,比如视图;
如果指定了RESTRICT短语,则如果该列被其他对象引用,RDBMS将拒绝删除该列。
【3.8】向Student表增加“入学时间”列,其数据类型为日期型。
ALTER TABLE Student ADD S_entrance DATE;
截图:
【3.9】将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;
截图:
修改成功,Sage为int型
【3.10】增加课程名称必须取唯一值的约束条件。
ALTER TABLE Course ADD UNIQUE(Cname);
截图:
5.删除基本表
使用DROP TABLE 语句删除它,其一般格式为:
DRIO TABLE RESTRICT | CASCADE];
默认情况是RESTRICT。
【3.11】删除Student表
DROP TABLE Student CASCADE;
截图:
这里也出现了问题,情况与上述删除模式相似。
但是按之前的方法删除,会显示表被一个外键约束。
查找资料后,得到如下方法:
1.找出表中的外键约束,代码如下:
select fk.name,fk.object_id,object_name(fk.parent_object_id) as referencetablename
from sys.foreign_keys as fk
join sys.objects as o on fk.referenced_object_id=o.object_id
where o.name = ''
如图:
2.删除外键约束,代码如下:
alter table drop constraint
如图:
原文链接:https://blog.csdn.net/muyie/article/details/79829314?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158374482219726867814708%2522%252C%2522scm%2522%253A%252220140713.130056874..%2522%257D&request_id=158374482219726867814708&biz_id=0&utm_source=distribute.pc_search_result.none-task
【3.12】若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可删除表,视图自动被删除 。
CREATE VIEW IS_Student /*Student表上建立视图*/
AS
SELECT Cno,Cname
FROM Course
WHERE Ccredit='IS';
注:因为Student表上例已经删除,所以这个例子按步骤做了,但是没有截图。偷偷略过吧。
总结:通过12个例子,学到了一些基本的语句以及操作。期间碰到了删除模式、删除表的报错问题,通过查找资料也得以解决。
目前所有操作都是照搬着书上的步骤来的,一些具体的方法、知识什么的还没有渗透,换句话说,按照例题的内容,我以及明白了,但是如果换到新的题的话,我可能还会蒙圈。可能也是接触的新学科吧,这次作业足足做了2小时28分钟,花了好长的时间。虽然这些可能都是简单不能再简单的知识,可能我理解新知识的能力还是欠缺,好多新知识我还要一点一点琢磨。
备注(2020.3.9):这条备注是新加的,这次作业应该也是周五(2020.3.8)和作业3一起上交的,因为我个人的大意,不小心没有成功提交这次作业,而且没能及时发现,导致没有按时交作业,已经向老师说明原因。
今天重新看一次这个作业,发现耗时真的太多了,知识还是要上课认真听讲,尽快理解,课下自己悟太费时间了。而且内容也稍有问题,我回顾了一下,大部分的时间应该都是用在截图了吧,扫一眼有些截图大可不用上传,耗时间也冗篇幅,以后尽量修改。
作业3老师已经看完了,评分是B,回去看了一遍,emm,好像大多数都是书上定义的原话。我自己理解的话(嘴笨也不知道怎么形容),不过每条定义都是我读了几遍一键一键敲上文章去的,脑力也能有个印象,至于自己理解的话,还是不清楚要怎么描述。... 或者把思路写上应该也可以,下次试试。
以上
————(2020.3.8)
作者:Kannoame_Ling00