第十四章约束课堂笔记和练习

– 约束:not null、unique、primary key、foreign key、check

  • not null(非空约束)
    – 1.只能定义列级别的约束
    – 2.值不可以为空(不允许null 与 ”)

    --  定义没有约束名称的not null
    --  1.创建emp备份表,且约束雇员姓名与部门编号不能为空
        create table emp_copy (
               empno number(4),
               ename varchar2(10) not null,
               job   varchar2(9),
               mgr   number(4),
               hiredate date,
               sal   number(7,2),
               comm  number(7,2),
               deptno number(2) not null
        );
    
    
    --  定义有约束名称的not null
    --  1.创建emp备份表,且约束雇员姓名与部门编号不能为空
        create table emp_copy (
               empno number(4),
               ename varchar2(10) constraint emp_ename_null not null,
               job   varchar2(9),
               mgr   number(4),
               hiredate date,
               sal   number(7,2),
               comm  number(7,2),
               deptno number(2) constraint emp_deptno_null not null
        );
    --  测试约束     
    insert into emp_copy values(1,'张三','程序猿',9999,sysdate,5000,500,10); --ok
    insert into emp_copy(empno,ename) values(2,'李四');-- not ok 无法将null值存入
    insert into emp_copy(empno,ename,deptno) values(2,'李四',20); --ok
    insert into emp_copy(empno,ename,deptno) values(2,'李四',null);--not ok
    insert into emp_copy(empno,ename,deptno) values(2,'李四','');  --not ok
    insert into emp_copy(empno,ename,deptno) values(2,'李四',0); --ok
    insert into emp_copy(empno,ename,deptno) values(2,0,10);     --ok
    insert into emp_copy(empno,ename,deptno) values(2,'  ',10);  --ok
    insert into emp_copy(empno,ename,deptno) values(2,'',10);    --not ok
    
  • unique(唯一约束)
    – 1、可以定义列级别,也可以定义表级别约束
    – 2、值必须唯一,可以为null
    – 3、默认给当前约束列添加索引
    – 4、可以同时给一列或多列定义组合约束
    – 5、每一个表可以同时定义多个unique唯一约束

    --定义没有名字unique约束
    1.创建emp备份表,且约束雇员姓名唯一(列级别),雇员编号唯一(表级别)
    create table emp_copy(
          empno number(4),
          ename varchar2(10) unique,--列级别约束 ,系统命名SYS_C0010859
          job varchar2(9),
          mgr number(4),
          hiredate date,
          sal number(7,2),
          comm number(7,2),
          deptno number(2),
          unique(empno)--表级别约束,系统命名SYS_C0010860
    );
    
    --  定义有名字的unique约束
    --  1.创建emp备份表,且约束雇员姓名唯一(列级别),雇员编号唯一(表级别)
        create table emp_copy (
               empno number(4),
               ename varchar2(10) constraint emp_ename_unique unique,
               job   varchar2(9),
               mgr   number(4),
               hiredate date,
               sal   number(7,2),
               comm  number(7,2),
               deptno number(2),
               constraint emp_deptno_unique unique(deptno)
        );
    
        --  测试用例
        insert into emp_copy(empno,ename) values(3,null);--ok
        insert into emp_copy(empno,ename) values(3,null);
        --违反唯一约束scott.emp_ename_unique
        insert into emp_copy(empno,ename) values(4,'tom');--ok
    
    
    --  定义组合unique约束
    --  1.创建emp备份表,且约束雇员姓名与雇员编号组合唯一(表级别)
    create table emp_copy(
          empno number(4),
          ename varchar2(10),
          job varchar2(9),
          mgr number(4),
          hiredate date,
          sal number(7,2),
          comm number(7,2),
          deptno number(2),
          constraint emp_no_name_unique unique(empno,ename)--表级别约束
    );
    
  • primary key(主键约束)
    – 1、可以定义列级别,也可以定义表级别约束
    – 2、值必须唯一,可以为null
    – 3、默认给当前约束列添加索引
    – 4、可以同时给一列或多列定义组合约束
    – 5、每个表只能允许存在一个主键

    --  列级别定义
        create table emp_copy (
               empno number(4),
               ename varchar2(10) constraint emp_ename_pk primary key,
               job   varchar2(9),
               mgr   number(4),
               hiredate date,
               sal   number(7,2),
               comm  number(7,2),
               deptno number(2)
        );
    
    --  表级别定义
       create table emp_copy (
               empno number(4),
               ename varchar2(10),
               job   varchar2(9),
               mgr   number(4),
               hiredate date,
               sal   number(7,2),
               comm  number(7,2),
               deptno number(2),
               constraint emp_ename_pk primary key(empno,ename)
        ); 
    
  • foreign key(外键约束)
    – 1、可以定义列级别,也可以定义表级别约束
    – 2、取值范围必须为对应表的对应列中的值,可以为null
    – 3、每个表可以存在多个外键
    – 4、外键关联列只能是唯一键或主键列
    – 主键表主键值被外键表参照时,主键表记录不允许被删除

    --  列级别约束
        create table emp_copy (
               empno number(4),
               ename varchar2(10),
               job   varchar2(9),
               mgr   number(4),
               hiredate date,
               sal   number(7,2),
               comm  number(7,2),
               deptno number(2) constraint emp_ename_fk references dept(deptno)
        ); 
    
    
    --  表级别定义
        create table emp_copy (
               empno number(4),
               ename varchar2(10),
               job   varchar2(9),
               mgr   number(4),
               hiredate date,
               sal   number(7,2),
               comm  number(7,2),
               deptno number(2),
               constraint emp_ename_fk foreign key(deptno) references dept(deptno)
        );
    
    --  级联删除
        create table emp_copy (
               empno number(4),
               ename varchar2(10),
               job   varchar2(9),
               mgr   number(4),
               hiredate date,
               sal   number(7,2),
               comm  number(7,2),
               deptno number(2),
               constraint emp_ename_fk foreign key(deptno) 
                                       references dept(deptno) on delete set null
        );
    
  • check(检查约束) :
    – 1.能定义列级别,也能定义为表级别约束
    – 2.取值范围必须为约束条件约定的范围
    – 3.每一个表可以存在多个check约束
    – > >= = < <=运算符

    create table emp_copy(
          empno number(4),
          ename varchar2(10),
          job varchar2(9),
          mgr number(4),
          hiredate date,
          sal number(7,2), --constraint emp_sal_check check(sal >=1600),--列级别约束
          comm number(7,2),
          deptno number(2),
          constraint emp_sal_check check(sal >=1600)
    );
    insert into emp_copy(empno,ename,sal) values(1,'tom',1600);--ok
    insert into emp_copy(empno,ename,sal) values(1,'tom',1599);
    --not ok 违反约束条件scott.emp_sal_check
    
    --in()运算符
    create table emp_copy(
          empno number(4),
          ename varchar2(10),
          job varchar2(9),
          mgr number(4),
          hiredate date,
          sal number(7,2),
          comm number(7,2),
          deptno number(2),
          constraint emp_job_check check(job in('程序媛','程序猿','挨踢人'))
    );
    insert into emp_copy(empno,ename,job) values(1,'tom',null);--ok
    insert into emp_copy(empno,ename,job) values(1,'tom','SALES');
    --not ok 违反检查约束条件scott.emp_job_check
    insert into emp_copy(empno,ename,job) values(1,'tom','程序猿');--ok
    
    --between..and..运算符
    create table emp_copy(
          empno number(4),
          ename varchar2(10),
          job varchar2(9),
          mgr number(4),
          hiredate date,
          sal number(7,2),
          comm number(7,2),
          deptno number(2),
          constraint emp_sal_check check(sal between 1600 and 99999)
    );
    insert into emp_copy(empno,ename,sal) values(1,'tom',null);--ok
    insert into emp_copy(empno,ename,sal) values(1,'tom',99999);--ok
    insert into emp_copy(empno,ename,sal) values(1,'tom',1500);--not ok
    
    --综合定义emp表
    create table emp_copy(
          empno number(4) constraint emp_empno_pk primary key,  --primary key主键约束
          ename varchar2(10) constraint emp_ename_unique unique,    --unique唯一约束
          job   varchar2(9) constraint emp_job_nn not null,      --not null 非空约束
          mgr   number(4),
          hiredate date,
          sal   number(7,2) constraint emp_sal_check check(sal>0), --check检查性约束
          comm  number(7,2),
          deptno number(2) constraint emp_deptno_fk references dept(deptno)  
          --foreign key外键约束
    );  
    
  • 追加约束

        create table emp_copy(
          empno number(4),
          ename varchar2(10),
          job varchar2(9),
          mgr number(4),
          hiredate date,
          sal number(7,2),
          comm number(7,2),
          deptno number(2)
          );
    
        alter table emp_copy add constraint emp_empno_pk primary key(empno);
        --追加到表emp_copy,empno主键约束
    
        alter table emp_copy add constraint emp_empno_unique unique(ename);
        --追加到表emp_copy,ename唯一约束
    
        alter table emp_copy add constraint emp_empno_ck check(sal>0);--
    
        --not null非空约束
        alter table emp_copy modify(job constraint emp_job_nn not null);
    
  • 删除约束

        alter table emp_copy drop primary key;  --删主键
        alter table emp_copy drop constraint emp_empno_pk; --删主键
    
        alter table emp_copy drop unique(ename);--删唯一键
        alter table emp_copy drop constraint emp_ename_unique;--删唯一键
    
        alter table emp_copy drop constraint emp_sal_check;--删检查性约束
        alter table emp_copy drop constraint emp_deptno_fk;--删除外键
    
        --alter table emp_copy modify(job);--not ok设置为可以为null
        alter table emp_copy drop constraint emp_job_nn; --允许为null
    
  • 禁用约束

        alter table emp_copy disable constraint emp_empno_pk;--禁用主键
        alter table emp_copy disable constraint emp_ename_unique;--禁用唯一键
        alter table emp_copy disable constraint emp_sal_check;--禁用检查性约束
        alter table emp_copy disable constraint emp_deptno_fk;--禁用外键
        alter table emp_copy disable constraint emp_job_nn;--禁用非空约束
    
  • 启用约束

        alter table emp_copy enable constraint emp_empno_pk;--启用主键
        alter table emp_copy enable constraint emp_ename_unique;--启用唯一键
        alter table emp_copy enable constraint emp_sal_check;--启用检查性约束
        alter table emp_copy enable constraint emp_deptno_fk;--启用外键
        alter table emp_copy enable constraint emp_job_nn;--启用非空约束
    
  • 查看约束的数据字典表

    select * from user_constraints;--查看当前用户所有的约束
    select * from user_cons_columns where constraint_name ='EMP_DEPTNO_FK';
    -- 查看约束及对应的列名
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Oracle第八课堂笔记中,我们学习了集合运算的概念和用法。集合运算是一种对数据库中的数据进行操作和查询的技术,它可以将多个查询的结果进行合并、交叉和排除等操作。 首先,我们学习了并集运算(UNION)。并集运算可以将两个或多个查询的结果合并为一个结果集,它会去除重复的行,并按照查询语句的顺序进行排序。我们需要注意的是,并集运算中要求两个查询的列数和类型必须匹配。 接着,我们学习了交集运算(INTERSECT)。交集运算可以将两个查询的结果中的共同部分提取出来,生成一个新的结果集。交集运算同样要求两个查询的列数和类型必须匹配,而且结果集中不会出现重复的行。 然后,我们学习了差集运算(MINUS)。差集运算可以从一个查询的结果中排除另一个查询的结果,生成一个新的结果集。差集运算同样要求两个查询的列数和类型必须匹配,并且结果集中不会出现重复的行。 最后,我们练习了使用这些集合运算符来解决实际问题。通过编写SQL查询语句,我们可以根据给定的条件和要求,使用并集、交集和差集等运算符来获取我们需要的结果。 总之,Oracle第八的集合运算课堂笔记练习让我们了解了集合运算的概念和用法,以及如何使用这些运算符来操作和查询数据库中的数据。这些知识对我们在实际应用中更高效地处理和分析数据具有重要意义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值