先来介绍一下SQL的动词(数据库基本操作有:增、删、改、查)
大小写均可以,统一即可!!
新建数据库SCHOOL:
CREATE DATABASE SCHOOL
(需要注意的是:第三部刷新的时候需要用鼠标选中“ 数据库 ”,不然可能会刷新不出来)
【例 3.1】为用户 WANG 定义一个学生-课程模式 S-T
(1) 首先要新建用户 WANG
安全性—>右击用户—>新建用户—>用户名为WANG—>登录 名选择第一个
(2)定义一个学生-课程模式 S-T
敲重点:一定要将第三步的库由默认情况切换到【SCHOOL】中,不然找不到用户WANG ,会报错!!!
【例 3.2】CREATE SCHEMA AUTHORIZATION WANG
该句话没有指定 <模式名>,所以<模式名>隐含为用户名WANG
模式名相当于命名空间,如果没有规定,默认模式名为dbo
【例 3.3】为用户WANG创建了一个模式TEST,并且在其中定义一个表TAB1
注意注意:👇第四步刷新的时候,也要将鼠标放在表的位置
【例 3.4】DROP SCHEMA ZHANG CASCADE
该语句删除了模式ZHANG,同时,该模式中已经定义的表TAB1也被删除
删除模式中有两种:级联 和 限制
级联:删除模式的同时把该模式中的所有数据对象全部删除(类似与古代的株连九族,删除的比较干净,但删除完了啥都没了所以要慎重!!!)
限制:如果该模式下有下属的数据库对象,例如表、视图等,则拒绝删除,仅当模式下没有任何下属的对象时,才能执行(删除速度比较慢,但是会给人缓冲的时间,避免一不小心全部都没了)
【例 3.5】建立一个“学生”表Student
建表的基本要求:见名知意(这也是对程序员的基本要求)
建立的表默认情况下是在dbo模式下
注意:需要在数据库的当前模式下进行
【例 3.6】建立一个“课程”表Course
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表增加“入学时间”列,其数据类型为日期型
不管基本表原来是否已有数据,新增加的列一律为空值
其中 :ALERT 是增加的关键字,Student 是表名,S_entrance 是列名 DATA是数据类型
【例 3.9】将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数
注意注意:不必说明需要改的数据的原来类型
其中:ALERT 是关键字,Student是表名,COLUMN是列的关键字,Sage是列名。
【例 3.10】增加课程名称必须取唯一值的约束条件。
【例 3.11】删除Student表
基本表定义被删除,数据被删除
表上建立的索引、视图、触发器等一般也将被删除
这里报错啦!!!因为SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字,去掉cascade
这样就成功删除啦!!!表里面什么东西都没了
【例 3.12】若表上建有视图,使用RESTRICT时表不能删除;使用CASCADE时可以删除表,视图也自动删除。
我这里使用的是Course表
先在Course表上建立视图
检查视图是否还在
新建表之后,视图可以看到了
需要注意的问题:1. SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字
2. 刷新时鼠标一定要选好位置,不然可能刷新不出来
疑惑:Student表虽然已经删除,但是不知道为什么下面这里还是有dbo.Student
还有就是,是不是SQL语句加不加分号都可以哎,我实验过程中加不加都能执行