1.定义模式
【例3.1】 为用户WANG定义一个学生-课程模式S-T。
在SQL中,模式定义语句如下:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
前提是一定要先有这个WANG用户名。
CREATE SCHEMA "S-T" AUTHORIZATION WANG
【例3.2】CREATE SCHEMA AUTHORIZATION WANG;
到这里WANG用户已经建立好了。
新建查询。
输入SQL语句。选择对应的数据库Student。
至此S-T已经建立好了。
【例3.3】 为用户ZHANG创建一个模式TEST,并且在其中定义一个表TAB1。
以下两条语句要一起执行,否则的活,表的模式会被默认成dbo.
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CREATE TABLE TAB1(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);
2.删除模式
【例3.4】DROP SCHEMA ZHANG CASCADE;
在SQL中,删除语句如下:
DROP SCHEMA<模式名><CASCADE|RESTRICT>;
但是这里显示有错误,这是因为SQL serve不支持CASCADE。
需要先删除表TEST.TAB1,再删除TEST模式。
DROP TABLE TEST.TAB1;
DROP SCHEMA TEST;
3.定义基本表
基本格式:
CREATE TABLE <表名>(
<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ]
...
[,<表级完整性约束条件> ] );
【例3.5】建立一个“学生”表Student。
create table Student
(Sno char(9) primary key,
Sname char(20) unique,
Ssex char(2),
Sage smallint,
Sdept char(20)
);
【例3.6】建立一个“课程”表Course。
create table Course
(Cno char(4) primary key,
Cname char(40) not null,
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),
foreign key(Cno)references Course(Cno)
);
4.数据类型
几种常见的数据类型如下:
5.模式与表
当定义基本表时一般可以有三种方法定义它所属的模式。
方法一,在表名中明显地给出模式名。
CREATE TABLE “S-T”.Student(…);
CREATE TABLE “S-T”.Course(…);
CREATE TABLE “S-T”.SC(…);
/* 以上三个表的模式是S-T */
方法二,在创建模式语句中同时创建表,如例3.3.
方法三,设置所属的模式,这样在创建表时表名中不必给出模式名。
6.修改基本表
SQL语言用ALTER TABLE语句修改基本表,一般格式为
ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;
ADD 子句:用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件。
DROP COLUMN 子句:用于删除表中的列·。1.如果指定了CASCADE短语,则自动删除引用了该列的其他对象。2.如果指定了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);
7.删除基本表
一般格式:
DROP TABLE <表名>[RESTRICT| CASCADE];
RESTRICT:即该表的删除时不能被其他表的约束条件所引用,不能能有视图,不能有触发器,不能有存储过程或函数等,否则将删除失败。
CASCADE:即该表的删除没有限制,再删除该表的同时,其相关联的依赖对象都将被一起删除。但是SQLServer并未实现这一功能,所以在执行语句时会出现错误提示。
【例3.11】删除Student表。
drop table Student;
显示错误如下:
无法删除对象 ‘Student’,因为该对象正由一个 FOREIGN KEY 约束引用。
这时我们需要找到那些表的外键引用了Student。
本例中,Student表被SC表的约束引用,所以无法直接删除。需要先将表SC删除,然后再删除表Student。
至此,删除完成。
drop table SC;
drop table Student;
【例3.12】若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可以删除表,视图也自动被删除。
先在Student表上建立视图。
create view IS_Student
as
select Sno,Sname,Sage
from Student
where Sdept='IS';
查看视图。
select * from Student IS_Student;
删除Student表。
drop table Student restrict;
drop table Student cascade;
这是因为T-SQL与标准SQL不太一样的缘故。
SQL Server “DROP TABLE 表名 CASCADE” 显示"CASCADE"附近有语法错误的原因
正确语句。
drop table Student ;
再次查看视图。
视图依旧保存,但是已经失效。
心得
有的时候,自己的代码运行不出来或者卡在一半了,去网上查资料的时候,整个人都傻了,好多种说法和答案,不知道哪一个才是正确的,我还是按照自己的实验结果来写自己的作业吧。。。