主外键约束FK

FOREIGN KEY(FK)

CONSTRAINT fk_外键名 FOREIGN KEY(列名) REFERENCES 表2名(列名)--一般表2的主键

先删除
DROP TABLE MEMBER PURGE;

创建表-成员

CREATE TABLE MEMBER (mid NUMBER ,NAME VARCHAR2(20) NOT NULL,--创建主键约束CONSTRAINT PK_mid PRIMARY KEY(mid));

添加数据

INSERT INTO MEMBER(mid,NAME)VALUES(1,'张无忌');
INSERT INTO MEMBER(mid,NAME)VALUES(2,'张三丰');

创建另一张表建议表

CREATE TABLE advice(adid NUMBER,content CLOB NOT NULL,mid NUMBER,CONSTRAINT PK_adid PRIMARY KEY(adid)
);

为avvice添加数据

INSERT INTO advice(adid,content,mid)VALUES(1,'应该提倡内部沟通机制,设置总裁邮箱',1);
INSERT INTO advice(adid,content,mid)VALUES(2,'为了公司内部良性发展,所有部门领导应该重新上岗',1);
INSERT INTO advice(adid,content,mid)VALUES(3,'要多开展员工培训活动,让员工更加有归属感',1);
INSERT INTO advice(adid,content,mid)VALUES(4,'应该开展多元化业务,更加满足市场需求',2);
INSERT INTO advice(adid,content,mid)VALUES(5,'大力发展技术部门,为本公司设计自己的ERP系统,适应电子化信息发展要求',2);
COMMIT;
--查询advice表
SELECT * FROM advice;

查询出每位成员的完整信息和所提出的意见数量

SELECT m.mid,m.name,COUNT(a.mid)
FROM MEMBER m,advice a
WHERE m.mid=a.mid
GROUP BY m.mid,m.name;
可以看出可以正确统计,advice中的MID应该取值范围应该由成员表中的mid的内容现在并没有限制

在 advice中增加一条编号不在member中mid范围内的数据

INSERT INTO advice(adid,content,mid) VALUES(6,'岗位职责透明化',99);
--查询advice表
SELECT * FROM advice;
--可以添加成功

指定主-外键约束

--先删除

DROP TABLE MEMBER PURGE;DROP TABLE advice PURGE;

创建同样的表

创建表成员
CREATE TABLE MEMBER (mid NUMBER ,NAME VARCHAR2(20) NOT NULL,--创建主键约束CONSTRAINT PK_mid PRIMARY KEY(mid));
--创建另一张表建议表
CREATE TABLE advice(adid NUMBER,content CLOB NOT NULL,mid NUMBER,CONSTRAINT PK_adid PRIMARY KEY(adid),CONSTRAINT FK_mid FOREIGN KEY(mid) REFERENCES MEMBER(mid)
);--添加数据
INSERT INTO MEMBER(mid,NAME)VALUES(1,'刘楠');
INSERT INTO MEMBER(mid,NAME)VALUES(2,'董方卓');
--查询
SELECT * FROM MEMBER;
--为avvice添加数据
INSERT INTO advice(adid,content,mid)VALUES(1,'应该提倡内部沟通机制,设置总裁邮箱',1);
INSERT INTO advice(adid,content,mid)VALUES(2,'为了公司内部良性发展,所有部门领导应该重新上岗',1);
INSERT INTO advice(adid,content,mid)VALUES(3,'要多开展员工培训活动,让员工更加有归属感',1);
INSERT INTO advice(adid,content,mid)VALUES(4,'应该开展多元化业务,更加满足市场需求',2);
INSERT INTO advice(adid,content,mid)VALUES(5,'大力发展技术部门,为本公司设计自己的ERP系统,适应电子化信息发展要求',2);
COMMIT;
--查询advice表
SELECT * FROM advice;

此时再在 advice中增加一条编号不在member中mid范围内的数据

INSERT INTO advice(adid,content,mid) VALUES(6,'岗位职责透明化',99);

错误的信息就添加不进去了

删除父表时要先删除子表对应的数据

示例:删除member中编号为1的数据

DELETE FROM MEMBER WHERE mid=1;

会报错

不能删除

