数据库作业3

2021年3月23日 11点热度 0条评论 来源: dfndj

3.3数据定义

首先自己先创建一个库,在此库下进行一些操作。

1.定义模式

利用可视化操作新建一个用户WANG;

新建用户时登录名需要自己指定,在浏览中选择:
【例3.1】为用户WANG定义一个学生—课程模式S-T。

CREATE SCHEMA"S-T"AUTHORIZATION WANG;

也可以采用可视化操作:架构—>新建架构

指定架构名称和架构所有者:

【例3.2】不指定用户名,此时<模式名>隐含为用户名WANG。

CREATE SCHEMA AUTHORIZATION WANG

但在创建时并没有发现wang的架构,是因为:
【包含 CREATE SCHEMA AUTHORIZATION 但未指定名称的语句仅允许用于向后兼容性。 该语句未引起错误,但未创建一个架构。】
可以在T-SQL文档中查看,附链接。Transact-SQL

【例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,也可在创建表时说明它的架构,例:

CREATE TABLE TEST.TAB2(
COL1 SMALLINT
);

2.删除模式

SQL删除模式语句为:

DROP SCHEMA <模式名><CASCADE|RESTRICT>

|CASCADE是删除模式及其全部数据;|
|RESTRICT如果模式下有数据库对象则拒绝删除

drop schema "TEST"cascade;


这里是因为T-SQL语言不支持使用CASCADE和RESTRICT删除。
需要先删除模式下的对象,再删除模式:

drop table TEST.TAB1;
drop table TEST.TAB2;
drop schema TEST ;


3定义基本表

SQL 使用CREATE TABLE语句定义基本表的基本格式:

CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件]
					[,<列名><数据类型>[列级完整性约束条件]]
					...
					[,<列级完整性约束条件>]);

【例3.5】建立一个“学生”表Student。

create table Student
(Sno char(9) primary key,--Sno主码
Sname char(20) unique,--Sname唯一值
Ssex char(2),
Sage smallint,
Sdept char(20)
);

【例3.6】建立一个“课程”表Course。

create table Course
(Cno char(4) primary key,--Cno是主码
Cname char(40) not null,--Cname不能取空值
Cpno char(4),
Ccredit 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),--Sno、Cno共同构成主码
foreign key(Sno)references Student(Sno),--Sno是外码,被参照表是Student
foreign key(Cno)references Course(Cno),--Cno是外码,被参照表是Course
);

建表的结果图:

4 修改基本表

SQL 语言用ALTER TABLE 语句修改基本表,其一般格式为:

ALTER TABLE <表名>
[ADD [COLUMN] <新列名><数据类型> [完整性约束]]
[ADD <表级完整性约束>]
[DROP [COLUMN] <列名> [CASCADE|RESTRICT]]
[DROP CONSTRAINT <完整性约束名> [RESTRICT|CASCADE]]
[ALTER COLUMN <列名><数据类型>];
ADD 增加新列、新的列级完整性约束条件和新的表级完整性约束条件
DROP COLUMN 删除列,CASCADE删除引用的对象,RESTRICT 被其他对象引用拒绝删除
DROP CONSTRAINT 删除指定的完整性约束条件
ALTER COLUMN 修改原有的列定义,包括修改列名和数据类型

【例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);

5 删除基本表

语句格式为:

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

默认情况是RESTRICT
【3.11】删除Student表。

drop table Student;


因为Student表与SC表有参照关系,不能直接删除。
删除语句的备注–来自T-SQL:
不能使用 DROP TABLE 删除被 FOREIGN KEY 约束引用的表。 必须先删除引用 FOREIGN KEY 约束或引用表。 如果要在同一个 DROP TABLE 语句中删除引用表以及包含主键的表,则必须先列出引用表。
可以在任何数据库中删除多个表。 如果一个要删除的表引用了另一个也要删除的表的主键,则必须先列出包含该外键的引用表,然后再列出包含要引用的主键的表。
删除表时,表的规则或默认值将被解除绑定,与该表关联的任何约束或触发器将被自动删除。 如果要重新创建表,则必须重新绑定相应的规则和默认值,重新创建某些触发器,并添加所有必需的约束。
如果使用 DELETE tablename 删除表中的所有行或使用 TRUNCATE TABLE 语句,则在表被删除之前,表将一直存在。
删除使用了超过 128 个区的大型表和索引时,需要分两个单独的阶段:逻辑和物理阶段。 在逻辑阶段中,对表使用的现有分配单元进行标记以便释放,并对其进行锁定,直到事务提交为止。 在物理阶段,标记为要释放的 IAM 页被成批地物理删除。
如果删除的表包含带有 FILESTREAM 属性的 VARBINARY (MAX) 列,则不会删除在文件系统中存储的任何
数据。

先删除被引用的对象,继而删除该表:

drop table SC;
drop table Student


dbo.SC和dbo.Student已被删除。

【3.12】若表上建有视图,选择RESTRICT时表不能被删除;选择CASCADE时可以删除表,视图也被自动删除。(T-SQL不支持RESTRICT和CASCADE)
【个人总结】:初次接触和了解这些知识吸收的有些慢,好多内容看起来简单,但实际操作时会出现一些不可控的问题,搜集了多方资料才总结学会的!

    原文作者:dfndj
    原文地址: https://blog.csdn.net/dfndj/article/details/115130949
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。