racle使用外键来限制子表中参考的字段值,要求子表中的数据必须在主表中存在。当主表的记录发生变化时导致外键参考唯一约束值发生了变化时,Oracle指定了三种动作:默认值(类似于restrict)、delete cascade和delete set null。(
1.创建父表并初始化数据
SQL> create table t_parent (parent_id int primary key, name varchar2(10)); Table created. SQL> insert into t_parent values (1,'record1'); 1 row created. SQL> insert into t_parent values (2,'record2'); 1 row created. SQL> insert into t_parent values (3,'record3'); 1 row created. SQL> commit; Commit complete.
2.创建三种类型的子表t_child1、t_child2和t_child3
(1)no action类别
SQL> create table t_child1 (child1_id int primary key, parent_id int); Table created. SQL> alter table t_child1 add constraint FK_t_child1 foreign key (parent_id) references t_parent (parent_id); Table altered. SQL> insert into t_child1 values (1,1); 1 row created. SQL> commit; Commit complete.
(2)cascade类型
SQL> create table t_child2 (child2_id int primary key, parent_id int); Table created. SQL> alter table t_child2 add constraint FK_t_child2 foreign key (parent_id) references t_parent (parent_id) on delete cascade; Table altered. SQL> insert into t_child2 values (2,2); 1 row created. SQL> commit; Commit complete.
(3)SET NULL类型
SQL> create table t_child3 (child2_id int primary key, parent_id int); Table created. SQL> alter table t_child3 add constraint FK_t_child3 foreign key (parent_id) references t_parent (parent_id) on delete set null; Table altered. SQL> insert into t_child3 values (3,3); 1 row created. SQL> commit; Commit complete.
3.确认主表和子表中的数据
SQL> select * from T_PARENT; PARENT_ID NAME ---------- ---------- 1 record1 2 record2 3 record3 SQL> select * from T_CHILD1; CHILD1_ID PARENT_ID ---------- ---------- 1 1 SQL> select * from T_CHILD2; CHILD2_ID PARENT_ID ---------- ---------- 2 2 SQL> select * from T_CHILD3; CHILD2_ID PARENT_ID ---------- ---------- 3 3
4.尝试对具有默认类型外键参照的主表记录进行删除
SQL> delete from T_PARENT where parent_id = 1; delete from T_PARENT where parent_id = 1 * ERROR at line 1: ORA-02292: integrity constraint (HBHE.FK_T_CHILD1) violated - child record found SQL> select * from T_CHILD1; CHILD1_ID PARENT_ID ---------- ---------- 1 1
在此类型下,不允许删除操作
5.尝试对具有delete cascade类型外键参照的主表记录进行删除
SQL> delete from T_PARENT where parent_id = 2; 1 row deleted. SQL> select * from T_CHILD2; no rows selected
级联删除成功
6.尝试对具有delete set null类型外键参照的主表记录进行删除
SQL> delete from T_PARENT where parent_id = 3; 1 row deleted. SQL> select * from T_CHILD3; CHILD2_ID PARENT_ID ---------- ---------- 3
主表记录可以完成删除,子表中对应的内容被设置为NULL。
本文向大家介绍数据库操作的相关类有哪些?相关面试题,主要包含被问及数据库操作的相关类有哪些?时的应答技巧和注意事项,需要的朋友参考一下 特定类:Connection,Command,CommandBuilder,DataAdapter,DataReader,Parameter,Transaction 共享类:DataSet,DataTable,DataRow,DataColumn,DataReal
本文向大家介绍JavaScript操作Oracle数据库示例,包括了JavaScript操作Oracle数据库示例的使用技巧和注意事项,需要的朋友参考一下 我还是IT界的一只小菜鸟,参加工作时间不长,不过凭着自己的一颗好学的心还有自己永不停止的学习脚步,自己在编程方面也是收获颇丰~~ 一直以为JavaScript想和数据库交互必须通过AJAX来调用服务器端代码(C#或JAVA)才行,但最近才发现J
指定字符集建库 mysql> create database app default charset utf8; # 指定字符集建库 Query OK, 1 row affected (0.00 sec) mysql> show create database app\G #查看建库语句以及库的字符集 *************************** 1. row *************
本文向大家介绍Java中的数据库操作,包括了Java中的数据库操作的使用技巧和注意事项,需要的朋友参考一下 本文提供了有关如何创建简单JDBC应用程序的示例。这将向您展示如何打开数据库连接,执行SQL查询以及显示结果。 创建JDBC应用程序 构建JDBC应用程序涉及以下六个步骤- 导入软件包:要求您包含包含数据库编程所需的JDBC类的软件包。通常,使用import java.sql。*就足够了。
问题内容: 如果我使用ID nr:s代替VARCHARS作为外键会更好吗?最好使用VARCHARS的ID nr:s istead作为主键吗?ID nr是指INT! 这就是我现在所拥有的: 我可能已经想到了: 还是我在这里认为完全错误? 问题答案: VARCHAR用于任何KEY的问题在于它们可以保留WHITE SPACE。空格由任何无法在屏幕上读取的字符组成,例如空格标签,回车符等。当您开始追查为什
创建表 查看表结构 查看表详细结构 修改表名 修改字段的数据类型 修改字段名 增加字段 删除字段 删除关联表 (1)删除表的外键约束 (2)删除没有被关联的普通表 (3)删除被其他表关联的父表 创建表: CREATE TABLE 表名 (属性名 数据类型 [完整性约束条件], 属性名 数据类型 [完整性约束条件], 属性名 数据类型 [完整性约束条件]) “完整性约束条件”是指指定某些字段的某些特