需要删除子表advice中mid=1的数据再删除父表member中mid=1的数据
DELETE FROM advice WHERE mid=1;
DELETE FROM MEMBER WHERE mid=1;

这时可以删除

也可以在创建表时设置级联

可以在创建表时设置级联删除
--在外键设置后面设置ON DELETE CASCADE

--先删除

DROP TABLE advice PURGE;DROP TABLE MEMBER PURGE;

创建表成员
CREATE TABLE MEMBER (mid NUMBER ,NAME VARCHAR2(20) NOT NULL,--创建主键约束CONSTRAINT PK_mid PRIMARY KEY(mid));
--创建另一张表建议表
CREATE TABLE advice(adid NUMBER,content CLOB NOT NULL,mid NUMBER,CONSTRAINT PK_adid PRIMARY KEY(adid),CONSTRAINT FK_mid FOREIGN KEY(mid) REFERENCES MEMBER(mid) ON DELETE CASCADE              --主外键约束添加级联删除
);

这样删除父表中的记录时,可以直接删除

但查询子表发现子表中的记录也被删除掉了

不想删除子表中的记录时可以用

在外键后加上ON DELETE SET NULL

--删除表
DROP TABLE advice;
DROP TABLE MEMBER;
--创建表
CREATE TABLE MEMBER(mid NUMBER,NAME VARCHAR2(30) NOT NULL,CONSTRAINT PK_mid PRIMARY KEY(mid)
);
CREATE TABLE advice(adid NUMBER,CONTENT CLOB NOT NULL,mid NUMBER,CONSTRAINT PK_adid PRIMARY KEY(adid),CONSTRAINT FK_mid FOREIGN KEY(mid)  REFERENCES MEMBER(mid) ON DELETE SET NULL                --设置删除时子表记录相关的列为NULL
);

这样删除父表中的记录时,可以直接删除

但查询子表发现子表中的记录没有删除掉,只是相关的字段为NULL

强制删除表

DROP FROM MEMBER WHERE mid=1 CASCADE CONSTRAINT;

父表会直接删除,子表内容仍然存在

查看约束

SELECT constraint_name,constraint_type,table_name FROM user_constraints;
--查看EMP表的约束
SELECT constraint_name,constraint_type,table_name
FROM user_constraints
WHERE table_name='EMP'

查看user_cons_columns数据字典
select * from user_cons_columns;

修改约束

增加约束语法

ALTER TABLE 表名称

ADD CONSTRAINT 约束名称 约束类型(约束字段)

删除表
DROP TABLE advice;
DROP TABLE MEMBER;
--创建表
CREATE TABLE MEMBER(mid NUMBER,NAME VARCHAR2(30) );
CREATE TABLE advice(adid NUMBER,CONTENT CLOB ,mid NUMBER
);--为member表的mid字段增加主键约束
ALTER TABLE MEMBER
ADD CONSTRAINT PK_mid PRIMARY KEY(mid);
--为member age字段增加检查约束
--先增加age字段
ALTER TABLE MEMBER
ADD(age NUMBER);
SELECT * FROM MEMBER;
ALTER TABLE MEMBER
ADD CONSTRAINT ck_age CHECK(age BETWEEN 0 AND 200);
--检查member表中的字段
SELECT constraint_name,constraint_type,table_name
FROM User_Constraints WHERE table_name='MEMBER';
--为name字段设置非空
ALTER TABLE MEMBER
MODIFY(NAME NOT NULL);

启用和禁用约束

启用和禁用约束

ALTER TABLE 表名称 ENABLE |DISABLE CONSTRAINT 约束名称 [CASCADE]

--cascade关闭存在完整性关系的约束(主要是外键)

--禁用advcie中的Pk-adid主键约束
ALTER TABLE advice DISABLE CONSTRAINT pk_adid;
--禁用memeber表中的pk_mid主键约束
ALTER TABLE MEMBER DISABLE CONSTRAINT pk_mid;
--启用约束
ALTER TABLE 表名称 ENABLE CONSTRAINT 约束名称
--启用memeber表中的pk_mid主键约束
ALTER TABLE MEMBER ENABLE CONSTRAINT pk_mid--删除约束
ALTER TABLE 表名称 DROP CONSTRAINT 约束名[CASCADE]
--删除advcie中的pk_adid约束-无关外键
ALTER TABLE advice DROP CONSTRAINT pk_adid;
--删除member中的pk_mid-有关外键
ALTER TABLE MEMBER DROP CONSTRAINT pk_mid CASCADE;

 

