第5章 表的创建和管理_【例5-2】

题目要求

用SQL语句创建如表5-1到表5-3所示表结构的三张表:学生表( Student)、课程表( Course)和学生选课表(SC)。

列名说明数据类型约束
sno学号Char(10)NOT Null
sname姓名Char(10)NOT Null
ssex性别Char(2)取值为“男”或“女”,默认为“男”
sage年龄int取值为15~35
sdept所在系Char(20)
列名说明数据类型约束
cno课程号Char(10)主码
cname课程名Char(20)非空
ccredit学分tinyint>0
semster学期tinyint>=1并且<=8
period学时int>0
列名说明数据类型约束
sno学号Char(10)主码,引用student的外码
cno课程号Char(10)主码,引用course的外码
grade成绩tinyint取值0~100
/*

创建新数据库,并将新建数据库设为当前数据库
数据库默认生成位置为C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA

*/

create database 教学管理库

use 教学管理库
/*

创建student学生表

*/

create table student
(
	sno char(10) primary key,			--学生序号为主键
	sname varchar(10) not null,			--学生姓名不能为空
	ssex char(2) check(ssex in ('男','女')) default '男',	--默认值为“男”,只能从“男”“女”中选填
	sbirthday date check ((year(getdate())-year(sbirthday)) between 15 and 35),	--当前日期减去出生日期需要大于15岁且小于35岁
	sdept varchar(50)					--学生所在院系
)
/*

创建course课程表

*/

create table course
(
	cno char(10) primary key,							--课程编号为主键
	cname varchar(50) not null unique,					--唯一键,不为空
	ccredit tinyint check (ccredit >=0) default 2,		--学分取值必须大于0,且默认值为2
	semeter tinyint check (semeter between 1 and 8),	--学期取值在1~8之间
	period int check (period >0)						--学时必须大于0
)
/*

创建sc学生选课表

*/

create table sc
(
	sno char(10),
	cno char(10),
	grade tinyint check (grade between 0 and 100),
	primary key (sno,cno),		--主键是复合列,定义在表级约束上
	
	foreign key (sno) references student (sno)
		on update cascade		--级联更新
		on delete cascade,		--级联删除
	
	foreign key (cno) references course (cno)
		on update no action		--不执行任何操作
		on delete no action		--不执行任何操作
)
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值