SQL功能 | 动词 |
---|---|
数据查询 | SELECT |
数据定义 | CREATE,DROP,ALTER |
数据操纵 | INSERT,UODATE,DELETE |
数据控制 | GRANT,REVOKE |
【新建数据库】
直接右击新建 或 者输入指令⬇
CREATE DATABASE STU;
【在库下新建用户】
打开安全性→右击用户→新建→用户名→登录名(选择第一个)→确定
【例3.1]】为用户WANG定义一个学生-课程模式S-T
CREATE SCHEMA "S-T" AUTHORIZATION WANG;
【例3.2】该语句没有指定<模式名>,<模式名>隐含为<用户名>
在没有创建模式的情况下,默认的模式名为dbo,表名为dbo.*。
CREATE SCHEMA AUTHORIZATION WANG;
这里只放了例3.1的截图(标注了操作顺序)
【例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),
);
注:如果去掉第一行,则表为dbo.TAB1
TEST模式建立成功,继续在TEST模式下建立表TAB2
CREATE TABLE TEST.TAB2
( COL1 SMALLINT
);
另:第一行如果是CREATE TABLE TAB2
,则表为dbo.TAB2
【例3.4】删除模式TEST,同时该模式中定义的表也被删除
DROP SCHEMA TEST CASCADE;
这里显示语法错误是因为SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字,把它去掉之后还是不行,因为TAB1,TAB2正在引用(我也不知道他为啥就光显示TAB1)
所以想删除架构,需要先删除架构下你创建的对象。
1.手动删除:右击就可
2.语句删除⬇
DROP TABLE TEST.TAB1;
DROP TABLE TEST.TAB2;
DROP SCHEMA TEST;
——————————————【创 建 基 本 表】—————————————
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ]
…
[,<表级完整性约束条件> ] );
<表名>:所要定义的基本表的名字
<列名>:组成该表的各个属性(列)
<列级完整性约束条件>:涉及相应属性列的完整性约束条件
<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,
否则既可以定义在列级也可以定义在表级。
★可以把表自行储存在记事本里,到时候直接把语句复制到SQL,或者直接打开文件。⬇
【例3.5】 建立“学生”表Student。学号是主码,姓名取值唯一。
注:需在当前数据库的当前模式下执行。(所以直接GREATE TABLE
就可以啦)
CREATE TABLE Student(
Sno CHAR(9) PRIMARY KEY, /* 列级完整性约束条件,Sno是主码*/
Sname CHAR(20) UNIQUE, /* Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
PRIMARY KEY:主码(列名前标有黑色小钥匙且括号里有PK标识)
UNIQUE:取唯一值
这俩都是列级完整性约束条件
因为我一不小心点了两下执行所以消息那里显示了图上的文字。然后还有前几节课学过的:主码不为空(not null)。
【例3.6 】 建立一个“课程”表Course
CREATE TABLE Course(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(40),
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY (Cpno) REFERENCES Course(Cno)
/*Cpno是外码,被参照表是Course,被参照列是Cno*/
);
FOREIGN KEY:外码(属性名前有白色小钥匙) 表级完整性约束条件
REFERENCES后面写 被参照表(被参照类)
【例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*/
);
————————————【修 改 基 本 表】———————————————
ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [COLUMN] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;
<表名>是要修改的基本表
ADD 用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
DROP COLUMN 用于删除表中的列
DROP CONSTRAINT 用于删除指定的完整性约束条件
ALTER COLUMN 用于修改原有的列定义,包括修改列名和数据类型
如果指定了CASCADE短语,则自动删除引用了该列的其他对象
如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列
【例3.8】向Student表增加“入学时间”列,其数据类型为日期型
☆不管基本表中原来是否已有数据,新增加的列一律为空值
ALTER TABLE Student ADD S_entrance DATE;
【例3.9】将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。(这里本来的数据类型是smallint,前面的图里都有,所以只放修改后的截图
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/RESTRICT关键字,那接着去掉cascade
在CSDN上查到了方法~附上链接:https://blog.csdn.net/weixin_34237596/article/details/91920860?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
使用如下SQL语句查询出表中外键约束名称:
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('外码的表名')
ALTER TABLE 外码的表名 DROP CONSTRAINT 外键约束名
就没有FK啦,然后删除表就可以了!
【例3.12】若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可删除表,视图自动被删除 。
Student刚删除了,我就用Course表做的
CREATE VIEW IS_Course /*Course表上建立视图*/
AS
SELECT Cno,Cname
FROM Course
WHERE Ccredit='IS';
删除表,Course有外码所以先把外键约束解除(不截图了)
视图还在,检查视图是否存在
SELECT * FROM IS_Course;
无法使用视图,再建表Course,就可以看到了
我这有个报错应该是因为Ccredit是smallint,我直接照书上打的IS导致的
★因为SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字(重要的事情说三遍),所以删除表之后视图保留但是无法使用,重建表之后就可以了。
需要注意⬇
执行命令之前看看当前的库是不是你要修改的用户所在的库。
不能在已经执行的命令直接往后写,因为会重复执行。
执行操作后刷新才会看到成功建立修改或删除。
我有点不太习惯纯大写,虽然小写也可以,但是书上都是大写,慢慢习惯啦~
还有一个想不通的点,就是有时候我的语句会有红线,鼠标移过去显示:该架构不存在或者我无权使用,但是对于执行却没有影响。查资料查到一个是说权限问题,我改了权限也没用(这个权限问题应该是执行不了的情况),反正执行也没影响我就这么做下来了,但是还是好奇