SQL server的数据操作

准备

按下图新建一个用户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;

在这里插入图片描述
呜呼~起飞,搞完收工
说一下难的:删除那块找了好久,现在看还看不懂,先会用吧…

猜你喜欢

转载自blog.csdn.net/fanlrr/article/details/115068043