• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

SQL Server模式定义与表的增删改 3.22课程

数据库 小龙不是蛇 1722次浏览 0个评论

第四周的数据库实验课,动手建立用户与模式,并将学习的表之间的参照关系使用SQL语句应用于表的建立、修改和删除中

1、模式的定义和授权

模式在SQL Server中称为架构,一个模式下通常包括了多个表、视图和索引等数据库对象。模式授权于用户,用户被授权某个模式,相当于被授权使用数据库中该模式下数据的权利

新建用户时,需要指定登录名,在浏览(… )中选择

建立架构时,可直接指定将该架构授权给哪个用户

create schema "S-T" authorization wang --为用户 wang 授权新建的架构S-T,批处理语句末尾不能分号
create table tab1(
	col1 smallint,
	col2 int,
	col3 char(20),
	col4 numeric(10,3),
	col5 decimal(5,2)
); --为该模式创建一个表tab1,S-T.tab1

如果不先授权架构,直接创建表,默认的是创建最高权限管理员架构的表,即dbo.*
也可使用SSMS可视化操作,建立架构并选择授权用户

建立架构时,架构所有者即为授权的用户

2、模式的删除

删除分为(级联)cascade删除和(限制)restrict删除,cascade在删除时同时将该模式下已定义的数据库对象一并删除,restrict删除会在该模式存在数据库对象时删除失败

SQL Server的T-SQL语言不支持使用cascade和restrict删除

-- drop schema "S-T" cascade; --不支持
-- drop schema "S-T" restrict; --不支持
drop schema "S-T"; --表示架构时需要加双引号,感觉相当于restrict删除模式

直接删除内部存在表、视图等数据库对象的架构会失败

需要在删除前清空架构内的数据库对象

drop table "S-T".tab1; -- 先删该模式下的表等数据对象
drop schema "S-T"; -- 再删除该模式

3、表的建立和修改

直接建立表,默认会在最高权限模式下建立

建立表时,可在列名后添加该属性列的完整性约束条件(主码、能否为空等),最后添加该表的完整性约束条件(主属性、外码设置等)

 -- foreign key(a) references tab(b) --该表中a属性为外码,对应于tab表的b属性

create table Student(
	Sno varchar(20) primary key, --主码
	Sname varchar(20) unique, --值互不相同
	Ssex varchar(2),
	Sage smallint,
	Sdept varchar(20)
); --建立学生表
create table Course(
	Cno varchar(4) primary key, --主码
	Cname varchar(40) not null, --不能取空值
	Cpno varchar(4), --表示先行课程
	Ccredit smallint,
	foreign key(Cpno) references Course(Cno) --自身与自身参照,Cpno是外码(确保先行课程是存在的)
); --建立课程表
create table SC(
	Sno varchar(20),
	Cno varchar(4),
	Grade smallint,
	primary key(Sno,Cno), --主属性包含两个属性
	foreign key(Sno) references Student(Sno), --Sno是外码,被参照表为Student表,数据类型需相同
	foreign key(Cno) references Course(Cno) --Cno是外码,被参照表为Course表
	/*确保选课的学号真实存在,所选的课真实存在*/
); --建立选课表

insert into Student values(
	'20191102041',
	'王伯成',
	'男',
	21,
	'计算机科学与技术'
); --插入一个元组,注意字符串单引号

可为已建立的表添加新属性(列),或修改已有属性的完整性约束

alter table Student add S_entrance date; --Student表添加新列
alter table Student alter column Sage int; --Student表改属性数据类型
alter table Course add unique(Cname); --Course表改Cname属性值互不相同

4、表的删除

因为参照完整性规则,在删除表时,需要考虑该表与其他表使的参照关系,直接删除带有外码的表会失败

需要先删除被参照关系的表

-- drop table SC cascade; --不支持
-- drop table SC restrict; --不支持
drop table SC;
drop table Course;
drop table Student; --删除表后,视图等相关内容不可用

删除表后,依赖该表的视图等对象仍有物理空间存在,但已不可用

SQL-Server取消了cascade和restrict的删除,是不是为了安全性?避免误操作
感觉SSMS的编辑器挺奇特,莫名其妙的红线(偏说刚建的表或什么的不存在),但是可以执行成功


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明SQL Server模式定义与表的增删改 3.22课程
喜欢 (0)

您必须 登录 才能发表评论!

加载中……