oracle数据库设置外键问题这两种方法 , 个人建议的方法,你选择了一个简单方便的方法
:触发的解决方案(下面的代码可以不,直接复制)
创建或替换触发delete_dept
删除前在DEPT
每一行
开始
删除从EMP
=
DEPT_NO:old.DEPT_NO;
删除从POS
DEPT_NO
=
old.DEPT_NO;
到底;
/
方法二:外键设置要达到的目的级联删除,具体实现如下:
a)首先查询EMP表POS国外键表名(如果你知道这一步中的外键的名称可省略)
选择和constraint_name,TABLE_NAME从USER_CONSTRAINTS其中CONSTRAINT_TYPE
='R'和TABLE_NAME('EMP','POS');
BR
p二)在桌子上,删除EMP表的和POS外键的重新确立,允许级联删除外键模式
ALTER
TABLE
EMP下降约束外键名称;
ALTER
TABLE
POS下降约束外键名称
ALTER
TABLE
EMP加约束外键名称外键引用DEPT(DEPT_NO)(DEPT_NO)ON
DELETE
CASCADE;
ALTER
TABLE
POS添加约束外键名称外键(DEPT_NO
)提述DEPT(DEPT_NO)的ON
DELETE
CASCADE;
---
多了,我希望你的帮助 。
oracle 给字段设置外键键怎么设置 纯命令式的添加外键 比如我知道 主键是这样的主键:ALTER TABLE A ADD CONSTRAINT PK_XXX PRIMARY KEY (XXX)
【oracle如何更新外键 oracle更新字段】外键;ALTER TABLE B ADD CONSTRAINT FK_YYY FOREIGN KEY(YYY) REFERENCES A(XXX)
B表的YYY字段 引用A表的XXX字段值域为自身值域
主键约束,外键约束就是这样建立的
删除约束: ALTER TABLE A DROP CONSTRAINT 约束名
oracle 创建表 时设置 级联删除和级联更新 的语句外键只能是参照表的主键,所以应该参照userid,要参照uname只能用触发器 。
create table users(userid primary key,uname unique)
go
create table board (bid primary key,bhost, foreign key(bhost) references users(userid) on delete CASCADE on update CASCADE)
在oracle中怎样用一条sql语句更新两张有主外键关系的表的记录你要更新什么字段?
主表的
主键?
还是
主表的数据与子表的
非主键/外键
数据,同时更新?
举个例子吧 。
小议Oracle外键约束修改行为(一) Oracleoracle如何更新外键的外键用来限制子表中参考oracle如何更新外键的字段oracle如何更新外键的值 必须在主表中存在 而且在主表的记录发生变化导致外键参考唯一约束值发生了变化时 定义了一系列的动作
在SQL 标准中定义了几种外键改变后 如何处理子表记录的动作 其中包括
限制Restrict这种方式不允许对被参考的记录的键值执行更新或删除的操作 置为空Set to null 当参考的数据被更新或者删除 那么所有参考它的外键值被置为空
置为默认值Set to default当参考的数据被更新或者删除 那么所有参考它的外键值被置为一个默认值
级联Cascade当参考的数据被更新 则参考它的值同样被更新 当参考的数据被删除 则参考它的子表记录也被删除
不做操作No action这种方式不允许更新或删除被参考的数据 和限制方式的区别在于 这种方式的检查发生在语句执行之后 Oracle默认才会的方式就是这种方式
Oracle明确支持的方式包括No action Set to null和Cascade 对于Set to Default和Restrict Oracle的约束类型并不直接支持 不过可以通过触发器来实现
简单看一下Oracle的默认处理方式No action
SQL CREATE TABLE T_P (ID NUMBER NAME VARCHAR ( ));
表已创建
SQL ALTER TABLE T_P ADD PRIMARY KEY (ID);
表已更改
SQL CREATE TABLE T_C (ID NUMBER FID NUMBER NAME VARCHAR ( ));
表已创建
SQL ALTER TABLE T_C ADD CONSTRAINT FK_T_C FOREIGN KEY (FID) REFERENCES T_P (ID);
表已更改
SQL INSERT INTO T_P VALUES ( A );
已创建 行
SQL INSERT INTO T_P VALUES ( B );
已创建 行
SQL INSERT INTO T_C VALUES ( A );
已创建 行
SQL MIT;
提交完成
对于No Action操作而言 如果主键的记录被外键所参考 那么主键记录是无法更新或删除的
SQL DELETE T_P WHERE ID = ;DELETE T_P WHERE ID = *第 行出现错误:ORA : 违反完整约束条件 (YANGTK FK_T_C) 已找到子记录日志
SQL UPDATE T_P SET ID = WHERE ID = ;UPDATE T_P SET ID = WHERE ID = *第 行出现错误:ORA : 违反完整约束条件 (YANGTK FK_T_C) 已找到子记录日志
SQL DELETE T_P WHERE ID = ;
已删除 行
不过No Action又和Restrict操作有所区别 No Action允许用户执行语句 在语句执行之后 或者事务结束的时候才会检查是否违反约束 而Restrict只有检测到有外键参考主表的记录 就不允许删除和更新的操作执行了
这也使得No Action操作支持延迟约束
SQL ALTER TABLE T_C DROP CONSTRAINT FK_T_C;
表已更改
SQL ALTER TABLE T_C ADD CONSTRAINT FK_T_C FOREIGN KEY (FID) REFERENCES T_P (ID) DEFERRABLE INITIALLY DEFERRED;
表已更改
SQL SELECT * FROM T_P;
ID NAME A
SQL SELECT * FROM T_C;
ID FID NAME A
SQL DELETE T_P WHERE ID = ;
已删除 行
SQL INSERT INTO T_P VALUES ( A );
已创建 行
SQL MIT;
提交完成
lishixinzhi/Article/program/Oracle/201311/17487
关于oracle如何更新外键和oracle更新字段的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- js保存字符串到文本文件,js保存函数
- erp管理系统适应多少人工厂,erp管理系统多少钱一套
- 岚少直播录像b站,岚少什么时候直播
- oracle如何安装磁盘 oracle安装教程12c
- linux常用命令ntp的简单介绍
- 开发游戏版本,游戏开发程序
- python数列中把所有数字1变成字符,python如何把数字转化为列表
- go语言后台统计 go语言操作数据库
- jar命令linux,jar命令打包