Ràng buộc toàn vẹn dữ liệu là các miêu tả để định nghĩa quy tắc nghiệp vụ cho cột của một bảng. Ràng buộc toàn vẹn dữ liệu là lệnh để dữ liệu trong bảng đó luôn đúng:
Nếu Ràng buộc toàn vẹn dữ liệu đ−ợc tạo cho một bảng và một số bảng tồn tại
không thoả mãn ràng buộc đó, thì ràng buộc đó không có hiệu lực. Ràng buộc dữ liệu đ−ợc kiểm tra ngay từ khi tạo.
Sau khi ràng buộc đ−ợc định nghĩa, nếu nh− bất kì kết quả của lệnh DML không
thoả mãn ràng buộc đó thì lệnh bị trả về cùng với mã lỗi
Ràng buộc toàn vẹn dữ liệu đ−ợc định nghĩa cho bảng và đ−ợc l−u tập trung nh− một
phần định nghĩa về bảng đó trong từ điển dữ liệu của CSDL, vì vậy các ứng dụng
CSDL phải gắn với cùng một tập các quy tắc. Nếu nh− quy tắc thay đổi, chỉ cần thay
đổi tại 1 mức CSDL và không tốn nhiều thời gian thay đổi cho từng ứng dụng
Những ràng buộc toàn vẹn dữ liệu sau đ−ợc hỗ trợ bởi Oracle
NOT NULL Không cho phép cột rỗng
UNIQUE Không cho phép trùng lặp dữ liệu trên một cột
PRIMARY KEY
Gồm cả 2 ràng buộc trên.
FOREIGN KEY Mỗi giá trị trong cột (hay tập các cột) phải phù hợp với giá trị trong bảng liên quan UNIQUE hay PRIMARY KEY. FOREIGN KEY
chỉ ra ràng buộc dữ liệu nếu nh− dữ liệu bảng tham khảo thay đổi
CHECK Dữ liệu phải thoả mãn mệnh đề logíc của ràng buộc .
Khoá (Key)
Khoá đ−ợc sử dụng để định nghĩa một vài kiểu ràng buộc. Khoá là cột hay tập các cột
có trong định nghĩa của kiểu ràng buộc toàn vẹn nào đó. Khoá mô tả quan hệ giữa những bảng và cột khác nhau của CSDL quan hệ. Các kiểu khoá bao gồm
primary key Cột hay tập các cột đ−ợc định nghĩa ràng buộc PRIMARY KEY.
Giá trị khoá chính phải đ−ợc định nghĩa duy nhất và không rỗng
unique key Cột hay tập các cột đ−ợc định nghĩa ràng buộc UNIQUE thì phải
duy nhất.
foreign key Cột hay tập các cột tham khảo tới ràng buộc toàn vẹn bảng khác.
referenced key unique key hay primary key của cùng hay không cùng bảng đ−ợc
tham khảo bởi foreign key.
Trigger của CSDL
Trigger của CSDL cho phép định nghĩa và đảm bảo những quy tắc ràng buộc toàn vẹn,
nh−ng trigger không phải chỉ là ràng buộc toàn vẹn. Thực ra trigger không kiểm tra dữ
liệu đã cập nhật vào bảng. Vì vậy khuyến cáo chỉ nên sử dụng trigger khi những quy
Chi tiết về lệnh SQL
Ngôn ngữ định nghĩa dữ liệu (Data Definition Language (DDL))
Các lệnh DDL định nghĩa, duy trì và xoá các đối t−ợng l−ợc đồ khi chúng không còn
cần thiết. Chúng cũng bao gồm lệnh cấp quyền cho User hay quyền truy nhập CSDL
và những đối t−ợng cụ thể trong CSDL.
Lệnh tạo CSDL
Cú pháp:
CREATE DATABASE <Database_name>;
Mục đích:
Khởi tạo CSDL có tên là Database_name, nếu nh− sử dụng câu lệnh này trên một
CSDL đã tồn tại thì toàn bộ các file dữ liệu của nó sẽ bị xóa. Ví dụ:
CREATE DATABASE Csdl_Bgg;
Lệnh tạo bảng
Cú pháp:
CREATE TABLE <Table_name> (
Col_Name1 Data_Type [NOT NULL], Col_Name2 Data_Type [NOT NULL], ...
Col_NameN Data_Type,
[constraInt Constraint_Name PRIMARY KEY (ColA, .. , ColAn)],
[constraInt Constraint_Name FOREIGN KEY (ColB, .. , ColBn)], [constraInt Constraint_Name CHECK <Condition>]);
Mục đích:
Tạo bảng Table_Name với các tr−ờng “Col_Name1”, .. , “Col_NameN” với
ràng buộc khóa chính, khóa ngoài, “Conditon” kiểm tra điều kiện ràng buộc dữ liệu khi đ−a vào bảng.
Ví dụ:
CREATE TABLE Employ(
Employ_ID VARCHAR2(5) NOT NULL,
Depart_ID VARCHAR2(5) NOT NULL,
Employ_Name VARCHAR2(27),
Sal NUMBER,
CONSTRAINT PK_Employ (Employ_ID), CONSTRAINT FK_Employ (Depart_ID),
CONSTRAINT Con_Check CHECK Sal >1000 AND Sal <10000);
Lệnh tạo VIEW
Cú pháp:
CREATE VIEW View_name AS SELECT Col1, .. , Coln
FROM Table_Name
Mục đích:
Định nghĩa khung nhìn là bảng logic dựa và những bảng hoặc view khác Ví dụ:
CREATE VIEW dept20 AS
SELECT Employ_Name, sal*12 Annual_Salary
FROM Employ
WHERE Depart_ID = ‘DP01’;
Lệnh tạo User
Cú pháp:
CREATE USER User_Name IDENTIFIED BY Pasword [DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace] [QUOTA integer[UNLIMITED] ON tablepace] [ACCOUNT LOCK[UNLOCK]];
IDENTIFIED: Mật khẩu đăng nhập,
DEFAULT: Định nghĩa Tablespace ngầm định cho các đối t−ợng mà user tạo ra,
TEMPORARY: Định nghĩa Tablespace cho những segment tạm thời của user,
QUOTA: Tuỳ chọn, hạn mức l−u trữ trong tablespace bằng số integer byte ,
ACCOUNT: Khóa hay không khóa truy nhập user. Mục đích:
Tạo và cấu hình cho User_Name quyền truy nhập vào CSDL hay account cho phép log vào CSDL với quyền user đó
Ví dụ:
CREATE USER sidney
IDENTIFIED BY welcome
DEFAULT TABLESPACE cases_ts
QUOTA 10M ON cases_ts
TEMPORARY TABLESPACE temp_ts
QUOTA 5M ON system ;
Lệnh xóa CSDL
Cú pháp
DROP DATABASE <Database_name>;
Mục đích:
Xóa một CSDL cùng với mọi dữ liệu trong CSDL đó.
Ví dụ:
DROP DATABASE Csdl_Bgg;
Lệnh xóa một bảng
Cú pháp:
DROP TABLE <Table_Name>; Mục đích:
Xóa bảng cùng với mọi dữ lệu có trong bảng Ví dụ:
Lệnh xóa User của một CSDL
Cú pháp:
DROP USER User_name [CASCADE]; Mục đích:
Xóa user của CSDL và những đối t−ợng của user đó, lựa chọn CASCADE xóa
tất cả các đối t−ợng có trong l−ợc đồ của user Ví dụ:
DROP USER Tunb;
Các lệnh cấp vμ xóa quyền
Có hai cách cấp quyền: Đối t−ợng và hệ thống nh− đã nói ở trên.
Lệnh cấp quyền
Cú pháp:
GRANT privilege ON object TO grantee [WITH GRANT OPTION];
Trong đó privilege tên quyền, object là đối t−ợng mà ta cấp quyền trên nó, grantee là
user đ−ợc cấp quyền
gồm các quyền:
Object Privilege Miêu tả Kiểu đối t−ợng l−ợc đồ ALTER Có quyền với câu lệnh ALTER Table, Sequence
DELETE Có quyền với câu lệnh
DELETE
Table, View EXECUTE Quyền thực hiện những đối
t−ơng Store PL/SQL
Procedure, Function, Package
INDEX Cho quyền với lệnh CREATE
INDEX
Table
INSERT Có quyền với câu lệnh
INSERT
Table,View REFERENCE Quyền tạo những ràng buộc
tham chiếu
Table
SELECT Có quyền với câu lệnh
SELECT
Table, View, Sequence, snapshot
UPDATE Có quyền với câu lệnh
UPDATE
Table, View Mục đích:
Tạo quyền truy nhập trên dữ liệu cho User Ví dụ:
GRANT SELECT ON Class TO UserA;
Câu lệnh hủy bỏ quyền user
Cú pháp:
REVOKE privilege ON object FROM grantee [CASCADE CONSTRAINTS];
Mục đích: Hủy bỏ quyền thao tác trên đối t−ợng CSDL của User
Ví dụ:
REVOKE UPDATE, DELETE, INSERT ON student FROM userA;
Trên các hệ thống lớn của Oracle th−ờng có nhiều ng−ời dùng, do vậy quyền có thể
đ−ợc thay đổi th−ờng xuyên, Oracle cung cấp ROLE để lựa chọn quyền trên cả 2 loại:
đối t−ợng và hệ thống
Cú pháp:
CREATE ROLE <role_name>;
GRANT privilege ON object TO role_name; ...
GRANT privilege ON object TO role_name; GRANT role_name TO user;
Ví dụ:
CREATE ROLE table_query;
GRANT SELECT ON students TO table_query; GRANT SELECT ON classes TO table_query; GRANT SELECT ON rooms TO table_query; GRANT table_query TO UserA;
GRANT table_query TO UserB
Sửa đổi cấu trúc
Thay đổi kiểu một cột
Cú pháp:
ALTER TABLE <table_name> MODIFY/ ADD[CONSTRAINT] (Col_name New_type);
ALTER TABLE <table_name> DROP CONSTRAINT Constraint_Name; Mục đích:
Thay thế hoặc thêm một tr−ờng mới, xóa ràng buộc khóa chính hay những
CONSTRAINT Ví dụ:
ALTER TABLE Employ ADD (BirthDate DATE);
Alter table Department
addconstraint PK_Employ primary key (Employ_ID);
Ngôn ngữ thao tác với dữ liệu (DML)
Các lệnh DML thao tác dữ liệu trong CSDL. Ví dụ: Truy vấn, thêm, cập nhật và xoá những bản ghi.
Các lệnh truy vấn
Cú pháp:
SELECT [DISTINCT] <Colums, expression>
FROM <Table_Name>
WHERE <Condition> GROUP BY<Colum>
HAVING <Group Condition> ORDER BY [ASC/DESC] Mục đích:
Đ−a ra những câu hỏi yêu cầu SQL đ−a ra những dữ liệu cần thiết,
Select có thể đ−ợc thực hiện trên nhiều bảng,
Select là một mệnh đề, mỗi mệnh đề cho phép trong nó có mệnh đề con. Ví dụ:
SELECT Employ_Name, AVG (Sal) TBLuong FROM Salary GROUP BY Employ_Name HAVING AVG(Sal) >=500; Các lệnh truy vấn lồng nhau SELECT */Colum/Expression FROM <Table_Name>
WHERE Colum =/>=/<=/other (SELECT */Colum FROM Table_Name
WHERE Expression);
Ví dụ:
SELECT Employ_Name, Sal FROM Salary
WHERE Sal > (SELECT AVG(Sal) FROM Employ);
Các lệnh quản trị dữ liệu
Thêm một dòng:
INSERT INTO <Table_Name> [(Field1, Field2,..., Fieldn)] VALUES (Value1, Value2, ..., Valuen);
Ví dụ:
INSERT INTO Employ VALUES (‘EP001’, ’DP01’, ’David’, 2000, ’08/05/1974’);
Lệnh xoá một bản ghi
DELETE FROM <Table_Name> WHERE <Condition>;
Ví dụ:
DELETE FROM Sal WHERE Employ_id=’EP001’;
Lệnh sửa đổi giá trị:
Update <Table_name> Set (Attr=new_value) Where <Conditon>;
Ví dụ:
Update Salary Set (Sal=3000) Where Employ_id=’EP001’; ---