完整约束三(学习笔记)相关推荐

  1. HDLBits(十 三)学习笔记——Building Lager Circuits (1000计数器 —— FSM:One-hot logic equations独热码)

    文章目录 1.Counter with period 1000 2.4-bit shift register and down counter(移位寄存器) 3.fsmseq 序列1101识别器 4. ...

  2. Filter的细节三学习笔记

    当需要过滤include请求的资源时,可以设置dispatcher为INCLUDE过滤方式 d)当需要过滤error请求的资源时,可以设置dispatcher为ERROR过滤方式 注意:一定在要web ...

  3. Oracle体系结构三(学习笔记)

    转载于:https://www.cnblogs.com/liunanjava/p/4227332.html

  4. Spring beans配置方案(三) 学习笔记

    采用tomact的方式配置 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=&quo ...

  5. SVO 学习笔记(三)

    SVO 学习笔记(三) 这篇博客 Initialization Frame_Handler_Mono processFirstFrame processSecondFrame processFrame ...

  6. python嵩天课堂笔记_[Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周)

    [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) [Python机器学习]强化学习笔记(嵩天礼欣老师mooc第三周) 目录 强化学习 定义 马尔科夫决策过程 基本元素 值函数 最优值 ...

  7. 菜鸟Vue学习笔记(三)

    菜鸟Vue学习笔记(三) 本周使用了Vue来操作表单,接下来说下Vue中双向绑定表单元素的用法. Vue中双向绑定是使用的v-model,所谓的双向绑定即改变变量的值,表单元素的值也会改变,同样的,改 ...

  8. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  9. 多线程编程学习笔记——async和await(三)

    接上文 多线程编程学习笔记--async和await(一) 接上文 多线程编程学习笔记--async和await(二) 五.   处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...

  10. 判断题:oracle自带的sql语言环境是pl/sql,Oracle之PL/SQL学习笔记之数据类型(三)

    Oracle之PL/SQL学习笔记之数据类型(三) 所有的编程语言中变量是使用最频繁的.PL/SQL作为一个面向过程的数据库编程语言同样少不了变量,利用变量可以把PL/SQL块需要的参数传递进来,做到 ...

最新文章

  1. 史上最全的SpringMVC学习笔记
  2. 某大型国企技术平台建设
  3. 路由器qos设置包括哪些内容
  4. 创建第一个Django项目
  5. c++ pat 乙级 --1001 害死人不偿命的(3n+1)猜想
  6. Javascript实现最简跨平台面向对象拖拽
  7. php开启安全模式后影响的函数
  8. java 常量池是什么_Java常量池理解与总结
  9. java web基础视频教程_java web开发入门视频教程
  10. 麒麟下适配mellanox网卡驱动
  11. 第五次作业—— 四则运算“软件”开发
  12. HC-SRF04超声波测距传感器+Proteus仿真(附源码与仿真电路)
  13. 打开keil提示未安装xx器件包,实际上已经安装
  14. 【计算机视觉】全景相机标定(MATLAB/opencv)
  15. Python利用Face++实现身份证件图片识别
  16. JAVA SM2 数字证书生成
  17. java加载tensorflow训练的PB模型记录
  18. 你连基础的JVM运行时内存布局都忘了?Java面试题及解析
  19. Oculus检测到你的NVIDIA驱动问题,解决办法
  20. 浅谈物联网安全威胁与挑战

热门文章

  1. 2011清华MBA备考全记录
  2. MySQL和Python交互
  3. Django 入门项目案例开发(下)——创建项目应用及模型类
  4. Java 继承 执行顺序
  5. JS-用js的for循环实现九九乘法表以及其他算数题等
  6. MySQL流程控制函数
  7. sap 给集团分配一个逻辑系统
  8. 回车键兼容多个浏览器
  9. 解决maven找不到jdk的问题
  10. Android架构纵横谈之二—基于性能的考虑(1)