第14章:约束

------------------------练习1-------------------------------------------------------------------------
1.学校有一个选课系统,其中包括如下关系模式:
系(系编号: 主键,
系名称: 唯一键,
系主任: 非空约束,
系所在校去:取值范围只能在南湖校区和浑南校区)

create table faculty
(
falty_id number(5) primary key,
falty_name nvarchar2(30) unique,
falty_head nvarchar2(30) not null,
falty_loc nvarchar2(30) check(falty_loc=‘南湖校区’ and falty_loc=‘浑南校区’)
)

班级(班级编号: 主键,
班级名称: 唯一键,
所属系: 外键)
create table class1
(
cla_id number(5) primary key,
cla_name nvarchar2(25)unique,
cla_falty_id number(5) constraint fk_class1_falty_id REFERENCES faculty (falty_id ) -----FOREIGN KEY: 定义在子表的列中;REFERENCES: 引用列所在的父表

)

2.创建学生表,包含如下属性:
学号 定长字符型 10位 主键
姓名 变长字符型 20位 非空
性别 定长字符型 2位 取值范围只能为男或女
出生日期 日期型
所在班级

create table student1
(
stu_id char(10) primary key,
stu_name nvarchar2(20)not null,
stu_sex nchar(2) check(stu_sex =‘男’ and stu_sex =‘女’),
stu_birthday date,
stu_class number(5) constraint fk_student1_cla_id REFERENCES class1 (cla_id )

-------------------课后作业---------------------------------------------------------------------------------

1.简述5种约束的含义。
–1.约束: Constraint,是定义在表上的一种强制规则。
–当为某个表定义约束后,对该表做的所有SQL操作都必须满足约束的规则要求,否则操作将失败。
–2.约束命名规则
–约束也是数据库对象,必须按照命名规则命名,如果你不命名约束,Oracle服务器将用SYS_Cn格式产生一个名字,这里n是一个唯一的整数。

–除了NOT NULL约束外,建议给其它约束起名字,命名规则为:表名_列名_约束类型。
–3.约束操作
定义约束:约束通常在创建表的同时被创建;

追加约束:在表被创建后,如果有需求也可以临时添加约束;

启用及禁用约束:约束可以被临时禁用和启用。

–4.约束类型
–1.not null
–2.primary key
–3.foreign key
–4.unique
–5.check
------5.约束禁用
如果有大批量数据导入时,我们可以采用禁用约束的方法,主要的好处,首先效率高,另外有主外键约束的表之间导入时,
不用考虑导入的先后顺序。

2.创建学生关系sc,包括属性名:
选课流水号 数值型 主键;
学生编号 非空 外键
课程编号 非空 外键;
成绩 0-100之间;
create table stu
(
stu_id number(5)primary key,
stu_ename nvarchar2(50)not null
);
create table course1
(
cour_id number(5)primary key,
cour_ename nvarchar2(50)not null
);

create table sc
(
col_id number(5) primary key,
col_stu_id number(5)not null ,
col_course_id number(5)not null constraint sc_col_course_id_fk references course1(cour_id),
grade int check(grade>0 and grade<100),
constraint sc_col_stu_id_fk foreign key(col_stu_id) references stu(stu_id)
);

3.创建copy_emp1,要求格式同emp表完全一样,不包含数据。
create table copy_emp1 as
select *from emp where 1=0;-----设置与emp一样的结构,没有数据

select *from copy_emp1;

4.创建copy_dept1,要求格式同dept表完全一样,不包含数据。
create table copy_dept1 as
select *from dept where 1=0;

select *from copy_dept1;
5.设置copy_emp1 表中外键deptno,参照copy_dept中deptno,语句能否成功,为什么?
alter table copy_emp1 add constraint copy_emp1_deptno_fk foreign key(deptno) references copy_dept1(deptno);
—不能追加成功。因为引用的主表还没有设置主键,所以引用失败
6.追加copy_dept1表中主键deptno
–除了NOT NULL约束外,建议给其它约束起名字,命名规则为:表名_列名_约束类型。
alter table copy_dept1 add constraint copy_dept1_deptno_pk primary key(deptno);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值