数据库作业例3.1-3.12

虽然SQLServer和其他的许多工具都提供了可视化操作的方法,但是在涉及到与其他程序的连接等情况下,必须退回到代码层面。而且代码操作也是程序员的基本素养之一(用代码操作也显得更高大上不是吗),本次例子的展示都会采用代码操作的方法。
下面将要进行的例子都是在数据库的基础下进行的,我们先从创建数据库开始。
SQLServer代码操作
在这里插入图片描述

按钮 功能描述
新建查询 开始代码输入
执行 运行输入的代码
对勾符号 检验代码是否正确

点击新建查询之后会在界面区出现可输入部分,如下
在这里插入图片描述
图中语句为新建名为study的数据库,点击执行后在左侧菜单栏中点击刷新即可找到新建的数据库。
【例3.1】

CREATE SCHEMA "S-T" AUTHORIZATION WANG;

为用户WANG定义一个学生-课程模式S-T
对于用户的操作必须建立在该用户已经存在的基础上,系统默认的用户中不存在名为WANG的用户,需要手动创建。
在左侧菜单栏的study中点击【安全性】,点击【用户】,右键选择【新建用户】
在这里插入图片描述
【用户名】填写WANG,【登录名】点击可选菜单中的浏览,选取第一个。
在这里插入图片描述
【默认结构】不需要填写,点击【确定】创建。
用户创建完成,接下来执行代码即可。

【例3.2】

CREATE SCHEMA AUTHORIZATION WANG;

该语句没有指定<模式名>,所以<模式名>隐含为用户名WANG。
在未修改默认用户名之前,用户名默认为dbo。这也是为什么直接创建的表前缀为dbo.
【例3.3】

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

为用户WANG创建一个模式TEST,并且在其中定义一个表TAB1。
在这里插入图片描述
【例3.4】

DROP SCHEMA ZHANG CASCADE;

该语句删除了模式ZHANG,同时,该模式中已经定义的表TAB1也被删除了。
要删除首先要有该模式,按照上一个例子的步骤创建模式ZHANG,把表名的部分修改即可。
关于删除模式(即ZHANG后面的关键字)
CASCADE(级联)
删除模式的同时把该模式的所有数据库对象全部删除
RESTRICT(限制)
如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。

好了,如果上面的东西你都看懂了,那么接下来执行代码就完成了……才有鬼了。
如果你是按上述步骤正确操作,那么在SQLServer环境下会发生下面的情况
在这里插入图片描述
SQLServer不支持上述的关键字,在不加关键字的情况下为限制删除,需要删除已有的表。

DROP TABLE ZHANG.TAB1;
DROP SCHEMA ZHANG;

使用代码分级删除即可。
【例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)
      );

创建表
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ]

[,<表级完整性约束条件> ] );
在这里插入图片描述
(主码自带不为空属性)
【例3.6】建立一个“课程”表Course。

CREATE TABLE  Course(
			Cno CHAR(4) PRIMARY KEY,/*列级完整性约束条件,Cno是主码*/
        	Cname CHAR(40)NOT NULL, /*列级完整性约束条件,Cname不能取空值*/           
         	Cpno CHAR(4),/*Cpon的含义是先修课*/               	                      
            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*/
        ); 

在这里插入图片描述
【例3.8】向Student表增加“入学时间”列,其数据类型为日期型。

ALTER TABLE Student ADD S_entrance DATE;

不论基本表中原来是否已有数据,新增加的列一律为空值。
修改表的语句
ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [COLUMN] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;
在这里插入图片描述
【例3.9】将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。

ALTER TABLE Student ALTER COLUMN Sage INT;

在这里插入图片描述
【例3.10】增加课程名称必须取唯一值的约束条件。

ALTER TABLE Course ADD UNIQUE(Cname); 

在这里插入图片描述
【例3.11】 删除Student表。

DROP TABLE Student CASCADE;

注意,基本表删除时,表中的数据、定义、建立的索引、触发器等也会会被删除。
与之前的一样,该语句不能被SQLServer正确执行。
【例3.12】若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可删除表,视图自动被删除 。

CREATE VIEW IS_Student/*Student表上建立视图*/
AS
SELECT Sno,Sname,Sage
RROM Student
WHERE Sdept="IS";

DROP TABLE Student RESTRICT;/*删除Student表*/
--ERROR:cannot drop table Student becausee other objects depend on it
/*系统返回错误信息,存在依赖该表的对象,此表不能被删除*/
DROP TABLE Student CASCADE;/*删除Student表*/
--NOTICE:drop cascades to view IS_Student
/*系统返回提示,此表上的视图也被删除*/
SELECT*FROM IS_Student;
--ERROR:relation"IS_Student"does not exist

由于SQLSrever不能正确执行,这里不再演示。

发布了5 篇原创文章 · 获赞 5 · 访问量 2484

猜你喜欢

转载自blog.csdn.net/jiesfriend/article/details/104734045