Hệ quản trị cơ sở dữ liệu - Những hỗ trợ tiên tiến khác của SQL
Bạn đang xem 20 trang mẫu của tài liệu "Hệ quản trị cơ sở dữ liệu - Những hỗ trợ tiên tiến khác của SQL", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- he_quan_tri_co_so_du_lieu_nhung_ho_tro_tien_tien_khac_cua_sq.pdf
Nội dung text: Hệ quản trị cơ sở dữ liệu - Những hỗ trợ tiên tiến khác của SQL
- Khoa Công Nghệ Thông Tin Trường Đại Học Cần Thơ Những hỗ trợ tiên tiến khác của SQL Đỗ Thanh Nghị dtnghi@cit.ctu.edu.vn Cần Thơ 24-04-2005
- Nội dung Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa trigger Tạo View Truy cập cạnh tranh 2
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa trigger Tạo View Truy cập cạnh tranh 3
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa kế thừa Định nghĩa trigger Tạo View Truy cập cạnh tranh CREATE TABLE Hỗ trợ cho định nghĩa kế thừa (INHERITES) Phép truy vấn cũng làm việc trên dữ liệu thừa kế SELECT (ONLY) 4
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 1 Định nghĩa trigger Tạo View Truy cập cạnh tranh 5
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 2 Định nghĩa trigger Tạo View Truy cập cạnh tranh 6
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 3 Định nghĩa trigger Tạo View Truy cập cạnh tranh 7
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 4 với kế thừa Định nghĩa trigger Tạo View Truy cập cạnh tranh 8
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 5 với kế thừa Định nghĩa trigger Tạo View Truy cập cạnh tranh 9
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 6 với kế thừa Định nghĩa trigger Tạo View Truy cập cạnh tranh 10
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa trigger Tạo View Truy cập cạnh tranh 11
- Kế thừa Định nghĩa kiểu Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa trigger Tạo View Cú pháp: Truy cập cạnh tranh CREATE TYPE typename ( INPUT = input_function, OUTPUT = output_function, INTERNALLENGTH = { internallength | VARIABLE } [, DEFAULT = default ] [, ELEMENT = element ] [, DELIMITER = delimiter ] [, PASSEDBYVALUE ] [, ALIGNMENT = alignment ] [, STORAGE = storage ]) CREATE TYPE typename AS (column_name data_type [, ]) 12
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 7 Định nghĩa trigger Tạo View Truy cập cạnh tranh 13
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 7 (cont.) Định nghĩa trigger Tạo View Truy cập cạnh tranh 14
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa trigger Tạo View Truy cập cạnh tranh 15
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa hàm Định nghĩa trigger Tạo View Truy cập cạnh tranh Cú pháp: CREATE FUNCTION name ( [ ftype [, ] ] ) RETURNS rtype AS definition LANGUAGE 'langname ' [ WITH ( attribute [, ] ) ] CREATE FUNCTION name ( [ ftype [, ] ] ) RETURNS rtype AS obj_file , link_symbol LANGUAGE 'C' [ WITH ( attribute [, ] ) ] 16
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 8 Định nghĩa trigger Tạo View Truy cập cạnh tranh 17
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 9 Định nghĩa trigger Tạo View Truy cập cạnh tranh 18
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 10 Định nghĩa trigger Tạo View Truy cập cạnh tranh 19
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 11 Định nghĩa trigger Tạo View Truy cập cạnh tranh 20
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 11(cont.) Định nghĩa trigger Tạo View Truy cập cạnh tranh 21
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa trigger Tạo View Truy cập cạnh tranh 22
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa ràng buộc dữ liệu Định nghĩa trigger Tạo View Truy cập cạnh tranh CREATE TABLE hỗ trợ cho định nghĩa những ràng buộc: NOT NULL UNIQUE CHECK PRIMARY KEY (UNIQUE và NOT NULL) REFERENCES (Khóa ngoài) 23
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 12 Định nghĩa trigger Tạo View Truy cập cạnh tranh test=# CREATE TABLE cities ( test(# nc smallint PRIMARY KEY, test(# name varchar(30), test(# pop bigint NOT NULL, test(# nb_museums smallint DEFAULT 0); test=# CREATE TABLE hotels ( test(# nh integer PRIMARY KEY, test(# nc smallint REFERENCES cities, test(# name varchar(30), test(# category varchar(12) test(# CHECK (category IN ('modeste','confortable','luxe'))); 24
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 13 Định nghĩa trigger Tạo View Truy cập cạnh tranh test=# CREATE TABLE tourists ( test(# nt integer PRIMARY KEY, test(# name varchar(20), test(# last_name varchar(20), test(# age smallint CHECK (age > 0), test(# type varchar(14) test(# CHECK (type IN ('sportif','intellectuel','ecologiste'))); test=# CREATE TABLE museums ( test(# nm integer, test(# nc smallint REFERENCES cities, test(# name varchar(30) NOT NULL, test(# PRIMARY KEY (nm,nc)); 25
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 14 Định nghĩa trigger Tạo View Truy cập cạnh tranh test=# CREATE TABLE bookings ( test(# nt integer REFERENCES tourists, test(# nh integer REFERENCES hotels, test(# begin_date date NOT NULL, test(# nb_days smallint NOT NULL, test(# PRIMARY KEY (nt,nh,begin_date)); test=# CREATE TABLE ut ( test(# id integer PRIMARY KEY, test(# acc_no integer UNIQUE); 26
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 15 Định nghĩa trigger Tạo View Truy cập cạnh tranh 27
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 16 Định nghĩa trigger Tạo View Truy cập cạnh tranh 28
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Kiểm tra ràng buộc: Định nghĩa ràng buộc dữ liệu Định nghĩa trigger primary key, not null, references Tạo View Truy cập cạnh tranh test=# INSERT INTO cities(nc, name, pop) VALUES (3, 'Waterloo', 150000); ERROR: duplicate key violates unique constraint "cities_pkey" test=# INSERT INTO museums VALUES (2, 2, NULL); ERROR: null value in column "name" violates not-null constraint test=# INSERT INTO museums VALUES (1, 10, 'CULTURE'); ERROR: insert or update on table "museums" violates foreign key constraint "museums_nc_fkey" DETAIL: Key (nc)=(10) is not present in table "cities". 29
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Kiểm tra ràng buộc: Định nghĩa ràng buộc dữ liệu Định nghĩa trigger check, unique Tạo View Truy cập cạnh tranh test=# INSERT INTO tourists VALUES (8, 'Dinh', 'Gia Bao', 34, 'foo'); ERROR: new row for relation "tourists" violates check constraint "tourists_type_check" test=# INSERT INTO tourists VALUES (8, 'Dinh', 'Gia Bao', 0, 'sportif'); ERROR: new row for relation "tourists" violates check constraint "tourists_age_check" test=# INSERT INTO ut VALUES (1,1072); test=# INSERT INTO ut VALUES (2,1072); ERROR: duplicate key violates unique constraint "ut_acc_no_key" 30
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa trigger Tạo View Truy cập cạnh tranh 31
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa Trigger Định nghĩa trigger Tạo View Truy cập cạnh tranh Cú pháp: CREATE TRIGGER name { BEFORE | AFTER } { event [OR ] } ON table FOR EACH { ROW | STATEMENT } EXECUTE PROCEDURE func ( arguments ) 32
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 17 Định nghĩa trigger Tạo View Truy cập cạnh tranh Tạo trigger để đảm bảo khi cập nhật dữ liệu trong bảng museums, cột nb_museums trong bảng cities là tổng số museum có trong thành phố 33
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 18 Định nghĩa trigger Tạo View Truy cập cạnh tranh 34
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 19 Định nghĩa trigger Tạo View Truy cập cạnh tranh 35
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 20 Định nghĩa trigger Tạo View Truy cập cạnh tranh Tạo trigger để đảm bảo khi cập nhật dữ liệu trong bảng bookings, một người du lịch thuộc típ intellectuel chỉ ở trong khách sạn của một thành phố có ít nhất 1 bảo tàng 36
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 21 Định nghĩa trigger Tạo View Truy cập cạnh tranh 37
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 22 Định nghĩa trigger Tạo View Truy cập cạnh tranh Tạo trigger để đảm bảo khi cập nhật dữ liệu trong bảng bookings, một người du lịch thuộc típ ecologiste chỉ ở trong khách sạn của một thành phố có dân số ít hơn 1000 38
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ 23 Định nghĩa trigger Tạo View Truy cập cạnh tranh 39
- Kế thừa Kiểm tra những triggers: Định nghĩa kiểu Định nghĩa hàm trigger_insert_update_bookings1 & Định nghĩa ràng buộc dữ liệu Định nghĩa trigger Tạo View trigger_insert_update_bookings2 Truy cập cạnh tranh test=# INSERT INTO bookings VALUES (3, 3, '1999-04-30', 2); ERROR: A tourist of the ecologiste type only books the hotel in a city having less 1000 populations test=# INSERT INTO bookings VALUES (2, 3, '1999-04-30', 2); ERROR: A tourist of the intellectuel type only books the hotel in a city having at least one museum 40
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa trigger Tạo View Truy cập cạnh tranh 41
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa View Định nghĩa trigger Tạo View Truy cập cạnh tranh Cú pháp: CREATE VIEW view_name AS SELECT query Từ ver. 9.2 trở về trước postgres không cho phép insert, update, delete trên view. Cần kết hợp với CREATE RULE để thực hiện insert, update, delete Nhưng từ ver. 9.3 postgres cho phép insert, update, delete trên view đơn giản (không có mệnh đề WITH, DISTINCT, GROUP BY, HAVING, LIMIT, OFFSET, UNION, INTERSECT, EXCEPT, etc.) 42
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ Định nghĩa trigger Tạo View Truy cập cạnh tranh 43
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ Định nghĩa trigger Tạo View Truy cập cạnh tranh 44
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ Định nghĩa trigger Tạo View Truy cập cạnh tranh 45
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Ví dụ Định nghĩa trigger Tạo View Truy cập cạnh tranh 46
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Định nghĩa trigger Tạo View Truy cập cạnh tranh 47
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Truy cập cạnh tranh Định nghĩa trigger Tạo View Truy cập cạnh tranh Nhiều người dùng chia sẻ cơ sở dữ liệu Cập nhật, truy vấn đồng thời Làm thế nào để đảm bảo được tính nhất quán của dữ liệu từ phía các người dùng ? Khái niệm giao dịch (TRANSACTION) ACID (Atomic, Consistent, Isolated, Durable) MVCC (MultiVersion Concurrency Control) BEGIN, ABORD, END, COMMIT, ROLLBACK, SAVEPOINT, CHECKPOINT, SET TRANSACTION, START TRANSACTION, SET CONSTRAINTS, LOCK 48
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Truy cập cạnh tranh Định nghĩa trigger Tạo View Truy cập cạnh tranh Tính nguyên tử Giao dịch kết thúc làm « all-or-nothing » trên cơ sở dữ liệu Giao dịch bắt đầu bằng BEGIN Lệnh trong giao dịch chỉ được thực hiện khi gặp « COMMIT » Lệnh trong giao dịch sẽ bị hủy bỏ khi gặp « ROLLBACK » Mọi câu SQL đều nên thực thi trong một giao dịch 49
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Truy cập cạnh tranh Định nghĩa trigger Tạo View Truy cập cạnh tranh Tính nguyên tử Một giao dịch nhóm nhiều phép toán thành phép toán nguyên tử Kết quả của giao dịch là « all-or-nothing » 50
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Truy cập cạnh tranh Định nghĩa trigger Tạo View Truy cập cạnh tranh Tính cô lập Có 4 mức độ cô lập: SERIALIZABLE, REPEATABLE READ, READ COMMITTED, READ UNCOMMITTED 3 hiện tượng thường gặp: dirty read, nonrepeatable read, phantom read 51
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Truy cập cạnh tranh Định nghĩa trigger Tạo View Truy cập cạnh tranh Tính cô lập Mặc định PostgreSQL sử dụng READ COMMITTED 52
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Truy cập cạnh tranh Định nghĩa trigger Tạo View Truy cập cạnh tranh Tính cô lập: READ COMMITTED => nonrepeatable read 53
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Truy cập cạnh tranh Định nghĩa trigger Tạo View Truy cập cạnh tranh Tính cô lập Sử dụng SERIALIZABLE Cho phép chỉ thấy dữ liệu đã được committed trước thời điểm bắt đầu của giao dịch Cho phép thấy sự thay đổi bởi các lệnh trước đó trong cùng giao dịch mặc dù chưa được committed 54
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Truy cập cạnh tranh Định nghĩa trigger Tạo View Truy cập cạnh tranh Công cụ LOCK Sử dụng LOCK tường minh hay SELECT FOR UPDATE 55
- Kế thừa Định nghĩa kiểu Định nghĩa hàm Định nghĩa ràng buộc dữ liệu Savepoints Định nghĩa trigger Tạo View Truy cập cạnh tranh Đánh dấu bên trong một giao dịch Giúp cho việc hủy bỏ những phép toán từ vị trí Savepoint đến lệnh Rollback trong một giao dịch Một giao dịch có thể có nhiều Savepoints 56