数据库作业:SQL练习1 - CREATE / DROP / ALTER

1.定义模式:CREATE SCHEMA <模式名>AUTHORIZATION<用户名>;
若没有指定<模式名>,则<模式名>隐含为<用户名>。
(SQL server 中,默认用户为 dbo,在没有创建模式的情况下,默认的模式名为dbo,所以表名为dbo.*。)

【例3.1】 为用户定义一个学生-课程模式S-T。
首先检查数据库中是否存在WANG。如果没有,需先创建该用户。
创建用户(用SQL语句时执行不了,原因不清楚啊,以后学到再说),直接右键用户-创建用户
CREATE USER <用户名> [WITH][DBA|RESOURCE|CONNECT];

点击新建查询(ctrl+R),输入下列语句,点击执行。
AUTHORIZATION为授权,SCHEMA为架构。

	CREATE SCHEMA"S-A"AUTHORIZATION WANG;

在这里插入图片描述如图,已建立成功
在这里插入图片描述

【例3.2】 CREATE SCHEMA AUTHORIZATION WANG;
定义了模式,实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等。CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW 和GRANT子句。创建模式的同时可以同时在这个模式定义中进一步创建基本表、视图,定义授权。即CREATE SCHEMA <模式名> AUTHORIZATION<用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>];

【例3.3】为用户WANG创建一个模式TEST,并且在其中定义一个表TAB1。

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

如图,TEST.TEB1已建立好。
在这里插入图片描述

2.删除模式
在SQLserver中,删除模式语句如下:
(课文中DROP SCHEMA<模式名><CASCADE|RESTRICT>)

	DROP SCHEMA<模式名>;

(其中CASCADE和RESTRICT两者必选其一。选择了CASCADE(级联),表示删除模式的同时该模式中所有数据库对象全部删除;选择了RESTRICT(限制),表示如果该模式下已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。只有该模式中没有任何下属的对象时才能执行DROP SCHEMA语句。)

【例3.4】 DROP SCHEMA WANG (CASCADE);

	 DROP SCHEMA TEST;
	 --无法对 'TEST' 执行 drop schema,因为对象 'TEB1' 正引用它。

先删除模式下的表,再删除模式。

3.定义基本表TABLE
本身独立存在的表,SQL中一个关系就对应一个基本表,一个(或多个)基本表对应一个存储文件,一个表可以带若干索引。
创建一个模式就建立了一个数据库的命名空间,一个框架,在这个空间中首先要定义的时该模式包含的数据库剧本表。

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

如图,可以看到生成了dbo.Student表
在这里插入图片描述
在这里插入图片描述

[例3.6】 建立一个“课程”表Course。(参照表和被参照表可以是同一个表)

	CREATE TABLE Course
		(Cno CHAR(4)PRIMARY KEY,
	     Cname CHAR(40) NOT NULL,          /*Cname不可为空*/
	     Cpno CHAR(4),
	     Credit SMALLINT,
	     FOREIGN KEY(Cpno)REFERENCES Course(Cno)
	     );

在这里插入图片描述

【例3.7】 建立学生选课表SC。

	CREATE TABLE SC
		(Sno CHAR(9),
	     Cno CHAR(4) ,          /*Cname不可为空*/
	     Grade SMALLINT,
	     PRIMARY KEY(Sno,Cno),
	     FOREIGN KEY(Sno)REFERENCES Student(Sno),    /*表级完整性约束条件,Sno是外码,被参照表是Student*/
	     FOREIGN KEY(Cno)REFERENCES Course(Cno),    /*表级完整性约束条件,Cno是外码,被参照表是Course*/
	     );

在这里插入图片描述

4.修改基本表
ALTER TABLE语句修改基本表的一般格式:
<表名>是要修改的基本表,AD语句用来增加心裂、新的列级完整性的约束条件。DROP COLUMN用于删除表中的列,如果指定CASCADE,则自动删除引用了该列的其他对象,比如视图;如果只能够了RESTRICT短语,则如果该列被其他对象引用,RDMD将拒绝删除该列。ALTER COLUME 子句用于修改原有的列定义,包括修改列名和数据类型。

	ALTER TABLE<表名>
	[ADD[COLUMN]<新列名><数据类型>[完整性约束]]
	[ADD<标记完整性约束>]
	[DROP[COLUMN]<列名>[CASCADE|RESTRICT]]
	[DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]]
	[ALTER COLUMN<列名><数据类型>];

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

5.删除基本表
DROP TABLE<表名>;(与课本不同的是,这里没有CASCADE,RESTRICT,原:若选择RESTRICT,则该表的删除是有限制条件的。欲删除的基本表不能被其他表的约束所引用(如CHECK,FOREIGN KEY等约束),不能有视图,触发器,存储过程或函数等。如果存在这些,此表就不能被删除。若选择CASCADE,则该表直接被删除,不管它有没有相关的依赖对象。)

【例3.11】删除Student表。

	DROP TABLE  Student;
	--无法删除对象 'Student',因为该对象正由一个 FOREIGN KEY 约束引用。

上面例子在建立表SC时,用了Student表的Sno做外码,有约束,所以不能删除。删除SC后,Student就可以删除成功了。

【例3.12】若表上有视图,选择RESTRICT时表不能删除;选择CASCADE时可以删除表,视图也被删除。(SQLserver不支持RESTRICT,CASCADE,删除直接用了DROP TABLE 表名)

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

	SELECT*FROM IS_Student;
	--由于绑定错误,无法使用视图或函数 'IS_Student'。

视图还在,但无法使用了。

参考:链接https://blog.csdn.net/qq_38975453/article/details/104691601

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

猜你喜欢

转载自blog.csdn.net/karive/article/details/104682430