数据库实验【3】 | SQL语句初步熟悉

本文详细介绍了在SQLserver中如何为用户WANG创建、定义模式S-T,创建并修改表结构,包括添加列、更改数据类型和约束,以及删除模式时的注意事项。重点讨论了CASCADE与RESTRICT的区别,以及如何处理视图与表的关系。
摘要由CSDN通过智能技术生成

首先建立一个用户WANG
在这里插入图片描述
然后在用户WANG下进行操作

1. 定义模式

【例3.1】 为用户WANG定义一个学生-课程模式S-T。

CREATE SCHEMA "s-t" AUTHORIZATION WANG;

[例3.2]CREATE SCHEMA AUTHORIZATION WANG;

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

在架构中可以找到我们新建立的s-t和dbo
在这里插入图片描述

[例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)
);

TEST模式建立成功,继续在TEST模式下建立表TAB2:

CREATE TABLE TEST.TAB2
( COL1 SMALLINT 
);

在这里插入图片描述
2. 删除模式

❖ DROP SCHEMA <模式名> <CASCADE|RESTRICT>
◼ CASCADE(级联)
⚫删除模式的同时把该模式中所有的数据库对象全部删除
◼ RESTRICT(限制)
⚫如果该模式中定义了下属的数据库对象(如表、视图
等),则拒绝该删除语句的执行。
⚫仅当该模式中没有任何下属的对象时才能执行。

[例3.4] DROP SCHEMA WANG CASCADE;
删除模式WANG,同时该模式中定义的表TAB1也被删除

但是语句输入后执行有错误
在这里插入图片描述
原来是因为我们用的是SQL server。不支持cascade。所以去掉cascade就OK了。但由于默认是restrict模式,所以还要先将TAB1和TAB2删除才行,即要删除某个模式,必须将与之相连的对象都删除才可:

[例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,
Cname CHAR(40), 
Cpno CHAR(4), 
Ccredit SMALLINTFOREIGN KEY (Cpno) REFERENCES Course(Cno)
);

[例3.7] 建立一个学生选课表SC

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

不管基本表中原来是否已有数据,新增加的列一律为空值

在这里插入图片描述
[例3.9] 将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。

ALTER TABLE Student ALTER COLUMN Sage INT;

[例3.10] 增加课程名称必须取唯一值的约束条件。

ALTER TABLE Course ADD UNIQUE(Cname);

[例3.11] 删除Student表

DROP TABLE Student CASCADE;

在删除模式的时候提到,SQL server不支持CASCADE,所以要手动将Course 和 Sc两个表删除后执行DROP TABLE Student即可删除表Student。

[例3.12 ]若表上建有视图,使用RRESTRICT时表不能删除;使用CASCADE时可以删除表,视图也自动删除。

创建一个视图:

CREATE VIEW IS_Student 
AS 
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';

在这里插入图片描述

查询视图Select *From IS_Student

在这里插入图片描述
接着删除Student(默认RRESTRICT)

DROP TABLE Student

此时会发现表Student 没了但视图还在

在这里插入图片描述
此时再查询视图
SELECT * FROM IS_Student;

在这里插入图片描述
显示错误,由于表Student被删除,所以视图也不可用了。

最开始写的时候在删除那里卡了一下,后来查了之前学长的博客:https://blog.csdn.net/qq_31747473/article/details/104708604 才明白如何解决这个问题,标准SQL和我使用的SQL server之间是有区别的。还有就是老师上课也强调了的,创建表之类的语句不能反复执行,会报错。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值