在开始之前先总结一下SQL语句
SQL动词:
SQL功能 | 动词 |
---|---|
数据查询 | SELECT |
数据定义 | CREATE,DROP,ALTER |
数据操纵 | INSERT,UPDATE,DELETE |
数据控制 | GRANT , REVOKE |
数据定义:
定义模式格式:
删除模式格式:
基本表定义格式:
修改基本表格式:
ADD用于增加新列、新的列级/表级完整型约束条件
DROP COLUMN用于删除表中列
DROP CONSTRAINT用于删除指定的完整型约束条件
ALTER COLUMN用于修改原有的列定义,包括列名和数据类型
删除基本表格式:
**
接下来是对上述语句的练习
**
【例3.1】为用户WANG定义一个学生-课程模式S-T
定义之前需要先检查数据库中有没有用户WANG,如果没有,请创建。
创建过程详见:数据库使用SQL语句新建数据库及新建用户WANG
创建完成后,输入以下语句,【执行】
CREATE SCHEMA "S-T" AUTHORIZATION WANG
结果显示为
注意: 在【执行】之前,可以点击 【√】检查有无拼写错误,并且要确定可用数据库 已经选择了正确位置。
【例3.2】CREATE SCHEMA AUTHORIZATION WANG
该语句没有指定<模式名>,所以<模式名>隐含为用户WANG
CREATE SCHEMA AUTHORIZATION WANG
【例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),
);
注意: 要想在自己的命名空间下建表,要么在创建模式TEST的同时创建表TAB1,要么在表名中明显的给出模式名TEST.TAB1,要么设置所属的格式(DBMS中先设置模式,再建表),不然就会成为默认条件dbo.TAB1。
SQL server 中,默认用户为 dbo,在没有创建模式的情况下,默认的模式名为dbo,所以表名为dbo.TAB2。如
CREATE TABLE TAB2(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2),
);
【例3.4】DROP SCHEMA WANG CASCADE
1)美好的理想:CASCADE 关键字在删模式的同时会将原数据库对象全部删除,一劳永逸。
DROP SCHEMA WANG CASCADE
然而:
残酷的现实是:SQL Server 不支持 在DROP SCHEMA时使用CASCADE
只剩一个办法——一个一个删
DROP TABLE TEST.TAB1
DROP TABLE dbo.TAB2
DROP SCHEMA TEST;
【例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),
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) ,
/* 主码由两个属性构成,必须作为表级完整性进行定义*/
FOREIGN KEY (Sno) REFERENCES Student(Sno),
/* 表级完整性约束条件,Sno是外码,被参照表是Student */
FOREIGN KEY (Cno) REFERENCES Course(Cno)
/* 表级完整性约束条件, Cno是外码,被参照表是Course*/
);
【例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)
【例3.11】删除Student表
DROP TABLE Student CASCADE;
上面已经说过了,SQL Server 不支持CASCADE,所以上述代码不行。
没办法,再次一个一个删,这里注意,由于SC表中有外码,参照表Student,所以需要先将SC表删除,再删除Student表。
DROP TABLE SC /*后面没有逗号,分号等任何东西*/
DROP TABLE Student
【例3.12】若表上建有视图,使用RESTRICT时表不能删除;使用CASCADE时可以删除表,视图也自动删除。
创建基于Student的视图IS_Student:
CREATE VIEW IS_Student
AS
SELECT SNO,SNAME,SAGE
FROM Student
WHERE SDEPT='IS';
删除:
DROP TABLE Student RESTRICT;
由于该表下有视图,RESTRICT不能使用,会报错。
再次按顺序删
DROP VIEW IS_Student
DROP TABLE Student ;
这是本人的血泪教训:
做实验一定要看好顺序,虽然3.12在3.11后面,但后面的实验还要用Student 表,别着急删!!! 写过的代码也别随便删。找个地方存下,总有用的着的一天。😭不说了,伤心。