【数据库】作业4——SQL练习1 - CREATE / DROP / ALTER


  1. 课本的【例3.1】~【例3.12】,在SQLserver上运行一遍。
  2. 注意比较标准SQL与T-SQL之间的不同。
  3. 做完实验后,写一下心得体会。

作业原地址:作业


需要使用:新建查询,输入语句,执行。

注:“√”(分析,快捷键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<模式名><CASCADE|RESTRICT>;

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

发布了7 篇原创文章 · 获赞 12 · 访问量 3067

猜你喜欢

转载自blog.csdn.net/weixin_46366744/article/details/104752442