1. Trang chủ
  2. » Tất cả

Constraints and triggers in oracle

51 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Constraints and triggers in oracle
Tác giả Trần Đức Nguyên, Trương Quốc Huy, Huỳnh Trần Hải Long, Ngô Đức Ngọc Ngà, Phạm Minh Khoa
Người hướng dẫn Trương Quỳnh Chi
Trường học Trường Đại học Bách Khoa TP.HCM
Chuyên ngành Hệ cơ sở dữ liệu (CO2013)
Thể loại Bài tập
Năm xuất bản Không rõ
Thành phố TP.HCM
Định dạng
Số trang 51
Dung lượng 451,96 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

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

Trang 2

Danh sách thành viên:

3 Huỳnh Trần Hải Long 51302131

Trang 3

Toppic 9: Constraints and

Triggers in Oracle

Trang 4

NỘI DUNG

1 CONSTRAINT

2 TRIGGER

Trang 5

CONSTRAINT

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 6

CONSTRAINT

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 7

CONSTRAINT

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 8

CONSTRAINT

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 10

CONSTRAINT

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 12

CONSTRAINT

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 13

CONSTRAINT

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 14

CONSTRAINT

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 16

CONSTRAINT

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 17

CONSTRAINT

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 18

CONSTRAINT

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 19

CONSTRAINT

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 20

CONSTRAINT

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 21

CONSTRAINT

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 22

CONSTRAINT

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 24

CONSTRAINT

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 26

CONSTRAINT

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 27

CONSTRAINT

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 28

CONSTRAINT

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 29

TRIGGERS

Trang 30

Khá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 32

Tạ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 34

Disable 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 35

Enable 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 37

Ví 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 38

CREATE 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 39

Tiế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 41

Câ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 42

Câ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 43

2 Đ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 44

2 Điều nào sau đây không hợp lệ để kích hoạt trigger ?

Trang 45

3 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 46

3 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 47

4 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 48

4 Việc làm nào sau đây có thể kích hoạt trigger ?

Trang 49

5 Đ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 50

5 Điều nào sau đây không phải là ràng buộc toàn vẹn ?

Trang 51

CẢM ƠN CÔ VÀ CÁC BẠN ĐÃ

CHÚ Ý LẮNG NGHE!

Ngày đăng: 04/04/2023, 08:30