先po一张图 po完再说
本文出自https://blog.csdn.net/MooM_X/article/details/104658786,
https://blog.csdn.net/qq_44871112/article/details/104683353
学艺不精,只好借鉴。
【例3.2】该语句没有指定<模式名>,<模式名>隐含为<用户名>
在没有创建模式的情况下,默认的模式名为dbo,表名为dbo.*。
好了 接下来我们一起联系一下SQL语句
①:【新建数据库】
直接右击新建 或 者输入指令⬇
CREATE DATABASE STU;
②:【在库下新建用户】
打开安全性→右击用户→新建→用户名→登录名(选择第一个)→确定
【例3.1]】为用户WANG定义一个学生-课程模式S-T
CREATE SCHEMA AUTHORIZATION WANG;
为用户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 这里dbo是默认的
TEST模式建立成功,继续在TEST模式下建立表TAB2
CREATE TABLE TEST.TAB2
( COL1 SMALLINT
);
上图第一行如果是CREATE TABLE TAB2,则表为dbo.TAB2
删除语句
DROP SCHEMA TEST CASCADE;
这里报错了,因为在SQL Serever里drop schema语句并不支持cascade关键字,要想成功删除架构,必须先删除这个架构下已经创建的对象
这里删除模式TEST,同时该模式中定义的表也被删除
在这里如果想删除架构,需要先删除架构下创建的对象。
1.手动删除:右击就可
2.语句删除
DROP TABLE TEST.TAB1;
DROP TABLE TEST.TAB2;
DROP SCHEMA TEST;
下面我们看一下结果 可以看到 架构TEST已被删除
好了 我们呢下面来看一下创建表的形式
创建表的形式:
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[<列名> <数据类型>[ <列级完整性约束条件>] ]
…
[<表级完整性约束条件> ] );
<表名>:所要定义的基本表的名字
<列名>:组成该表的各个属性(列)
<列级完整性约束条件>:涉及相应属性列的完整性约束条件
<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
涉及到一个属性列的完整性约束条件时可以用列级完整性约束条件,也可以用表级完整性约束条件;涉及多个属性列的完整性约束条件时只能用表级完整性约束条件。
-可以把表自行储存在记事本里,等用的时候直接把语句复制到SQL
【例3.5】 建立“学生”表Student 学号是主码,姓名取值唯一。
注:需在当前数据库的当前模式下执行。(直接CREATE 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为主码,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)
);
创建成功
【例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】将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。
ALTER TABLE Student ALTER COLUMN Sage INT;
原来为smallint 现在为int
【例3.10】增加课程名称必须取唯一值的约束条件。
ALTER TABLE Course ADD UNIQUE(Cname);
如下图
【例3.11】 删除Student表
基本表定义被删除,数据被删除
表上建立的索引、视图、触发器等一般也将被删除
DROP TABLE Student CASCADE;
这里会报错 直接去掉CASCADE
使用如下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时可删除表,视图自动被删除 。
**CREATE VIEW IS_Course /*Course表上建立视图*/
AS
SELECT Cno,Cname
FROM Course
WHERE Ccredit='IS';**
删除表,Course有外码所以先把外键约束解除
检查视图是否存在
SELECT * FROM IS_Course;
无法使用视图,再创建表Course,就可以看到了
SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字,所以删除表之后视图保留但是无法使用,重建表之后就可以了。
执行命令之前看看当前的库是不是你要修改的用户所在的库。
不能在已经执行的命令直接往后写,因为会重复执行。
执行操作后刷新才会看到成功建立修改或删除。
这次作业很赶也很急,大多是主观因素,没有合理的安排复习时间,今天给自己记下一笔账。课下把落下的东西全都补回来。