Constraints in Oracle
Constraints in Oracle
- REFERENCIAL INTEGRITY
- DOMAIN INTEGRITY
ENTITY INTEGRITY:
- IT ENSURE THAT EACH ROW UNIQULY IDENTIFY IN A TABLE.TO
IMPLEMENT THIS MECHANISM WE USE PRIMARY KEY OR UNIQUE CONSTRAINT.
REFERENCIAL INTEGRITY:
- IT ENSURE THAT TO CREATE RELATIONSHIP BETWEEN TABLES.TO
IMPLEMENT THIS MECHANISM THEN WE USE FOREIGN KEY (REFERENCIAL
KEY).
DOMAIN INTEGRITY:
CONSTRAINTS:
- CONTSRAINTS ARE USED TO RESTRICTED UNWANTED(INVALID) DATA
INTO TABLE.ALL DATABASES ARE SUPPORTING THE FOLLOWING CONSTRAINT
TYPES ARE
- UNIQUE
- NOT NULL
- CHECK
- PRIMARY KEY
- FOREIGN KEY (REFERENCES KEY)
- DEFAULT
- ALL DATABASES ARE SUPPORTING THE FOLLOWING TWO TYPES OF METHODS
TO DEFINE CONSTRAINTS.THOSE ARE
I) COLUMN LEVEL:
- IN THIS METHOD WE ARE DEFINING CONSTRAINTS ON INDIVIDUAL
COLUMNS.
SYNTAX:
CREATE TABLE <TN> (<COLUMN NAME1><DATATYPE>[SIZE] <CONSTRAINT
TYPE>, ......);
SYNTAX:
CREATE TABLE <TN> (<COLUMN NAME1><DATATYPE>[SIZE], <COLUMN
NAME2><DATATYPE>[SIZE], ......................................, <CONSTRAINT TYPE>
(<COLUMN NAME1>, <COLUMN NAME2>, .................));
UNIQUE:
- TO RESTRICTED DUPLICATE VALUES BUT ACCEPTING NULLS INTO A
COLUMN.
I) COLUMN LEVEL:
EX:
TESTING:
SQL> INSERT INTO TEST1 VALUES(1,'A');---ALLOWED
COLUMN LEVEL:
EX:
SQL> CREATE TABLE TEST3(STID INT NOT NULL, SNAME VARCHAR2(10) NOT
NULL);
TESTING:
CHECK:
- TO CHECK VALUES WITH USER DEFINED CONDITION BEFORE ACCEPTING
VALUES INTO A COLUMN.
I) COLUMN LEVEL:
EX:
TESTING:
EX:
TESTING:
PRIMARY KEY:
============
- TO RESTRICTED DUPLICATES & NULLS INTO A COLUMN.
- A TABLE SHOULD HAVE ONLY "ONE PRIMARY KEY".
I) COLUMN LEVEL:
EX:
PRIMARY KEY);
ERROR AT LINE 1:
SOL:
TESTING:
BASIC THINGS:
1. WE HAVE A COMMON COLUMN NAME(OPTIONAL) BUT RECOMMENDED.
3. ONE TABLE FOREIGN KEY MUST BELONGS TO ANOTHER TABLE PRIMARY KEY.
AND HERE PRIMARY KEY & FOREIGN KEY COLUMN MUST BE COMMON
COLUMN.
4. PRIMARY KEY TABLE IS CALLED AS "PARENT TABLE" AND FOREIGN KEY
TABLE IS CALLED AS "CHID TABLE"(I.E PARENT & CHILD RELATIONSHIP).
VALUES ONLY.
6. GENERALLY PRIMARY KEY IS NOT ALLOWED DUPLICATE AND NULL VALUES
WHERE AS FOREIGN KEY IS ALLOWED DUPLICATE & NULL VALUES.
I) COLUMN LEVEL:
SYNTAX:
<COMMON COLUMN NAME OF CHILD> <DT>[SIZE] REFERENCES
STEP1:
STEP2:
STEP3:
STEP4:
1) INSERTION RULE:
- WE CANNOT INSERT VALUES INTO FOREIGN KEY(REFERENCES KEY)
COLUMN THOSE VALUES ARE NOT EXISTING UNDER PRIMARY KEY COLUMN OF
PARENT TABLE.
EX:
SQL> INSERT INTO EMP1 VALUES (1026,'SCOTT',30);
ERROR AT LINE 1:
ORA-02291: INTEGRITY CONSTRAINT (SCOTT.SYS_C005468) VIOLATED -
PARENT KEY NOT FOUND.
2) DELETION RULE:
AN ERROR IS,
EX:
NOTE:
IF WE WANT TO DELETE A RECORD FROM PARENT TABLE WHEN THEY HAVE
CORRESPONDING CHILD RECORDS IN CHILD TABLE THEN WE PROVIDE SOME
SET OF RULES TO PERFORM DELETE OPERATIONS ON PARENT TABLE.THOSE
RULES ARE CALLED AS "CASCADE RULES".
I) ON DELETE CASCADE
II) ON DELETE SET NULL
I) ON DELETE CASCADE:
- WHENEVER WE ARE DELETING A RECORD FROM PARENT TABLE THEN
THAT ASSOCIATED CHILD RECORDS ARE DELETED FROM CHILD TABLE
AUTOMATICALLY.
EX:
STEP1:
STEP2:
SQL> INSERT INTO DEPT2 VALUES (10,'ORACLE');
STEP3:
SQL> CREATE TABLE EMP2(EID INT PRIMARY KEY, ENAME VARCHAR2(10),
STEP4:
TESTING:
SQL> DELETE FROM DEPT2 WHERE DEPTNO=20; ----ALLOWED
EX:
STEP1:
SQL> CREATE TABLE DEPT3(DEPTNO INT PRIMARY KEY,DNAME
VARCHAR2(10));
STEP2:
STEP3:
SQL> CREATE TABLE EMP3(EID INT PRIMARY KEY, ENAME VARCHAR2(10),
DEPTNO INT REFERENCES DEPT3(DEPTNO) ON DELETE SET NULL);
STEP4:
SQL>INSERT INTO EMP3 VALUES (1021,'SAI',10);
TESTING:
SQL> DELETE FROM DEPT3 WHERE DEPTNO=10; ----ALLOWED
EX:
SQL> CREATE TABLE TEST8(SNO INT PRIMARY KEY, NAME VARCHAR2(10));
TESTING:
SQL> INSERT INTO TEST8 VALUES(1,'A');---ALLOWED
SQL> INSERT INTO TEST8 VALUES(1,'B');---NOT ALLOWED
ERROR:
ORA-00001: UNIQUE CONSTRAINT (SCOTT.SYS_C005475) VIOLATED
USER DEFINE CONSTRAINT NAME:
EX:
SQL> CREATE TABLE TEST10(SNO INT CONSTRAINT PK_SNO PRIMARY KEY,
NAME VARCHAR2(10) CONSTRAINT UQ_NAME UNIQUE);
TESTING:
ERROR AT LINE 1:
ORA-00001: UNIQUE CONSTRAINT (SCOTT.PK_SNO) VIOLATED
SYNTAX:
SQL> SELECT * FROM DICT;
NOTE1:
IF WE WANT TO VIEW ALL CONSTRAINTS INFROMATION OF A
PARTICULAR TABLE THEN WE USE "USER_CONSTRAINTS" DATA DICTIONARY.
EX:
SQL> DESC USER_CONSTRAINTS;
SQL> SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM
USER_CONSTRAINTS WHERE TABLE_NAME='TEST10';
CONSTRAINT_NAME CONSTRAINT_TYPE
---------------------------------- -------------------------------
PK_SNO P
UQ_NAME U
NOTE2:
CONSTRAINT_NAME COLUMN_NAME
---------------------------------- ----------------------------
UQ_NAME NAME
PK_SNO SNO
NOTE3:
TO VIEW A LOGICAL CONDITION OF CHECK CONSTRAINT THEN WE NEED
TO CALL "SEARCH_CONDITION" COLUMN FROM "USER_CONSTRAINTS" DATA
DICTIONARY.
EX:
WHERE TABLE_NAME='TEST11';
SEARCH_CONDITION
SAL>5000
NOTE4:
TO VIEW ALL COLUMNS INFORMATION OF A PARTICULAR TABLE THEN
WE USE "USER_TAB_COLUMNS" DATADICTIONARY.
EX:
WHERE TABLE_NAME='EMP';
COUNT (*)
14
COUNT (*)
=======
ALTER TABLE <TN> ADD CONSTRAINT <CONSTRAINT KEY NAME>
<CONSTRAINT TYPE> (<COLUMN NAME>);
EX:
NOT NULL;
EX:
SQL> ALTER TABLE TEST12 MODIFY ENAME CONSTRAINT NN_ENAME NOT
NULL;
SYNTAX:
EX:
SQL> CREATE TABLE TEST13(DNAME VARCHAR2(10), EID INT);
TABLE CREATED.
EX:
SQL> ALTER TABLE TEST13 ADD CONSTRAINT FK_EID FOREIGN KEY(EID)
METHOD2:
- WHEN WE DROP PRIMARY KEY ALONG WITH FOREIGN KEY CONSTRAINT
FROM PARENT AND CHILD TBALES THEN WE USE "CASCADE" STATEMENT.
EX:
EX:
CONSTRAINT_NAME
------------------------------
SYS_C005489
SQL> ALTER TABLE TEST14 RENAME CONSTRAINT SYS_C005489 TO SNO_PK;
CONSTRAINT_NAME
------------------------------
SNO_PK
SYNTAX:
EX:
EX:
EX:
TABLE ALTERED.
TESTING:
DEFAULT CONSTRAINT:
- IT A SPECIAL TYPE OF CONSTRAINT WHICH IS USED TO ASSIGN A
USER DEFINE DEFAULT VALUE TO A COLUMN.
SYNTAX:
<COLUMN NAME> <DATATYPE>[SIZE] DEFAULT <VALUE /
EXPRESSION>
EX:
SQL> CREATE TABLE TEST17(SNO INT, SAL NUMBER (10) DEFAULT 5000);
TABLE CREATED.
TESTING:
SNO SAL
--------------- ----------
1 8500
2 5000
EX:
TESTING:
SQL> INSERT INTO TEST18(EID)VALUES (1021);
NOTE:
EX:
SQL> DESC USER_TAB_COLUMNS;
WHERE TABLE_NAME='TEST18';
COLUMN_NAME DATA_DEFAULT
-------------------------- --------------------------------
SAL 8000
COLUMN_NAME DATA_DEFAULT
-------------------------- --------------------------------
SAL NULL