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