在oracle数据库中怎样创建主外键关系

在oracle数据库中怎样创建主外键关系,第1张

主外键需要依托多表来创建,方法如下:

创建主表:

CREATE TABLE SCOTT.DEPT 

(DEPTNO NUMBER(2,0) PARIMARY KEY, 

DNAME VARCHAR2(14), 

LOC VARCHAR2(13))

创建副表及外键:

CREATE TABLE EMP 

(EMPNO NUMBER(4,0) PRIMARY KEY, 

ENAME VARCHAR2(10), 

JOB VARCHAR2(9), 

MGR NUMBER(4,0), 

HIREDATE DATE, 

SAL NUMBER(7,2), 

COMM NUMBER(7,2), 

DEPTNO NUMBER(2,0),

CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES DEPT (DEPTNO))

例如下面这两个表中分别存的时员工的基本信息和公司的部门信息。我们为

create table dept

(deptno number(10) not null,

deptname varchar2(30) not null,

constraint pk_dept primary key(deptno))

create table emp

( empno number(10) not null,

fname varchar2(20) ,

lname varchar2(20) ,

dept number(10) ,

constraint pk_emp primary key(empno))

然后我们现在增加外键试一下on delete cascade

alter table emp

add constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete cascade

先增加外键。然后插入数据

insert into dept values(1,’销售部’)

insert into dept values(2,’财务部’)

insert into emp values (2,’Mary’,'Song’,1)

insert into emp values (3,’Linda’,'Liu’,2)

insert into emp values (4,’Linlin’,'Zhang’,1)

然后现在我要删除销售部,会有什么后果呢?

delete from dept where deptno = 1

我们发现除了dept中的一条数据被删除了,emp中两条数据也被删除了,其中emp中的两条数据是参照了销售部的这条数据的,这就很容易理解on delete cascade了。

例如下面这两个表中分别存的时员工的基本信息和公司的部门信息。我们为\x0d\x0acreate table dept\x0d\x0a(deptno number(10) not null,\x0d\x0adeptname varchar2(30) not null,\x0d\x0aconstraint pk_dept primary key(deptno))\x0d\x0a和\x0d\x0acreate table emp\x0d\x0a( empno number(10) not null,\x0d\x0afname varchar2(20) ,\x0d\x0alname varchar2(20) ,\x0d\x0adept number(10) ,\x0d\x0aconstraint pk_emp primary key(empno))\x0d\x0a\x0d\x0a然后我们现在增加外键试一下on delete cascade\x0d\x0a\x0d\x0aalter table emp\x0d\x0aadd constraint fk_emp_dept foreign key(dept) references dept(deptno) on delete cascade\x0d\x0a先增加外键。然后插入数据。\x0d\x0ainsert into dept values(1,’销售部’)\x0d\x0ainsert into dept values(2,’财务部’)\x0d\x0ainsert into emp values (2,’Mary’,'Song’,1)\x0d\x0ainsert into emp values (3,’Linda’,'Liu’,2)\x0d\x0ainsert into emp values (4,’Linlin’,'Zhang’,1)\x0d\x0a然后现在我要删除销售部,会有什么后果呢?\x0d\x0adelete from dept where deptno = 1\x0d\x0a我们发现除了dept中的一条数据被删除了,emp中两条数据也被删除了,其中emp中的两条数据是参照了销售部的这条数据的,这就很容易理解on delete cascade了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11956503.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存