前言:
眼前咱们对“查询选课oracle”大概比较重视,兄弟们都需要分析一些“查询选课oracle”的相关文章。那么小编在网摘上搜集了一些关于“查询选课oracle””的相关内容,希望我们能喜欢,咱们快快来学习一下吧!/*
完整性约束:
1.约束: Constraint,是定义在表上的一种强制规则。
当为某个表定义约束后,对该表做的所有SQL操作都必须满足约束的规则要求,否则操作将失败。
如果是给已有的表添加约束,如果该表中已经有数据,那么要求已有的数据必须满足约束条件,该约束才能添加成功;
一般,约束是在建表的同时添加的;
2.常用约束;
A:not null--非空约束
语法:
只能定义在列级约束:列名 数据类型 [默认值] not null;
B:unique--唯一性约束,该字段中不能有重复的值
语法;
列级约束:列名 数据类型 constraint 约束名 unique;
表级约束:......, constraint 约束名 unique(被约束的字段列表);
C:primary key--主键约束,主键约束满足唯一性约束
语法:
列级约束:列名 数据类型 constraint 约束名 primary key;
表级约束:......, constraint 约束名 primary key(被约束的字段列表);
D:foreign key--外键约束
语法:
列级约束:列名 数据类型 constraint 约束名 references 被参照的表名(被参照的唯一键字段)
on 外键参照的操作类型;
表级约束:......, constraint 约束名 foreign key(外键字段名) references 被参照的表名(被参照的唯一键字段)
on 外键参照的操作类型;
(注意;foreign key定义在子表的列中,references引用列所在的列中,
on delete cascade:当父表中的行被删除时,子表中相依赖的行同时被删除;
on delete set null:当父表中的行被删除时,子表中相依赖的行被转换为空值;
当无以上的选项时,当附表中的行被删除时,如果父表中的行在子表中被引用,则提示不能被删除)
E:check--定义检查约束
语法;
列级约束:列名 数据类型 constraint 约束名 check(约束规则);
表级约束:......, constraint 约束名 check(约束规则);
(注意:表达式不允许使用:
伪列,例如: CURRVAL, NEXTVAL, LEVEL及 ROWNUM;
可以调用SYSDATE, UID, USER及 USERENV 函数;
对其它记录其它值的查询。)
3.概念
主键;在一个表中用于唯一标识一条记录的字段(字段组合)叫做主键(主键首先要满足唯一性约束)
唯一键(候选键):可以唯一标识数据记录的键,叫做唯一键
外键;一个表的唯一键(包括主键)在另外一个表中作为参照字段,这个唯一键字段在这个参照表中就叫做外键。
!注意;一个表中可以有多个唯一键,但是只能有一个主键(主键组合)
4.约束的命名
约束也是对象,需要像表一样进行命名;
除了not null约束外,建议给其他约束起名字,命名规则为:表名_列名_约束类型。
给约束进行命名,可以通过名字对约束进行维护。
5.约束的分类
根据约束定义的位置,可以分为列级约束和表级约束;
A:约束既可以写在每个对应列的后面,称之为列级约束,一个列级别约束只能作用在一个列上;
B:也可以写完所有列之后,在写约束,称之为表级约束,一个表级别约束既可以作用在一个列上,也可以作用在列的组合上。
not null约束只能定义在列级别上;
联合主键或联合唯一性约束只能定义在表级别上;
其他为约束既可以定义成表级别,也可以定义成列级别。
另外,表级别和列级别约束达到的作用完全相同,只是书写的位置不同;
语法;
列级约束:列名 数据类型 constraint 约束名 约束类型;
表级约束:......, constraint 约束名 约束类型(被约束的字段列表);
6. 追加约束
也可以用ALTER TABLE语句为表:
A:追加或删除约束,但不修改它的结构;
语法:
alter table 表名 add[constraint 约束名] 约束类型(被约束的字段列表);
例如:alter table 表名 add constraint 约束名 foreign key(被约束的字段列表)references 被参照的表名(被参照的唯一键字段)
alter table 表名 drop constraint 约束名 cascade; (DROP子句的CASCADE选项导致任何与其相依赖的约束也被删除)
B:启用或禁用约束;
约束禁用
如果有大批量数据导入时,我们可以采用禁用约束的方法,主要的好处,首先效率高,另外有主外键约束的表之间导入时,不用考虑导入的先后顺序。
禁用约束语法:
alter table 表名 disable constraint 约束名 [cascade];应用CASCADE选项禁用相依赖的外键约束
启用约束语法:
alter table 表名 enable constraint 约束名 [cascade];
C:用MODIFY子句添加一个NOT NULL约束;
语法:
alter table 表名 modify[constraint] 约束名 约束类型(被约束的字段列表);
例如:alter table 表名 modify(被约束的字段列表 [constraint] not null);
7.外键约束的三种级联操作
外键作为另一个表的主键,是两个表之间的参照关系;
在删除外键引用的主表|父表(作为外键的主键所在的表)记录时,引用这些键值的从表|子表中记录如何处理?
(1)不允许删除(默认)
如果从表中有对主表记录的引用,则不允许删除主表的记录
(2)级联删除(cascade)
从表的相关记录也进行删除
(3)将外键字段设置null值(set null)
从表中外键的值设置为null值
*/
create table dept30 as select * from dept;
select * from dept30;
drop table dept30;
---创建定义表时条件的约束
---列级约束
create table emp30(
empno number(4) not null constraint emp30_empno_pk primary key,---列级约束
ename varchar2(10)not null,
job varchar2(9),
mgr number(4) constraint emp30_mgr_unique unique,
hiredate date,
sal number(7,2) constraint emp30_sal_check check(sal>=2000),---追加一个约束?
comm number(7,2),
deptno number(2) not null constraint emp30_deptno_fk references dept30(deptno)
);
---表级约束
create table dept30(
deptno number(2) not null,
dname varchar2(14)not null,
loc varchar2(13)not null,
constraint emp30_deptno_pk primary key(deptno),
constraint emp30_dl_unique unique(dname,loc)
);
--追加表名为emp30的自定义检查性约束
alter table emp30 add constraint emp30_sal_check check(sal>=2000);
--删除约束
alter table emp30 drop constraint emp30_mgr_unique;
-------------------外键的级联删除
---(1)不允许删除(默认)
------如果从表中有对主表记录的引用,则不允许删除主表的记录
-----------------------准备数据-----------------------------
--创建员工表
create table emp40 as select *from emp;
--创建部门表
create table dept40 as select * from dept;
--为emp40添加主键
alter table emp40 add constraint emp40_empno_pk primary key(empno);
--为dept40表添加主键
alter table dept40 add constraint dept40_deptno_pk primary key(deptno);
--为emp40添加外键
alter table emp40 add constraint emp40_deptno_fk foreign key(deptno) references dept40(deptno);
---没有写on,默认级联类型
----删除deptno表中部门标号为30的记录(不允许删除)
delete from dept40 where deptno=30;
select * from emp40;
------------------------------------------------------------
---(2)级联删除(cascade)
------从表的相关记录也进行删除
-----------------------准备数据-----------------------------
--创建员工表
create table emp50 as select *from emp;
--创建部门表
create table dept50 as select * from dept;
--为emp50添加主键
alter table emp50 add constraint emp50_empno_pk primary key(empno);
--为dept50表添加主键
alter table dept50 add constraint dept50_deptno_pk primary key(deptno);
--为emp50添加外键
alter table emp50 add constraint emp50_deptno_fk foreign key(deptno) references dept50(deptno) on delete cascade;
---没有写on,默认级联类型
----删除deptno50表中部门标号为30的记录(deptno50表中部门标号为30的员工信息一块被删除)
delete from dept50 where deptno=30;
select * from emp50;
------------------------------------------------------------
---(3)将外键字段设置null值(set null)
------从表中外键的值设置为null值
-----------------------准备数据-----------------------------
--创建员工表
create table emp60 as select *from emp;
--创建部门表
create table dept60 as select * from dept;
--为dept60表添加主键
alter table dept60 add constraint dept60_deptno_pk primary key(deptno);
--分别为emp60添加主键和外键
alter table emp60 add constraint emp60_empno_pk primary key(empno);
alter table emp60 add constraint emp60_deptno_fk foreign key(deptno) references dept60(deptno) on delete set null;
---没有写on,默认级联类型
----删除deptno60表中部门标号为30的记录(deptno60表中部门标号为30的外键部门编号被设置为空)
delete from dept60 where deptno=30;
select * from emp60;
------------------------------------------------------------
---****************ppt14练习1**************---
--1.学校有一个选课系统,其中包括如下关系模式:
--系(系编号: 主键,
-- 系名称: 唯一键,
-- 系主任: 非空约束,
-- 系所在校去:取值范围只能在南湖校区和浑南校区)
--班级(班级编号: 主键,
-- 班级名称: 唯一键,
-- 所属系: 外键)
create table department(
dno number(4)not null constraint department_dno_pk primary key,
dname varchar2(10) constraint department_dname_unique unique,
dhead varchar2(10)not null,
dloc varchar2(14) constraint deparment_dloc_check check(dloc='南湖校区' or dloc='浑南校区')
);
create table myclass(
mno number(4)not null constraint myclass_mno_pk primary key,
mname varchar2(10) constraint myclass_mname_unique unique,
dno number(4)not null constraint myclass_dno_fk references department(dno)
);
--2.创建学生表,包含如下属性:
--学号 定长字符型 10位 主键
--姓名 变长字符型 20位 非空
--性别 定长字符型 2位 取值范围只能为男或女
--出生日期 日期型
--所在班级
create table student(
sno char(10) not null constraint student_sno_pk primary key,
sname varchar(20)not null,
ssex char(2) constraint student_ssex_check check(ssex='男' or ssex='女'),
sbirthday date,
mno number(4)not null,
constraint student_mno_fk foreign key(mno) references myclass(mno)
);
---****************ppt14课后作业**************---
--1.简述5种约束的含义。
--2.创建学生关系sc,包括属性名:
--选课流水号 数值型 主键;
--学生编号 非空 外键
--课程编号 非空 外键;
--成绩 0-100之间;
create table sc(
scno number not null constraint sc_scno_pk primary key,
sno char(10) not null,
cno char(10) not null,
scgrade number(4)not null,
constraint sc_sno_fk foreign key(sno) references student(sno),
constraint sc_cno_fk foreign key(cno) references course(cno)
);
--3.创建copy_emp,要求格式同emp表完全一样,不包含数据。
create table copy_emp as select * from emp;
delete from copy_emp;
--4.创建copy_dept,要求格式同dept表完全一样,不包含数据。
create table copy_dept as select * from dept;
delete from copy_dept;
--5.设置copy_emp 表中外键deptno,参照copy_dept中deptno,语句能否成功,为什么?
alter table copy_emp add constraint copy_emp_deptno_fk foreign key (deptno)references copy_dept(deptno);
不能成功,因为deptno不是copy_dept的主键。
--6.追加copy_dept表中主键deptno
alter table copy_dept add constraint copy_dept_deptno_pk primary key(deptno);
select * from copy_emp;
select * from copy_dept;
标签: #查询选课oracle