【HBU】数据库第三周-1 数据库模式与基本的表的操作

昨天上实验的时候,sql server莫名奇妙就坏了! 很烦! 在经过一天的抢修后 其间遭遇了许多问题,咨询了一些有经验的人后(感谢每一个帮助我的人),终于重新安装好了(中间的过程可以用 折磨 来形容。)sql server重装好的时候感觉相当的爽。
在这里插入图片描述

模式

新建用户

在数据库内的安全性的用户目录下右键即可
在这里插入图片描述

定义模式

这里用到的语句是:

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
为用户WANG定义一个学生-课程模式S-T

	CREATE SCHEMA "S-T" AUTHORIZATION WANG;

在这里插入图片描述
在这里插入图片描述
这时候刷新后S-T就出来了

CREATE SCHEMA AUTHORIZATION WANG;

该语句没有指定<模式名>,<模式名>隐含为<用户名>
即这里的模式名隐含为 WANG
SQL server 中,默认用户为 dbo,在没有创建模式的情况下,默认的模式名为dbo,所以表名为dbo.*.

定义模式下的基本表

定义模式实际上定义了一个命名空间
在这个空间中可以定义该模式包含的数据库对象,
例如基本表、视图、索引等。
在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW和
GRANT子句。格式如下:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
[<表定义子句>|<视图定义子句>|<授权定义子句>]

比如:


CREATE SCHEMA TEST AUTHORIZATION wang;
CREATE TABLE TAB1 ( COL1 SMALLINT, 
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);

为用户ZHANG创建了一个模式TEST,并且在其中定
义一个表TAB1:
在这里插入图片描述
TEST模式建立成功,继续在TEST模式下建立表TAB2

CREATE TABLE TEST.TAB2
( COL1 SMALLINT 
);

(这里忘截图了)
如果不同时加入建立模式的操作 或者是像这样TEST.TAB2
生成的表就属于默认模式 dbo
在这里插入图片描述

因为
定义基本表所属模式
方法一:在表名中明显地给出模式名 Create
table"S-T".Student(…); /模式名为 S-T/ Create table
“S-T”.Cource(…); Create table “S-T”.SC(…);

方法二:在创建模式语句中同时创建表
方法三:设置所属的模式 (DBMS中先设置模式,再建表)

删除模式

DROP SCHEMA <模式名> <CASCADE|RESTRICT>
CASCADE(级联) 删除模式的同时把该模式中所有的数据库对象全部删除
RESTRICT(限制) 如果该模式中定义了下属的数据库对象(如表、视图
等),则拒绝该删除语句的执行。
仅当该模式中没有任何下属的对象时才能执行。

因为sql-server中不支持这两种关键字 所以无法通过这个语句在sql server中实现删除
同时 不可以直接使用

Drop SCHEMA TEST

的方式来删除他 因为在他的架构下还有自己的表
只需先删除表即可 此时左边已经没有TEST模式了。
在这里插入图片描述

表的建立

创建基本表
CREATE TABLE <表名> (
<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ]

[,<表级完整性约束条件> ] );
◼ <表名>:所要定义的基本表的名字
◼ <列名>:组成该表的各个属性(列)
◼ <列级完整性约束条件>:涉及相应属性列的完整性约束条件
◼ <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件
如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,
否则既可以定义在列级也可以定义在表级

建立“学生”表Student。学号是主码,姓名取值唯一

CREATE TABLE Student 
(Sno CHAR(9) PRIMARY KEY, 
/* 列级完整性约束条件,Sno是主码*/ 
Sname CHAR(20) UNIQUE, /* Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);

在这里插入图片描述
这里要注意一点,要在当前数据库模式下进行
在这里插入图片描述
建立一个“课程”表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
在这里插入图片描述
建立一个学生选课表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*/
);

在这里插入图片描述

数据类型

在这里插入图片描述
VARCHAR 和 CHAR的区别是 CHAR无论你输入的数据 只要在定义的n的范围内 他所需空间都是n 而varchar等于你输入的数据的长度(小于n)

修改基本表

ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;

◼ <表名>是要修改的基本表
◼ ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整
性约束条件
◼ DROP COLUMN子句用于删除表中的列
 如果指定了CASCADE短语,则自动删除引用了该列的其他对象
 如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库
管理系统将拒绝删除该列
◼ DROP CONSTRAINT子句用于删除指定的完整性约束条件
◼ ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型

向Student表增加“入学时间”列,其数据类型为日期型

ALTER TABLE Student ADD S_entrance DATE;
//不管基本表中原来是否已有数据,新增加的列一律为空值

在这里插入图片描述
将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。

ALTER TABLE Student ALTER COLUMN Sage INT;

在这里插入图片描述
增加课程名称必须取唯一值的约束条件。

ALTER TABLE Course ADD UNIQUE(Cname);

在这里插入图片描述

删除基本表

DROP TABLE <表名>[RESTRICT| CASCADE];

RESTRICT:删除表是有限制的。 • 欲删除的基本表不能被其他表的约束所引用
• 如果存在依赖该表的对象,则此表不能被删除
◼ CASCADE:删除该表没有限制。 • 在删除基本表的同时,相关的依赖对象一起删除
若表上建有视图,使用RESTRICT时表不能删除;使用
CASCADE时可以删除表,视图也自动删除。

建立视图:

CREATE VIEW IS_Student 
AS 
SELECT Sno,Sname,Sage
FROM Student
WHERE Sdept='IS';

在这里插入图片描述
在这里插入图片描述

但是前面已经说过 在sql server里 是 不支持这两个 关键字的
如果直接使用 会报错
在这里插入图片描述
此时也不能直接DROP在这里插入图片描述

应该先找到这个外键并删除。

SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME='Student'

在这里插入图片描述
这里的PK是 primary key
UQ:unique
所以删除PK的那条即可

alter table 表名 drop constraint 外键约束名

在这里插入图片描述
真是层层套娃!
在这里插入图片描述
在这里插入图片描述
恩 这下应该好了 让我们看看
在这里插入图片描述
果不其然。

睡觉了 晚安

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值