准备
按下图新建一个用户wang,注意找好位置
模式的定义与删除
模式定义
模式定义语句:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;
例3.1 为用户wang定义一个学生-课程模式S-T
CREATE SCHEMA "S-T" AUTHORIZATION wang;
例3.2CREATE SCHEMA AUTHORIZATION wang;
CREATE SCHEMA AUTHORIZATION wang;
该语句并没有指明<模式名>,则模式名隐含为用户名wang,同时,此处只是定义了一处空间,但由于未指明空间名称,所以并未创建架构
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>];
例3.3 为用户wang创建一个模式TEST,并定义一个表TABLE1
CREATE SCHEMA TEST AUTHORIZATION wang
CREATE TABLE TAB1(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMER(10,3),
COL5 DECIMAL(5,2)
);
删除模式语句:
DROP SCHEMA <模式名><CASCADE|RESTRICT>;
DROP SCNHEMA wang CASCADE
DROP SCHEMA wang CASCADE; --删除模式wang
这是因为T-sql不具备CASCADE语句识别,所以将CASCADE删去,要逐层删去其包含的项目才行,首先就是TAB1
然后删去TEST
基本表的定义,删除与修改
定义基本表
例3.5 建立Student表
CREATE TABLE Student
(Sno CHAR(9)PRIMARY KEY,
Sname CHAR(20) UNIQUE,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
例3.6 建立Course表
CREATE TABLE Course
(Cno CHAR(4)PRIMARY KEY, --定义主码
Cname CHAR(40)NOT NULL, --不可取空值
Cpno CHAR(4), --先修课
Ccradit 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是被参照表
);
创建定义于模式的基本表
CREATE TABLE "S-T".CS(
A CHAR(10)
);
例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);
删除基本表
warning:最离谱儿的地方
例3.11 删除Student表
DROP TABLE<表名>[RESTRICT|CASCADE];
啊~下意思,删了CADSCADE,小事儿
嘛意思
找了好久,一点点抠唆,吐了吐了
找到了下边这个查找外键的语句,我表示看不懂
SELECT name
FROM sys.foreign_key_columns f
JOIN sys.objects o
ON f.constraint_object_id = o.object_id
WHERE f.parent_object_id = OBJECT_ID('表名');
改一下试试
SELECT name
FROM sys.foreign_key_columns f
JOIN sys.objects o
ON f.constraint_object_id = o.object_id
WHERE f.parent_object_id = OBJECT_ID('SC');
介表名啊,不一定是本表的,要去找引用的表,然后看name的_Sno_是是目标表的属性名,对,就他,ctrl+c,crtl+v,
未删前的属性列
应用公式
ALTER TABLE 表名 DROP CONSTRAINT 外键约束名;
实际语句
ALTER TABLE SC DROP CONSTRAINT FK__SC__Sno__628FA481;
操作后可以发现FK没了,就成了
然后就可以删了…
例3.12 若表上建有视图,使用RESTRICT时表不能删除;使用 CASCADE时可以删除表,视图也自动被删除。
在Course表上建立视图:
CREATE VIEW IS_Course
AS
SELECT Cno,Cname,Cpno
FROM Course
WHERE Ccradit = 'IS';
删除Course表
DROP TABLE Course ;
有点熟悉对吧,往上看例3.11
SELECT name
FROM sys.foreign_key_columns f
JOIN sys.objects o
ON f.constraint_object_id = o.object_id
WHERE f.parent_object_id = OBJECT_ID('Course');
ALTER TABLE Course DROP CONSTRAINT FK__Course__Cpno__5FB337D6;
还有SC呢
SELECT name
FROM sys.foreign_key_columns f
JOIN sys.objects o
ON f.constraint_object_id = o.object_id
WHERE f.parent_object_id = OBJECT_ID('SC');
ALTER TABLE SC DROP CONSTRAINT FK__SC__Cno__6383C8BA;
删完被引用部分,开删开删
DROP TABLE Course;
最后来检查一下视图部分
SELECT * FROM IS_Course;
呜呼~起飞,搞完收工
说一下难的:删除那块找了好久,现在看还看不懂,先会用吧…