一、创建数据库与打开数据库
学生选课数据库
学生(学号,姓名,性别,出生时间,所在系)
课程(课程编号,课程名,先修课程号)
选课(学号,课程编号,成绩)
创建数据库
CREATE DATABASE <数据库名>
create database XSXK;
1、创建数据库的实质功能是向操作系统申请存储数据库所需要的存储空间
2、创建数据库后会生成操作系统文件,每个数据库至少对应有2个文件
(1).MDF文件(数据文件)
包含数据和对象,例如表、存储过程等
(2).LDF文件(日志文件)
包含恢复数据库所有事务所需要的信息
(3)在创建数据库时,可自定义指定这两个文件的位置,如不指定,将会采用默认位置
3、DBMS中有多个数据库时,可采用SQL语句打开指定数据库
USE <数据库名>
use XSXK;
二、基本表的创建
1、使用SQL语言中的CREATE TABLE语句,指定了关系表的表名、属性列的列名和属性域(DBMS所支持的数据类型)
2、格式:
CREATE TABLE <表名>
(
<属性列名1><数据类型>【列级完整性约束条件】
【,<属性列名2><数据类型>【列级完整性约束条件】,...】
【,<表级完整性约束条件>】
)
使用完整性约束可定义主键和外键,实现关系的实体完整性、参照完整性和用户自定义完整性
3、注意:
(1)所定义的表至少有一个属性列
(2)定义表的属性列时需要指定其属性列的数据类型和 长度
4、SQL Server中的数据类型
注意:
CHAR(n)类型和VARCHAR(n)都表示字符串类型,但是前者的字符数目不够n时会默认会用空格补齐到n,而后者字符数目是多少字符串的长度就是多少
5、主键约束
PRIMARY KEY 【(<属性列(组)>)】
定义主键,保证了属性列值的唯一性和非空性
sNo varchar(3) primary key,
primary key(sNo,cNo) -- sNo和cNo都是主键、也是主属性
6、外键约束
FOREIGN KEY(<外键>)
REFERENCES <被参照表名> (<与外键对应的主键名>)
表中的外键参照了被参照表中的主键
foreign key(cNo)references c(cNo),
foreign key(sNo)references s(sNo)
(1)表中添加了外键约束,DBMS会保证关系的参照完整性,使得外键sNo和cNo只能取对应被参照表中元组的主键值
(2)为保证关系的参照完整性不被破环,DBMS会采用一些默认的处理策略
(3)用户也可以在定义外键时自定义处理策略
当对被参照表中的主键进行修改或对元组进行删除操作时,参照表是(CASCADE )否(NO ACTION )产生关联的修改和删除操作
ON UPDATE { CASCADE | NO ACTION }
ON DELETE { CASCADE | NO ACTION }
7、对属性列的取值进行约束(定义用户自定义完整性)
(1)NOT NULL 或 NULL 约束(允许属性值是否为空),对关系的主属性必须限定为NOT NULL,以满足实体完整性
(2)UNIQUE 约束(不允许属性列中出现重复的属性值),对关系中的候选键属性必须保证为非空且唯一,以保证实体完整性
(3)DEFAULT 约束(默认约束),将关系中属性列的值出现频率高的设置为默认值
(4)CHECK约束(检查约束),通过约束条件表达式设置属性列值应该满足的条件
8、基本表
(1)学生表
create table s(
sNo char(12) primary key,
sN varchar(3) not null,
sex char(1) default'男',
sB Date,
sD varchar(8),
check(sex in('男','女'))
);
(2)课程表
create table c(
cNo char(3) primary key,
cN varchar(8),
pC char(3),
foreign key(pC) references c(cNo)
);
(3)学生选课表
create table sC(
sNo char(12),
cNo char (3),
grade dec(3,1),
primary key(sNo,cNo), -- sNo和cNo都是主键、也是主属性
foreign key(cNo)references c(cNo),
foreign key(sNo)references s(sNo),
check(grade between 0 and 100)
);
注意:不能同时为多个属性列在列级约束位置上添加主键约束,即PRIMARY KEY,如果在一个表中由多个属性列同时作为该表的主键,则在表级约束的位置上同时为这多个属性列添加主键约束,使这多个属性列同时作为该表的主键
三、基本表的修改
1、增加列或表约束规则
格式:
ALTER TABLE <表名>
ADD <属性列名> <数据类型>【完整性约束】|<完整性约束>;
例1:在学生表S中加入属性列SH表示学生的籍贯
alter table s
add sH varchar(18)
例2:在学生表S中补充定义SNO为主键
alter table s
add primary key(sNo);
2、修改原有列的类型
格式:
ALTER TABLE <表名>
ALTER COLUMN <属性列名> <数据类型>;
例:将基本表S中的学生姓名SN长度修改为12
alter table s
alter column sN varchar(12);
四、基本表的删除
1、删除原来就有的列或约束规则
格式:
ALTER TABLE <表名>
DROP {【CONSTRAINT】 <完整性约束>|
COLUMN <列名>【CASCADE|RESTRICT】 };
注:
CASCADE:在没有视图或约束引用该属性列时,该属性列才能被删除
RESTRICT:表示在删除该属性列时,引用该属性列的视图和约束也会被自动删除
例1:删除基本表s中的sex属性列
alter table s
drop column sex;
2、删除基本表
格式:
DROP TABLE <表名>
【CASCADE | RESTRICT】
例1:删除基本表s
drop table s cascade;
五、总结
1、利用CREATE TABLE语句完成了创建表,定义主键和外键,对属性值进行约束三个任务
2、基本表的定义会存入DBMS的数据字典中,由DBMS根据数据字典中的信息自动检查用户操作是否符合完整性约束条件,从而实现关系的实体完整性、参照完整性和用户自定义完整性