1) DATABASE CONSTRAINTS
=======================
Constraints : are the rules which can be implemented on the
data.
Uses of Constraints: useful to maintain consistent and
reliable data. so that
user should not modify incorrect data, if he tries to modify
incorrect data
RDBMS will not allow the user to do it. before making any
changes in data first
RDBMS will check the constraint i.e., it will check the
rule, if it satisfies
then it will allow otherwise it will not allow.
There are five types of constraints
1. NOT NULL
2. CHECK
3. UNIQUE
4. PRIMARY KEY = NOT NULL + UNIQUE
5. FOREIGN KEY
Constraints can be defined at two levels
1. column level
2. table level
NOT NULL constraint can be defined only at the column level
not at the table
level.
1) NOT NULL - do not accept nulls
DROP TABLE employee;
create table
employee(empno number(4), ename varchar2(20) NOT NULL);
NOTE:tables should
have minimum one column, without column, table cannot exist.
select * from employee;
INSERT INTO
employee(empno,ename) VALUES(100, 'Dexter');
SELECT * FROM
EMPLOYEE;
INSERT INTO
employee(empno) VALUES(101);
INSERT INTO
employee(empno, ename) VALUES(101, NULL);
SELECT * FROM
EMPLOYEE;
INSERT INTO
employee(ename) VALUES('Disoj');
select * from
employee;
CREATE TABLE
NN_TABLE(EMPNO NUMBER(4), ENAME VARCHAR2(20), NOT NULL(ENAME)); -- not valid
2) UNIQUE - no duplicates are accepted (we can have null(s)
in unique column)
WHEN EVER WE DEFINE UNIQUE CONSTRAINT ON ANY COLUMN THEN ON
THAT COLUMN UNIQUE
INDEX GETS CREATED AUTOMATICALLY.
UNIQUE CONSTRAINT WE CAN DEFINE BOTH AT COLUMN LEVEL AND
TABLE LEVEL.
DROP TABLE PRODUCT;
create table
product(pid number(4), pname varchar2(15) UNIQUE);
INSERT INTO
product(pid, pname) VALUES(1001, 'Dexter iphone');
SELECT * FROM
PRODUCT;
INSERT INTO
product(pid, pname) VALUES(1002, 'Dexter iphone');
INSERT INTO
product(pid, pname) VALUES(1002, 'dexter iphone');
INSERT INTO
product(pid, pname) VALUES(1001, 'SAMSUNG');
SELECT * FROM
PRODUCT;
INSERT INTO
product(pid, pname) VALUES(1002, NULL);
INSERT INTO
product(pid, pname) VALUES(1003, NULL);
select * from
product;
-- example for
defining constraint at the table level
DROP TABLE
PRODUCT1;
create table
product1(pid number(4), pname varchar2(15), price NUMBER(8,2),
UNIQUE(pid,
pname));
Note: with table
level constraint we can define contraint on multiple columns.
INSERT INTO
product1 VALUES(1001, 'abc', 2000);
SELECT * FROM
PRODUCT1;
INSERT INTO
product1 VALUES(1002, 'abc', 2000);
SELECT * FROM
PRODUCT1;
INSERT INTO product1
VALUES(1002, 'abc', 3000); -- invalid
SELECT * FROM
PRODUCT1;
INSERT INTO
product1 VALUES(1001, NULL, 2000);
SELECT * FROM
PRODUCT1;
INSERT INTO
product1 VALUES(1001, NULL, 2500);
INSERT INTO
PRODUCT1 VALUES(NULL, NULL, 4000);
SELECT * FROM
PRODUCT1;
INSERT INTO
PRODUCT1 VALUES(NULL, NULL, 6000);
SELECT * FROM
PRODUCT1;
INSERT INTO
product1 VALUES(NULL, 'abc', 2000);
SELECT * FROM product1;
-- dt.20-feb-2014 --
drop table emp2014;
CREATE TABLE emp2014
(
empno NUMBER
UNIQUE NOT NULL,
ename VARCHAR2(20)
NOT NULL,
sal NUMBER(7,2) NOT NULL
);
INSERT INTO emp2014
VALUES(100, 'abc', 50000);
INSERT INTO emp2014
VALUES(100, 'xyz', 40000);
SELECT * FROM
EMP2014;
INSERT INTO emp2014
VALUES(NULL, 'abc', 50000); -- invalid
INSERT INTO emp2014
VALUES(101, 'abc', 50000);
SELECT * FROM
emp2014;
SELECT * FROM
user_constraints;
SELECT * FROM
user_cons_columns;
3) PRIMARY KEY = Unique + not null ( no null value, no
duplicate value),
only
1 primary key per table
DROP TABLE emp_pk;
CREATE TABLE emp_pk
(empno NUMBER(4)
PRIMARY KEY, ename VARCHAR2(20)
);
INSERT INTO emp_pk
VALUES(100, 'xyz');
SELECT * FROM
EMP_PK;
INSERT INTO
emp_pk(ename) VALUES('RAJ'); -- will give error
INSERT INTO
emp_pk VALUES(NULL, 'akp'); -- will give error
SELECT * FROM
EMP_PK;
INSERT INTO
emp_pk VALUES(100, 'John');
SELECT * FROM
EMP_PK;
INSERT INTO
emp_pk VALUES(101, 'xyz');
SELECT * FROM
EMP_PK;
drop table
pk_demo;
CREATE TABLE PK_DEMO(EMPNO NUMBER(4), ENAME
VARCHAR2(20), SAL NUMBER(8,2),
PRIMARY
KEY(EMPNO, ENAME));
INSERT INTO
PK_DEMO VALUES(100, 'SKP', 25000);
SELECT * FROM
PK_DEMO;
INSERT INTO
PK_DEMO VALUES(100, 'AKP', 50000);
INSERT INTO
PK_DEMO VALUES(100,'SKP', 40000); -- gives error
INSERT INTO
PK_DEMO VALUES(NULL, 'ISHU', 15000);
INSERT INTO
PK_DEMO VALUES(102, NULL, 15000);
4) FOREIGN KEY - is a type of contraints when defined on any
column it will
create logical relationship with other column, references
primary key of same table
or another table, it can have those values which are there
in the primary key column
or it can have nulls, it can have duplicate data.
DROP TABLE
DEPT_REL9;
CREATE TABLE
dept_rel9(deptid NUMBER(4) PRIMARY KEY, dname VARCHAR2(20));
drop table emp_rel9;
CREATE TABLE
emp_rel9(empid NUMBER(4), ename VARCHAR2(20),
deptid NUMBER(4) REFERENCES
dept_rel9(deptid));
INSERT INTO
dept_rel9 VALUES(10, 'Marketing');
INSERT INTO
dept_rel9 VALUES(20, 'Accounts');
SELECT * FROM
DEPT_REL9;
desc emp_rel9;
INSERT INTO emp_rel9
VALUES(100, 'Abel', 30); -- gives error
INSERT INTO
emp_rel9 VALUES(100, 'Abel', 20);
INSERT INTO
EMP_REL9 VALUES(101, 'JOHN', NULL);
INSERT INTO
EMP_REL9 VALUES(102, 'ISHU', 20);
SELECT * FROM EMP_REL9;
INSERT INTO emp_rel9
VALUES(102, 'Zlotkey', 50); -- GIVES ERROR
SELECT * FROM
emp_rel9;
SELECT * FROM
dept_rel9;
DELETE FROM
dept_rel9 WHERE deptid=20;
DELETE FROM
dept_rel9 WHERE deptid=10;
drop table
emp_rel14;
CREATE TABLE
emp_rel14(empid NUMBER(4), ename VARCHAR2(20), deptid NUMBER(4),
FOREIGN KEY(deptid) REFERENCES
dept_rel(deptid));
select * from
emp_rel14;
Constraint name will
be given in "SYS_Cn" (n is number) format by default.
SELECT * FROM
user_cons_columns;
select * from
user_constraints;
DROP TABLE
EMP_CONS_NAME;
CREATE TABLE
emp_cons_name11
(
empno NUMBER(4) CONSTRAINT emp_cons_pk11 PRIMARY
KEY,
ename VARCHAR2(20) CONSTRAINT nn111 NOT NULL,
mgr NUMBER(4) REFERENCES
emp_cons_name11(empno),
sal NUMBER(7,2) CONSTRAINT nn211 NOT NULL,
deptno NUMBER(2)
REFERENCES dept(deptno)
);
SELECT * FROM
user_cons_columns WHERE TABLE_NAME='EMP_CONS_NAME11';
SELECT * FROM
user_constraints;
we cannot insert
any value in the foreign key column which is not there
parent table.
you cannot delete
data from parent table when there is a dependent record
in the child table.
drop table
parent_table2;
CREATE TABLE
parent_table2(sno NUMBER(4) PRIMARY KEY, sname VARCHAR2(20));
INSERT INTO
parent_Table1 VALUES(100, 'san');
INSERT INTO
parent_Table1 VALUES(101, 'akp');
drop table
child_table11;
select * from
parent_table1;
CREATE TABLE
child_table11(sno NUMBER(4) REFERENCES parent_table1(sno),
marks NUMBER(4));
INSERT INTO
child_table11 VALUES(100, 95);
INSERT INTO
child_table11 VALUES(101, 98);
select * from
child_table11;
INSERT INTO
child_table11 VALUES(102, 98); -- cannot insert
INSERT INTO
child_table11 VALUES(null, 98);
INSERT INTO
child_table11 VALUES(101, 99);
select * from child_table11;
select * from parent_table1;
delete from parent_table1 where sno=100;
delete from parent_table1 where sno=101;
CREATE TABLE
PARENT_TABLE11(SNO NUMBER(4) PRIMARY KEY, SNAME VARCHAR2(20));
INSERT INTO
PARENT_TABLE11 VALUES(100, 'JOHN');
INSERT INTO
PARENT_TABLE11 VALUES(101, 'ABEL');
drop table
child_table11;
CREATE TABLE
child_table11(sno NUMBER(4) REFERENCES parent_table11(sno)
ON DELETE CASCADE,
marks NUMBER(4));
INSERT INTO
child_table11 VALUES(100, 95);
INSERT INTO
child_table11 VALUES(101, 98);
INSERT INTO
child_table11 VALUES(101, 99);
SELECT * FROM
parent_table11;
SELECT * FROM
child_table11;
DELETE FROM
parent_table11 WHERE sno=101;
SELECT * FROM
parent_table11;
SELECT * FROM
child_Table11;
DROP TABLE PARENT_TABLE31;
CREATE TABLE
parent_table311(sno NUMBER(4) PRIMARY KEY, sname VARCHAR2(20));
INSERT INTO
parent_Table311 VALUES(100, 'san');
INSERT INTO
parent_Table311 VALUES(101, 'akp');
select * from
parent_table311;
CREATE TABLE
child_table311(sno NUMBER(4) REFERENCES parent_Table311(sno)
ON DELETE SET NULL,
marks NUMBER(4));
INSERT INTO
child_table311 VALUES(100, 95);
INSERT INTO
child_table311 VALUES(101, 98);
SELECT * FROM
parent_table311;
SELECT * FROM child_table311;
DELETE FROM
parent_table311 WHERE sno=100;
SELECT * FROM
parent_table311;
SELECT * FROM
child_Table311;
parent record, child
record
1) do not allow
deleting parent record when child record found
2) ON DELETE CASCADE
- when deleting parent record - delete all corresponding child records
3) ON DELETE SET
NULL - when deleting parent record - set child record value as null
i) deptno number(2) references dept(deptno)
ii) deptno number(2) references dept(deptno) on
delete cascade
iii) deptno number(2) references dept(deptno) on
delete set null
5) DEFAULT - can set default value
drop table sales;
create table sales
(sid number(4)
primary key,
pname varchar2(20)
unique,
qty number(3)
DEFAULT 1,
price number(5,2)
not null,
saleamt number(7,2)
);
desc sales;
INSERT INTO
sales(sid, pname, price) VALUES(1001, 'samsung123', 300);
SELECT * FROM sales;
INSERT INTO
sales(sid, pname,price, qty) VALUES(1002, 'samsung4', 400, 5);
select * From sales;
6) CHECK - restricts values from a list
drop table
student21;
create table
student21(stuid NUMBER(4), sname VARCHAR2(20),
age NUMBER(4)
CHECK(age >=15) CHECK(age <=30));
INSERT INTO student21
VALUES(100, 'ishu', 35); -- NOT ALLOWED
INSERT INTO
student21 VALUES(100, 'ishu', 29);
INSERT INTO
student21 VALUES(102, 'aksh', 30);
INSERT
INTO student21 VALUES(103, 'prakash', 14);
SELECT * FROM
student21;
No comments:
Post a Comment