You are on page 1of 5

foreign key:

in all databases if you want to establish a relation


ship between tables then we are using integrity
constraint foreign key

one table foreign key must belongs to another


table primary key and also these two columns
must belongs to same datatype
always foreign key values depends on primary
key values only

generally primary key doesnot accepts nulls and


duplicates where as foreign key accepts both
nulls and dupliacets

column level:
create table tablename(col datatype(size)
references mastertablename(primary key colname));

insertion:

SQL> create table mas(sno number(10) primary key);

Table created.

SQL> create table child(sno number(10) references mas);

Table created.

SQL> insert into mas values(10);

1 row created.

SQL> insert into mas values(20);

1 row created.

SQL> insert into child values(20);

1 row created.

SQL> insert into child values(40);


insert into child values(40)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.SYS_C0012039) violated - parent key not
found

SQL> insert into mas values(40);

1 row created.

SQL> insert into child values(40);

1 row created.

SQL> select * from mas;


SNO
----------
10
20
40

SQL> select * from child;

SNO
----------
20
40

deletion in master table:

SQL> select * from mas;

SNO
----------
10
20
40

SQL> select * from child;

SNO
----------
20
40

SQL> delete from mas


2 where sno=40;
delete from mas
*
ERROR at line 1:
ORA-02292: integrity constraint (SCOTT.SYS_C0012039) violated - child record found

SQL> delete from child


2 where sno=40;

1 row deleted.

SQL> delete from mas


2 where sno=40;

1 row deleted.

note:
whenever we are trying to delete master record
then oracle server returns an error,to overcome
this need to records from child table then only
we are able to delete master records

on deletecascade:
this clause is used along with foreign key
after using this we are easily deleting records
from master table
syntax:
create table tebalename(col datatype(size) references
mastertablename(primary key col) on delete cascade,..);

SQL> create table mas(sno number(10) primary key);

Table created.

SQL> create table child(sno number(10) references mas on delete cascade);

Table created.

SQL> insert into mas values(10);

1 row created.

SQL> insert into mas values(20);

1 row created.

SQL> insert into child values(20);

1 row created.

SQL> insert into child values(10);

1 row created.

SQL> select * from mas;

SNO
----------
10
20

SQL> select * from child;

SNO
----------
20
10

SQL> delete from mas


2 where sno=10;

1 row deleted.

SQL> select * from mas;

SNO
----------
20

SQL> select * from child;

SNO
----------
20
on delete set null:
oracle also supports on delete set null along with
foreign key,after deletion records automatically
null will replaces

syntax:

create table tebalename(col datatype(size) references


mastertablename(primary key col) on delete set null,..)

SQL> create table mas(sno number(10) primary key);

Table created.

SQL> create table child(sno number(10) references mas on delete set null);

Table created.

SQL> insert into mas values(10);

1 row created.

SQL> insert into mas values(20);

1 row created.

SQL> insert into mas values(40);

1 row created.

SQL> select * from mas;

SNO
----------
10
20
40

SQL> insert into child values(10);

1 row created.

SQL> insert into child values(20);

1 row created.

SQL> insert into child values(40);

1 row created.

SQL> select * from child;

SNO
----------
10
20
40

SQL> delete from mas


2 where sno=20;

1 row deleted.

SQL> select * from mas;

SNO
----------
10
40

SQL> select * from child;

SNO
----------
10

40

You might also like