介绍:学校管理数据库
Student:学生表
列名
|
类型
|
特征
|
备注
|
sno
|
Char(10)
|
主键
|
学号
|
…
|
|
|
|
Class:班级表
列名
|
类型
|
特征
|
备注
|
clsno
|
Char(10)
|
主键
|
班级编号
|
…
|
|
|
|
teacher:教师表
列名
|
类型
|
特征
|
备注
|
tno
|
Char(10)
|
主键
|
教师编号
|
…
|
|
|
|
course:课程表
列名
|
类型
|
特征
|
备注
|
cno
|
Char(10)
|
主键
|
课程编号
|
…
|
|
|
|
Score:成绩表
列名
|
类型
|
特征
|
备注
|
Id
|
|
|
编号
|
sno
|
|
外键
|
学号
|
Cno
|
|
外键
|
课程号
|
score
|
|
|
成绩
|
Mk_score
|
|
|
补考成绩
|
Tcc:授课表
列名
|
类型
|
特征
|
备注
|
Id
|
int
|
主键
|
编号
|
date
|
|
|
时间
|
tno
|
|
外键
|
教师编号
|
clsno
|
|
外键
|
班级编号
|
cno
|
|
外键
|
课程编号
|
value
|
|
|
评价
|
列名n 类型 约束
--教师表
if exists(select name from sysobjects
where name='teacher' and type='u')
drop table teacher
--teacher表
create table teacher
(
tno char(10) primary key ,--教师编号
tname varchar(20) not null, --教师姓名
title varchar(20), --职位
birthdate datetime ,--出生日期
hirdate datetime ,--受聘日期
quitdate datetime,--离职时间
uptno char(10) ,--上级领导
gender char(2),---性别
photo image,--照片
notes ntext --备注
)
--班级表
if exists(select name from sysobjects
where name='class' and type='u')
drop table class
--class 表格
create table class
(
clsno char(10) primary key,--班级编号
clsname char(20) ,--班级名称
credate datetime,--创建日期
leavedate datetime,--毕业时间
teacher char(10),--班主任
clstype varchar(20),--班级类型
notes text, --备注
numbers int --班级人数
)
--学生表
if exists(select name from sysobjects
where name='student' and type='u')
drop table student
--student表
create table student
(
sno char(10) primary key ,--学号
sname varchar(20) not null,--姓名
idcard char(18) ,--身份证
gender char(2) ,--性别
birthdate datetime ,--出生日期
homeaddress varchar(100),--出生地
phone varchar(20),--联系电话
email varchar(50),--电子邮箱
qq varchar(10) ,--qq号码
hoby varchar(20),--爱好
classid char(10) --班级
)
--课程表
if exists(select name from sysobjects
where name='course' and type='u')
drop table course
--course表
create table course
(
cno char(10) primary key,--课程编号
cname varchar(50) ,--课程名称
c1_times int ,--理论课时
c2_times int ,--实践课时
ctype char(10),--学历课还是技能课
nots text --备份
)
--学生成绩表
if exists(select name from sysobjects
where name='score' and type='u')
drop table score
create table score
(
id int IDENTITY(1,1) NOT NULL,--编号
sno char(10) ,--学号
cno char(10),--课程编号
score decimal(5, 2) ,--成绩
mk_score decimal (5, 2)—补考成绩
)
--教师授课表
if exists(select name from sysobjects
where name='tcc' and type='u')
drop table tcc
create table tcc (
id nchar (10) ,--编号
date datetime ,--授课日期
tno char (10) ,--教师编号
clsno char (10) ,--班级编号
cno char (10) ,--课程编号
evalue varchar (50) --评价
)
--用户表
CREATE TABLE users--用户表
(
id int IDENTITY(1,1) NOT NULL,--用户编号
username varchar(50) ,--用户名
password int NULL--密码
)
创建带有计算列的表格
(1) SSMS中完成
(2) 代码完成
CREATE TABLE orders1 (
ord_id int NULL,
goodsname varchar (50) ,
price money NULL,
num int NULL,
total AS ( price * num ) PERSISTED
)
创建自增列的表格
(1) SSMS中完成
(2) 代码完成
ord_id int identity(1,2) not null,
price money NULL,
num int NULL,
total AS ( price * num ) PERSISTED
)
创建临时表
临时表的前面以#或者##开头
(1) SSMS中完成
(2) 代码完成
create table ##test
(a int ,
b int
)
对于约束的内容查看课本相关章节,后续会介绍。
表创建之后,用户可以根据需要使用ALTER TABLE语句来修改表的结构。
语法:
ALTER TABLE 表名
ADD字段名 数据类型[(长度)][ null| not null] [ default ‘ 默认值’ ] [identity]
注意:
(1)新增加字段时可以同时设置空值约束、默认值约束和标识列。
(2)表中的列名必须唯一
(3)若不允许为空时则必须给新增加的列指定默认值,否则语句执行错误。
ALTER TABLE 只允许添加满足下述条件的列: 列可以包含空值;或者列具有指定的DEFAULT 定义;或者要添加的列是标识列或时间戳列;或者,如果前几个条件均未满足,则表必须为空以允许添加此列。不能将列"f"添加到非空表"test"中,因为它不满足上述条件。
例题1:创建测试表test,包含一个整形列a
--创建表test
create table test
(a int)
--(1)为表test添加新列b,类型为整形,可以为空
alter table test
--(2)为表test添加新列c,类型varchar(20),不允许空
alter table test
add c varchar(20) not null
给表中插入一行数据后再执行此操作:
insert into test values
(1,2,'aaa');
alter table test
add d varchar(20) not null
消息4901,级别16,状态1,第1 行
出现错误,思考为什么?如何改正?
alter table test
add d varchar(20) not null default 'hehe'
--(3)为表test添加2列e和f,都是varchar(20)类型,允许空
alter table test
add e varchar(20),f varchar(20)
--(4)添加计算列,g=c+d+e。此处+的含义是字符串连接。
alter table test
add g as c+d+e
--(4)添加标识列
alter table test
add h int identity(1001,1)
看下面代码
alter table test
add i int identity(1001,1) default 3
消息1754,级别16,状态0,第1 行
不能在具有IDENTITY 属性的列上创建默认值。表'test',列'i'。
消息1750,级别16,状态0,第1 行
无法创建约束。请参阅前面的错误消息。
为什么?
语法:
alter table <表名>
drop column 字段名 [ , …n ]
如果要删除的列上建有约束,需要先删除约束
删除约束的方法:
(1)通过sp_helpconstraint 表名找到要删除约束的名字
(2)alter table 表名 drop 约束名
--(1)删除列
alter table test
--(2)删除多列
alter table test
drop column d,e
--(3)删除带有约束列
alter table test
drop column d
消息5074,级别16,状态1,第1 行
对象'DF__test__d__239E4DCF' 依赖于列'd'。
消息4922,级别16,状态9,第1 行
由于一个或多个对象访问此列,ALTER TABLE DROP COLUMN d 失败
--先删除d上的默认约束,找到约束名
sp_helpconstraint test
注意:约束名随机生成,不同机器名称不同。
--删除约束
alter table test
drop DF__test__d__239E4DCF
--删除列
alter table test
使用alter column子句可修改字段的数据类型、长度、是否允许为空值等属性。
语法:
ALTER TABLE 表名
alter column 字段名 数据类型[(长度)][null|not null]
--(1)将class表中班级名称的长度改为20
alter table class
--(2)将教师姓名长度改为,并且非空
alter table teacher
alter column tname varchar(20) not null
注意:
(1)如果表中没有数据,对表中列的数据类型的更改是任意的。如果表中包含数据,更改后的类型必须同原类型兼容。
(2)将一个原来允许为空值的列改为不允许为空时,必须保证表中已有记录中该列没有空值。
(3)改变数据类型时,如果原来设置了默认值约束,一般应解除或删除约束后再修改
--(3)将student中简历改名为简介
语法:
sp_rename '表名.原列名','新列名'
sp_rename 'student.简历','简介'
--查看表格基本信息
sp_help 表名
sp_help student
--查看表格占用空间信息
sp_spaceused 表名
sp_spaceused class
--查看表格依赖关系
sp_depends 表名
或者
drop table test
drop table tb
(1)在sales数据库中通过SSMS创建表departments.(部门表)
列名
|
类型
|
是否为空
|
说明
|
备注
|
dno
|
Char(6)
|
no
|
主键
|
编号
|
dname
|
Varchar(20)
|
no
|
|
部门名称
|
dnum
|
int
|
yes
|
|
人数
|
locate
|
Varchar(20)
|
yes
|
|
地址
|
(2)在sales数据库中通过SSMS创建表employees.(职工)
列名
|
类型
|
是否为空
|
说明
|
备注
|
Eno
|
Char(6)
|
no
|
主键
|
编号
|
ename
|
varChar(8)
|
no
|
|
姓名
|
Sex
|
Char(2)
|
no
|
|
性别
|
Id
|
Char(18)
|
yes
|
|
身份证
|
deptno
|
Char(4)
|
yes
|
外键
|
部门号
|
Up_eno
|
Char(6)
|
yes
|
外键
|
上级领
导编号
|
Tel
|
Varchar(15)
|
yes
|
|
电话
|
Addr
|
Varchar(50)
|
yes
|
|
地址
|
(3)在sales中使用命令创建表goods(商品)表。
列名
|
类型
|
是否为空
|
说明
|
备注
|
Gno
|
Char(10)
|
no
|
主键
|
商品编号
|
gname
|
Varchar(20)
|
no
|
|
商品名称
|
Type
|
Varchar(20)
|
yes
|
|
规格型号
|
Unite
|
Char(4)
|
yes
|
|
单位
|
avg_price
|
money
|
yes
|
|
平均价格
|
Tolal_num
|
int
|
yes
|
|
总库存
|
Note
|
Varchar(200)
|
yes
|
|
备注
|
(4)在sales中使用命令创建表customer(客户)表。
列名
|
类型
|
是否为空
|
说明
|
备注
|
Cno
|
Char(10)
|
no
|
主键
|
编号
|
cname
|
Varchar(20)
|
no
|
|
名称
|
person
|
Varchar(20)
|
yes
|
|
联系人
|
Tel
|
Char(20)
|
yes
|
|
联系电话
|
Addr
|
Varchar(30)
|
yes
|
|
地址
|
(5)在sales中创建instock (进货)表。
列名
|
类型
|
是否为空
|
说明
|
备注
|
inno
|
int
|
no
|
主键,自动增加
|
编号
|
indate
|
datetime
|
no
|
|
进货日期
|
gno
|
Char(10)
|
no
|
外键
|
商品编号
|
price
|
money
|
yes
|
|
进价
|
Num
|
int
|
yes
|
|
数量
|
T_price
|
money
|
yes
|
计算列
|
总金额
|
eno
|
Char(6)
|
yes
|
外键
|
进货人
|
cno
|
Char(10)
|
yes
|
外键
|
客户
|
(6)在sales中创建outstock (销售)表。
列名
|
类型
|
是否为空
|
说明
|
备注
|
outno
|
int
|
no
|
主键,自动增加
|
编号
|
outdate
|
datetime
|
no
|
|
销售日期
|
gno
|
Char(10)
|
no
|
外键
|
商品编号
|
price
|
money
|
yes
|
|
售价
|
Num
|
int
|
yes
|
|
数量
|
T_price
|
money
|
yes
|
计算列
|
总金额
|
eno
|
Char(6)
|
yes
|
外键
|
销售人
|
cno
|
Char(10)
|
yes
|
外键
|
客户
|