SQL SERVER 中的数据定义语言
数据定义
操作对象 | 创建 | 删除 | 修改 |
---|---|---|---|
模式 | CREATE SCHEMA | DROP SCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
视图 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
一、建立数据库
CREATE DATABASE STUDENT;--建立名为‘STUDENT’的数据库
二、新建用户
打开安全性→右击用户→新建→用户名→登录名(选择第一个)→确定
三、模式的定义与删除
1、定义
①仅建立模式
CREATE SCHEMA "S-T" AUTHORIZATION WANG; --创建模式
②建立模式的同时,定义TABLE/VIEW等
不指明架构,则为系统默认架构
CREATE SCHEMA "S-T" AUTHORIZATION WANG --创建模式
CREATE TABLE TAB1(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
); --创建模式同时创建
指明特定架构
CREATE TABLE "S-T".TAB2(COL6 SMALLINT,
COL7 INT,
COL8 CHAR(20),
COL9 NUMERIC(10,3),
COL10 DECIMAL(5,2)
); --指明特定架构S-T
注意:
(1)建立模式时,需选定当前数据库
(2)与SQL语句不同,T-SQL中若没有指定<模式名>,并不会隐含为用户名WANG,而是建立SQL SERVER的默认dbo架构
2、删除
DROP SCHEMA "S-T" RESTRICT;--或CASCADE
RESTRICT:限制删除
CASCADE:级联删除
四、基本表的定义、删除与修改
1、定义
建立Student、Course、SC表
注意:如果完整性约束条件涉及该表的多个属性列,则必须定义在表记上,佛则既可以定义在列级也可以定义在表级。
CREATE TABLE Student --定义表
(Sno CHAR(9) PRIMARY KEY, --设置主码
Sname CHAR(20) UNIQUE, --属性值唯一
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
CREATE TABLE Course --定义表
(Cno CHAR(4) PRIMARY KEY, --设置主码
Cname CHAR(40) NOT NULL, --属性值非空
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY(Cpno) REFERENCES Course(Cno) --表级完整性约束,Cpno是外码,被参照表是Course,被参照列是Cno
);
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)--表级完整性约束
);
表与模式
方法一:在表名中明显地给出模式名
CREATE TABLE "S-T".Student --定义表
(Sno CHAR(9) PRIMARY KEY, --设置主码
Sname CHAR(20) UNIQUE, --属性值唯一
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
CREATE TABLE "S-T".Course --定义表
(Cno CHAR(4) PRIMARY KEY, --设置主码
Cname CHAR(40) NOT NULL, --属性值非空
Cpno CHAR(4),
Ccredit SMALLINT,
FOREIGN KEY(Cpno) REFERENCES Course(Cno) --表级完整性约束,Cpno是外码,被参照表是Course,被参照列是Cno
);
CREATE TABLE "S-T".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)
);
方法二:在创建模式的语句中同时创建表
CREATE SCHEMA 'S-T' AUTHORIZATION WANG
CREATE TABLE TAB3(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
); --创建模式同时创建
方法三:设置所属模式,这样在创建表时表名不必给出模式名
2、删除
DROP TABLE TAB3 RESTRICT;--删除TAB3表
RESTRICT:限制删除
CASCADE:级联删除
3、修改
ALTER TABLE <表名>
[ADD [COLUMN]<新列名><数据类型>[完整性约束]]
[ADD<表级完整性约束条件>]
[DROP [COLUMN] <列名>[CASCADE|RESTRICT]]
[DROP CONSTRAINT <完整性约束条件>[CASCADE|RESTRICT]]
[ALTER COLUMN <列名><数据类型>]
具体例子
ALTER TABLE "S-T".Student ADD S_entraAnce DATE;--增加新的属性列
ALTER TABLE "S-T".Student ALTER COLUMN Sage INT;--改变数据类型
ALTER TABLE "S-T".Course ADD UNIQUE(Cname);--增加表级完整性约束条件
五、索引的建立与删除
1、建立
UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录
CLUSTER:表示要建立的索引是聚簇索引
ASC:按升序排列(默认状态)
DESC:按降序排列
CREATE UNIQUE INDEX Stusno ON Student(Sno);--在Student的Sno属性列建立索引,默认升序
CREATE UNIQUE INDEX Coucno ON Course(Cno);--在Course的Cno属性列建立索引,默认升序
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);--在SC的Sno、Cno属性列建立索引,先按照Sno升序排列,再按照Cno降序排列
CREATE UNIQUE INDEX Stuname ON Student(Sno);
2、删除
注意:SQL SERVER中删除索引一定要同时指明表和搜因
DROP INDEX Student.Stuname;
**注意:给INDEX重命名时,T-SQL与SQL标准语言不同:
**
EXEC SP_rename 'SC.SCno', 'SCSno';--ALTER INDEX SCno RENAME TO SCSno;
OVER!!!