Bản trình bày PowerPoint Trường Đại học Bách Khoa TP HCM Khoa khoa học và kĩ thuật Máy tính HỆ CƠ SỞ DỮ LIỆU (CO2013) GV Trương Quỳnh Chi Nhóm 9 Danh sách thành viên 1 Trần Đức Nguyên 1512227 2 Trư[.]
Trang 1Trường Đại học Bách Khoa TP.HCM
Khoa khoa học và kĩ thuật Máy tính.
HỆ CƠ SỞ DỮ LIỆU
(CO2013)
GV: Trương Quỳnh Chi Nhóm: 9
Trang 2Danh sách thành viên:
3 Huỳnh Trần Hải Long 51302131
Trang 3Toppic 9: Constraints and
Triggers in Oracle
Trang 4NỘI DUNG
1 CONSTRAINT
2 TRIGGER
Trang 5CONSTRAINT
Constraint ( ràng buộc) là các qui tắc được áp đặt cho các cột dữ liệu trên bảng Chúng được sử dụng để giới hạn kiểu dữ liệu nhập vào một bảng, giúp đảm bảo tính chính xác và tính đáng tin cậy cho dữ liệu trong Database.
Trang 6CONSTRAINT
Một số constraint trong oracle:
o NOT NULL constraint: Ràng buộc một giá trị CSDL trong cột khác null
o UNIQUE constraint: Không cho phép nhiều hàng có cùng một giá trị trong cùng một cột hoặc kết hợp các cột nhưng cho phép một số giá trị là rỗng
o PRIMARY KEY constraint: Kết hợp NOT NULL constraint và UNIQUE constraint
trong một khai báo
o FOREIGN KEY constraint: Ràng buộc các quy tắc liên quan đến tính toàn vẹn trong tham chiếu
o CHECK constraint: Yêu cầu một giá trị trong cơ sở dữ liệu để tuân thủ một điều kiện được chỉ định
Trang 7CONSTRAINT
NOT NULL constraint:
o Khai báo:
CREATE TABLE table_name(
Column_name Data_type NOT NULL, CONSTRAINT notnull_constraint_name NOT NULL(column_name) );
ALTER TABLE table_name MODIFY ( column_name NOT NULL);
Trang 8CONSTRAINT
NOT NULL constraint:
o Ví dụ:
CREATE TABLE nhanvien (
ID NUMBER(6) PRIMARY KEY, Ten VARCHAR2(10) NOT NULL, Salary NUMBER(10),
StartdayDATE, CONSTRAINT salary_nn NOT NULL (Salary) );
ALTER TABLE nhanvien MODIFY (Startday NOT NULL);
Trang 10CONSTRAINT
NOT NULL constraint:
o Thêm vào tất cả các cột trong bảng:
ALTER TABLE nhanvien MODIFY (amount NOT NULL);
=>SQL Error: ORA-02296: cannot enable (OT.) - null values found UPDATE
Trang 12CONSTRAINT
UNIQUE constraint:
o Khai báo:
CREATE TABLE table_name(
Column_name Data_type UNIQUE, UNIQUE(column_name),
CONSTRAINT unique_constraint_name UNIQUE(column_name),
Column_name Data_type CONSTRAINT unique_constraint_name UNIQUE );
ALTER TABLE table_name
ADD CONSTRAINT unique_constraint_name UNIQUE(column_name1,
column_nam2);
Trang 13CONSTRAINT
UNIQUE constraint:
o Tắt, kích hoạt và xóa
ALTER TABLE table_name
DISABLE CONSTRAINT unique_constraint_name;
ALTER TABLE table_name
ENABLE CONSTRAINT unique_constraint_name;
ALTER TABLE table_name
DROP CONSTRAINT unique_constraint_name;
Trang 14CONSTRAINT
UNIQUE constraint:
o Ví dụ:
CREATE TABLE nhanvien(
ID NUMBER(6) PRIMARY KEY, Ten VARCHAR2(10) NOT NULL, Salary NUMBER(10),
StartdayDATE, CONSTRAINT salary_uq UNIQUE (Salary) );
Trang 16CONSTRAINT
UNIQUE constraint:
o Ví dụ: Thêm unique constraint vào hai cột Ten và Startday
ALTER TABLE nhanvien
ADD CONSTRAINT unique_Ten_Startday UNIQUE(Ten, Startday);
INSERT INTO nhanvien (ID,Ten, Salary, Startday)
VALUES(3,’Huy’,5000000,12-10-2018);
=> SQL Error: ORA-00001: unique constraint (OT.UNIQUE_TEN_STARTDAY) violated INSERT INTO nhanvien (ID,Ten, Salary, Startday)
VALUES(3,’Huy’,5000000,12-11-2018);
Trang 17CONSTRAINT
PRIMARY KEY constraint:
Một cột là primary key phải:
o Các giá trị trong cột không null hoặc chuỗi không rỗng
o Các giá trị trong cột là duy nhất trong bảng
o Giá trị trong cột không nên thay đổi theo thời gian
Khi khai báo một cột là PRIMARY KEY là ngầm định nó NOT NULL nên không cần dùng ràng buộc đó
Trang 18CONSTRAINT
PRIMARY KEY constraint:
o Khai báo:
CREATE TABLE table_name(
Column_name Data_type PRIMARY KEY, CONSTRAINT PK_constraint_name PRIMARY KEY(column_name,…), );
ALTER TABLE table_name
ADD CONSTRAINT pk_constraint_name
PRIMARY KEY(column_name1, column_name2,…);
Trang 19CONSTRAINT
PRIMARY KEY constraint:
Để cải thiện hiệu suất khi tải 1 lượng lớn dữ liệu vào bảng hoặc cập nhật dữ liệu, ta có thể tạm thời tắt PRIMARY KEY constraint, để mở lại ta dùng ENABLE
ALTER TABLE table_name
DISABLE CONSTRAINT PK_constraint_name;
ALTER TABLE table_name
DISABLE PRIMARY KEY;
Trang 20CONSTRAINT
PRIMARY KEY constraint:
o Xóa
ALTER TABLE table_name
DROP CONSTRAINT PK_constraint_name;
ALTER TABLE table_name
DROP PRIMARY KEY;
ALTER TABLE nhanvien
DROP PRIMARY KEY;
Trang 21CONSTRAINT
FOREIGN KEY constraint:
o Khai báo:
Một bảng có thể có nhiều foreign key
Nếu ta không khai báo FK_name ở CONSTRAINT thì Oracle sẽ tự động sinh ra 1 FK_name và gán vào
CREATE TABLE child_table (
CONSTRAINT FK_name
FOREIGN KEY(col1, col2, ) REFERENCES parent_table(col1,col2)
ON DELETE [ CASCADE | SET NULL ]
);
Trang 22CONSTRAINT
FOREIGN KEY constraint:
o ON DELETE CASCADE: Nếu 1 hàng ở bảng cha bị xóa thì tất cả các hàng ở bảng
con tham khảo tới nó đều bị xóa
o ON DELETE SET NULL: Nếu 1 hàng ở bảng cha bị xóa thì tất cả các hàng ở bảng
con tham khảo tới nó đều trả về null
Trang 23
CONSTRAINT
FOREIGN KEY constraint:
o Thêm, bật, tắt và xóa:
ALTER TABLE child_table
ADD CONSTRAINT fk_name
FOREIGN KEY (col1,col2) REFERENCES child_table (col1,col2); ALTER TABLE child_table
ENABLE CONSTRAINT fk_name;
ALTER TABLE child_table
DISABLE CONSTRAINT fk_name;
ALTER TABLE child_table
DROP CONSTRAINT fk_name;
Trang 24CONSTRAINT
FOREIGN KEY constraint:
o Ví dụ:
CREATE TABLE supplier_groups(
group_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
group_name VARCHAR2(255) NOT NULL,
PRIMARY KEY (group_id)
);
CREATE TABLE suppliers (
supplier_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
supplier_name VARCHAR2(255) NOT NULL,
group_id NUMBER NOT NULL,
PRIMARY KEY(supplier_id)
FOREIGN KEY(group_id) REFERENCES supplier_groups(group_id) );
Trang 26CONSTRAINT
CHECK constraint:
o Khai báo:
CREATE TABLE table_name (
column_name data_type CHECK (expression),
column_name data_type CONSTRAINT check_constraint_name CHECK (expression); );
Trang 27CONSTRAINT
CHECK constraint:
o Ví dụ:
CREATE TABLE parts (
part_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
part_name VARCHAR2(255) NOT NULL,
buy_price NUMBER(9,2) CONSTRAINT check_positive_buy_price CHECK(buy_price > 0), PRIMARY KEY(part_id)
Trang 28CONSTRAINT
CHECK constraint:
o Thêm, bật, tắt, xóa:
ALTER TABLE parts
ADD CONSTRAINT check_positive_cost CHECK (buy_price> 0); ALTER TABLE parts
ENABLE CONSTRAINT check_positive_buy_price;
ALTER TABLE parts
DISABLE CONSTRAINT check_positive_buy_price;
ALTER TABLE parts
DROP CONSTRAINT check_positive_buy_price;
Trang 29TRIGGERS
Trang 30Khái niệm:
Trigger là một loại thủ tục đặc biệt (trình kích hoạt) được thực thi một cách tự động khi có một sự kiện xảy ra Sự kiện này có thể là một trong những điều sau:
+ Thao tác dữ liệu thực thi trên 1 bảng: INSERT, UPDATE hoặc DELETE + Một câu lệnh ngôn ngữ định nghĩa dữ liệu, ví dụ CREATE hoặc ALTER + Khởi động hoặc tắt cơ sở dữ liệu Oracle.
+ Đăng nhập hoặc đăng xuất bởi người dùng.
Trang 31+ Ngăn chặn các giao dịch không hợp lệ.
+ Thu thập thông tin thống kê về truy cập bảng.
+ Tạo giá trị tự động cho các cột dẫn xuất.
+ Kiểm toán dữ liệu nhạy cảm.
Trang 32Tạo trigger:
Một Trigger có 2 phần chính: Tiêu đề và thân:
-the trigger header:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER} triggering_event ON table_name [FOR EACH ROW]
[FOLLOWS | PRECEDES another_trigger]
[ENABLE / DISABLE]
[WHEN condition]
Trang 33-the trigger body:
DECLARE
Declaration statements BEGIN
Executable statements EXCEPTION
Exception_handling_statements END;
Trang 34Disable trigger cho table
- Nếu bạn muốn tắt một trigger đang hoạt động ở một table
nào đó:
ALTER TRIGGER trigger_name DISABLE;
- Nếu bạn muốn tắt tất cả trigger đang hoạt động ở một table
nào đó:
ALTER TABLE table_name DISABLE ALL TRIGGERS;
Trang 35Enable trigger
- Nếu bạn muốn bật một trigger đã tắt cho table:
ALTER TRIGGER trigger_name ENABLE;
- Nếu bạn muốn bật tất cả trigger đã tắt cho table:
ALTER TABLE table_name ENABLE ALL TRIGGERS;
Trang 37Ví dụ về tạo một trigger:
Giả sử chúng ta muốn ghi lại các hành động đối với bảng customers bất cứ khi nào một hàng được cập nhật hoặc xóa Để thực hiện việc này, trước tiên, chúng ta tạo một bảng mới để ghi lại các sự kiện UPDATE và DELETE.
Trang 38CREATE TABLE audits(
Audit_id NUMBER generated BY DEFAULT AS identity PRIMARY KEY,
Table_name VARCHAR2(255), Transaction_name VARCHAR2(10), By_user VARCHAR2(30), Transaction_date DATE
);
Trang 39Tiếp theo ta tạo một trigger liên quan đến bảng customers:
CREATE OR REPLACE TRIGGER customer_audit
AFTER UPDATE OR DELETE ON customers
DECLARE
v_transaction VARCHAR2(10);
BEGIN //determine the transaction typ
v_transaction := CASE
WHEN UPDATING THEN 'UPDATE'
WHEN DELETING THEN 'DELETE'
END; //insert a row into the audit table
INSERT INTO audits (table_name, transaction_name, by_user, transaction_date) VALUES ('CUSTOMERS', v_transaction, USER, SYSDATE);
END;
Trang 40- Nếu muốn Disable trigger
ALTER TRIGGER customer_audit DISABLE;
- Nếu muốn Enable trigger
ALTER TRIGGER customer_audit ENABLE;
- Nếu muốn Delete trigger
DROP TRIGGER customer_audit;
Trang 41Câu hỏi và bài tập:
1 Làm thế nào để sử dụng commit trong một trigger ?
a Trong khối thực thi (execution block).
b Bằng cách gọi thủ tục(procedure) có commit bên trong.
c a và b đều sai.
d Cả a và b đều đúng.
Trang 42Câu hỏi và bài tập:
1 Làm thế nào để sử dụng commit trong một trigger ?
a Trong khối thực thi (execution block).
b Bằng cách gọi thủ tục(procedure) có commit bên trong.
c a và b đều sai.
d Cả a và b đều đúng.
Đáp án: b Bằng cách gọi thủ tục(procedure) có commit bên trong
Trang 432 Điều nào sau đây không hợp lệ để kích hoạt trigger ?
a AFTER LOGON
b BEFORE LOGOFF
c BEFORE STARTUP
d BEFORE SHUTDOWN
Trang 442 Điều nào sau đây không hợp lệ để kích hoạt trigger ?
Trang 453 Số trigger lớn nhất có thể áp dụng cho một bảng đơn là bao nhiêu đối với oracle bản mới nhất ở thời điểm hiện tại?
a 10.
b 11.
c 12.
d Không giới hạn.
Trang 463 Số trigger lớn nhất có thể áp dụng cho một bảng đơn là bao nhiêu đối với oracle bản mới nhất ở thời điểm hiện tại?
Trang 474 Việc làm nào sau đây có thể kích hoạt trigger ?
a Define, Create.
b Drop, Comment.
c Insert, Update, Delete.
d a, b, c đều được.
Trang 484 Việc làm nào sau đây có thể kích hoạt trigger ?
Trang 495 Điều nào sau đây không phải là ràng buộc toàn vẹn ?
a Not null.
b Positive.
c Unique.
d Check ‘predicate’.
Trang 505 Điều nào sau đây không phải là ràng buộc toàn vẹn ?
Trang 51CẢM ƠN CÔ VÀ CÁC BẠN ĐÃ
CHÚ Ý LẮNG NGHE!