创建新的数据库后,创建新的用户和模式(架构)
模式定义:
模式定义语句
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
例3.1:为用户WANG定义一个学生课程模式S-T
CREATE SCHEMA "S-T" AUTHORIZATION WANG;
刷新架构,出现S-T
如果模式定义语句没有指定模式名,模式名隐含用户名
例3.2:
该语句没有指定<模式名>,<模式名>隐含为<用户名>
在没有创建模式的情况下,默认的模式名为dbo,表名为dbo.*?。
CREATE SCHEMA AUTHORIZATION WANG;
例3.3:为用户WANG创建一个TEST,并且在其中定义一个表TAB1
CREATE SCHEMA TEST1 AUTHORIZATION WANG
CREATE TABLE TAB1(
COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2),
);
这里的第一行打上注释是因为,第一个语句已经执行过,已经为用户WANG创建了模式TEST,所以再执行一遍会重复——报错。因此要注释掉
CREATE TABLE TEST.TAB2(
COL1 SMALLINT
);
模式删除:
删除模式语句:
DROP SCHEMA <模式名> <CASCADE/RESTRICT>
CASCADE 和 RESTRICT二选一
CASCADE(级联):删除模式的同时,把该模式中的所有数据库对象全部删除
RESTRICT(限制):如果该模式下,已经定义了下属数据库对象,则拒绝这条删除语句执行
例3.4:
DROP SCHEMA TEST1 CASCAD
这里语法错误是因为SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字,如果简单地去掉的话,是不可以的,因为有下属文件TAB1 TAB2在引用
DROP TABLE TEST1.TAB1;
DROP TABLE TEST1.TAB2;
DROP CASCADE TEST1;
定义基本表:
定义基本表的格式:
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)
);
代码部分可以写在编辑器里改成sql后缀之后,在SQL中打开,也可以新建查询输入执行
例3.6:建立一个“课程”表Course
CREATE TABLE Course(
Cno CHAR(4) PRIMARY KEY,
/*列级完整性约束条件,Cno是主码*/
Cname CHAR(40),
/*列级完整性约束条件,Cname不能取空值*/
Cpno CHAR(4),
/*Cpno的含义是先修课*/
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),
/*主码由两个属性构成,必须作为表级完整性进行定义*/
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 <列名> <数据类型> ] ;
例3.8:向Student表增加“入学时间”列,其数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE;
3.9:将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数
ALTER TABLE STU ALTER COLUMN Sage INT;
3.10:增加课程名称必须取唯一值的约束条件
ALTER TABLE Course ADD UNIQUE(Cname);
删除基本表:
3.11:删除Student表
DROP TABLE STU CASCADE;
报错的原因还是因为SQL不支持删除语句使用CASCADE/RESTRICT关键字
DROP TABLE STU;
发现和STU相关的文件全部删除掉了
3.12:若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可删除表,视图自动被删除
CREATE VIEW IS_Course /*Course表上建立视图*/
AS
SELECT Cno,Cname
FROM Course
WHERE Ccredit='IS';
个人感觉SQL语言刚开始记忆起来还是有些困难,需要查阅T-SQL来进行写代码。虽然已经实操了一遍,但感觉还是对这款软件的使用比较陌生,不是很熟练,有时间还是要多多练习