Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 77 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
77
Dung lượng
1,9 MB
Nội dung
Chương 1: TỔNG QUAN VỀ SQL Ngơn ngữ hỏi có cấu trúc (SQL) hệ quản trị sở liệu quan hệ tảng kỹ thuật quan trọng cơng nghiệp máy tính Cho đến nay, nói SQL xem ngôn ngữ chuẩn sở liệu Các hệ quản trị sở liệu quan hệ thương mại có Oracle, SQL Server, Informix, DB2, chọn SQL làm ngôn ngữ cho sản phẩm Vậy thực SQL gì? Tại lại quan trọng hệ quản trị sở liệu? SQL làm nào? Nó sử dụng hệ quản trị sở liệu quan hệ? Nội dung chương cung cấp cho nhìn tổng quan SQL số vấn đề liên quan 1.1 SQL ngôn ngữ sở liệu quan hệ SQL, viết tắt Structured Query Language (ngơn ngữ hỏi có cấu trúc), cơng cụ sử dụng để tổ chức, quản lý truy xuất liệu đuợc lưu trữ sở liệu SQL hệ thống ngôn ngữ bao gồm tập câu lệnh sử dụng để tương tác với sở liệu quan hệ Tên gọi ngôn ngữ hỏi có cấu trúc phần làm liên tưởng đến công cụ (ngôn ngữ) dùng để truy xuất liệu sở liệu Thực mà nói, khả SQL vượt xa so với công cụ truy xuất liệu, mục đích ban đầu SQL xây dựng nên truy xuất liệu chức quan trọng SQL sử dụng để điều khiển tất chức mà hệ quản trị sở liệu cung cấp cho người dùng bao gồm: Định nghĩa liệu: SQL cung cấp khả định nghĩa sở liệu, cấu trúc lưu trữ tổ chức liệu mối quan hệ thành phần liệu Truy xuất thao tác liệu: Với SQL, người dùng dễ dàng thực thao tác truy xuất, bổ sung, cập nhật loại bỏ liệu sở liệu Điều khiển truy cập: SQL sử dụng để cấp phát kiểm soát thao tác người sử dụng liệu, đảm bảo an toàn cho sở liệu Đảm bảo toàn vẹn liệu: SQL định nghĩa ràng buộc tồn vẹn sở liệu nhờ đảm bảo tính hợp lệ xác liệu trước thao tác cập nhật lỗi hệ thống Như vậy, nói SQL ngơn ngữ hồn thiện sử dụng hệ thống sở liệu thành phần thiếu hệ quản trị sở liệu Mặc dù SQL ngơn ngữ lập trình C, C++, Java, song câu lệnh mà SQL cung cấp nhúng vào ngơn ngữ lập trình nhằm xây dựng ứng dụng tương tác với sở liệu Khác với ngơn ngữ lập trình quen thuộc C, C++, Java, SQL ngôn ngữ có tính khai báo Với SQL, người dùng cần mô tả yêu cầu cần phải thực sở liệu mà không cần phải cách thức thực yêu cầu Chính vậy, SQL ngơn ngữ dễ tiếp cận dễ sử dụng 1.2 Vai trò SQL Bản thân SQL hệ quản trị sở liệu, khơng thể tồn độc lập SQL thực phần hệ quản trị sở liệu, xuất hệ quản trị sở liệu với vai trò ngôn ngữ công cụ giao tiếp người sử dụng hệ quản trị sở liệu Trong hầu hết hệ quản trị sở liệu quan hệ, SQL có vai trò sau: SQL ngơn ngữ hỏi có tính tương tác: Người sử dụng dễ dàng thơng qua trình tiện ích để gởi yêu cầu dạng câu lệnh SQL đến sở liệu nhận kết trả từ sở liệu SQL ngơn ngữ lập trình sở liệu: Các lập trình viên nhúng câu lệnh SQL vào ngơn ngữ lập trình để xây dựng nên chương trình ứng dụng giao tiếp với sở liệu SQL ngôn ngữ quản trị sở liệu: Thông qua SQL, người quản trị sở liệu quản lý sở liệu, định nghĩa cấu trúc lưu trữ liệu, điều khiển truy cập sở liệu, SQL ngôn ngữ cho hệ thống khách/chủ (client/server): Trong hệ thống sở liệu khách/chủ, SQL sử dụng công cụ để giao tiếp trình ứng dụng phía máy khách với máy chủ sở liệu SQL ngôn ngữ truy cập liệu Internet: Cho đến nay, hầu hết máy chủ Web máy chủ Internet sử dụng SQL với vai trò ngơn ngữ để tương tác với liệu sở liệu SQL ngôn ngữ sở liệu phân tán: Đối với hệ quản trị sở liệu phân tán, hệ thống sử dụng SQL để giao tiếp với hệ thống khác mạng, gửi nhận yêu cầu truy xuất liệu với SQL ngôn ngữ sử dụng cho cổng giao tiếp sở liệu: Trong hệ thống mạng máy tính với nhiều hệ quản trị sở liệu khác nhau, SQL thường sử dụng chuẩn ngôn ngữ để giao tiếp hệ quản trị sở liệu 1.3 Tổng quan sở liệu quan hệ 1.3.1 Mơ hình liệu quan hệ Mơ hình liệu quan hệ Codd đề xuất năm 1970 đến trở thành mơ hình sử dụng phổ biến hệ quản trị sở liệu thương mại Nói cách đơn giản, sở liệu quan hệ sở liệu tất liệu tổ chức bảng có mối quan hệ với Mỗi bảng bao gồm dòng cột: dòng gọi ghi (bộ) cột trường (thuộc tính) 1.3.2 Bảng (Table) Như nói trên, sở liệu quan hệ, bảng đối tượng sử dụng để tổ chức lưu trữ liệu Một sở liệu bao gồm nhiều bảng bảng xác định tên bảng Một bảng bao gồm tập dòng cột: dòng bảng biểu diễn cho thực thể Tên bảng: sử dụng để xác định bảng sở liệu Cấu trúc bảng: Tập cột bảng Mỗi cột bảng xác định tên cột phải có kiểu liệu Kiểu liệu cột qui định giá trị liệu chấp nhận cột Dữ liệu bảng: Tập dòng (bản ghi) có bảng 1.3.3 Khoá bảng Trong sở liệu thiết kế tốt, bảng phải có một tập cột mà giá trị liệu xác định dòng tập dòng bảng Tập nhiều cột có tính chất gọi khố bảng Việc chọn khố bảng có vai trò quan trọng việc thiết kế cài đặt sở liệu quan hệ Các dòng liệu bảng phải có giá trị khác khố Một bảng có nhiều tập cột khác có tính chất khố (tức giá trị xác định dòng liệu bảng) Trong trường hợp này, khoá chọn cho bảng gọi khố (primary key) khố lại gọi khố phụ khố dự tuyển (candidate key/unique key) 1.3.4 Mối quan hệ khố ngồi Các bảng sở liệu khơng tồn độc lập mà có mối quan hệ mật thiết với mặt liệu Mối quan hệ thể thông qua ràng buộc giá trị liệu xuất bảng phải có xuất trước bảng khác Mối quan hệ bảng sở liệu nhằm đàm bảo tính đắn hợp lệ liệu sở liệu Trong hình 1.1, hai bảng LOP KHOA có mối quan hệ với Mối quan hệ đòi hỏi giá trị cột MAKHOA dòng (tức lớp) bảng LOP phải xác định từ cột MAKHOA bảng KHOA Hình 1.1: Mối quan hệ hai bảng LOP KHOA sở liệu Mối quan hệ bảng sở liệu thể mối quan hệ thực thể giới thực Trong hình 1.3, mối quan hệ hai bảng LOP KHOA không cho phép lớp tồn mà lại thuộc vào khoa khơng có thật Khái niệm khố ngồi (Foreign Key) sở liệu quan hệ sử dụng để biểu diễn mối quan hệ bảng liệu Một hay tập cột bảng mà giá trị xác định từ khóa bảng khác gọi khố ngồi Trong hình 1.1, cột MAKHOA bảng LOP gọi khố ngồi bảng này, khố ngồi tham chiếu đến khố bảng KHOA cột MAKHOA 1.4 Sơ lược SQL 1.4.1 Câu lệnh SQLSQL chuẩn bao gồm khoảng 40 câu lệnh Bảng 1.1 liệt kê danh sách câu lệnh thường sử dụng số câu lệnh SQL Trong hệ quản trị sở liệu khác nhau, câu lệnh có dạng mục đích sử dụng song hệ quản trị sở liệu có số thay đổi Điều đơi dẫn đến cú pháp chi tiết câu lệnh khác hệ quản trị cơ sở liệu khác Câu lệnh Thao tác liệu SELECT INSERT UPDATE DELETE TRUNCATE Định nghĩa liệu CREATE TABLE DROP TABLE ALTER TABLE CREATE VIEW ALTER VIEW DROP VIEW CREATE INDEX DROP INDEX CREATE SCHEMA DROP SCHEMA CREATE PROCEDURE ALTER PROCEDURE DROP PROCEDURE CREATE FUNCTION ALTER FUNCTION DROP FUNCTION CREATE TRIGGER ALTER TRIGGER DROP TRIGGER Điều khiển truy cập GRANT REVOKE Quản lý giao tác COMMIT ROLLBACK SAVE TRANSACTION Lập trình DECLARE OPEN FETCH CLOSE EXECUTE Chức Truy xuất liệu Bổ sung liệu Cập nhật liệu Xóa liệu Xố tồn liệu bảng Tạo bảng Xóa bảng Sửa đổi bảng Tạo khung nhìn Sửa đổi khung nhìn Xố khung nhìn Tạo mục Xoá mục Tạo lược đồ sở liệu Xoá lược đồ sở liệu Tạo thủ tục lưu trữ Sửa đổi thủ tục lưư trữ Xoá thủ tục lưu trữ Tạo hàm (do người sử dụng định nghĩa) Sửa đổi hàm Xoá hàm Tạo trigger Sửa đổi trigger Xoá trigger Cấp phát quyền cho người sử dụng Thu hồi quyền từ người sử dụng Uỷ thác (kết thúc thành công) giao tác Quay lui giao tác Đánh dấu điểm giao tác Khai báo biến định nghĩa trỏ Mở trỏ để truy xuất kết truy vấn Đọc dòng kết truy vấn (sử dụng trỏ) Đóng trỏ Thực thi câu lệnh SQL Các câu lệnh SQL bắt đầu từ lệnh, từ khoá cho biết chức câu lệnh (chẳng hạn SELECT, DELETE, COMMIT) Sau từ lệnh mệnh đề câu lệnh Mỗi mệnh đề câu lệnh bắt đầu từ khố (chẳng hạn FROM, WHERE, ) Ví dụ 1.1: Câu lệnh: dùng để truy xuất liệu bảng SINHVIEN bắt đầu từ lệnh SELECT, câu lệnh bao gồm hai mệnh đề: mệnh đề FROM định tên bảng cần truy xuất liệu mệnh đề WHERE định điều kiện truy vấn liệu SELECT masv,hodem,ten FROM sinhvien WHERE malop=’C24102’ 1.4.2 Qui tắc sử dụng tên SQL Các đối tượng sở liệu dựa SQL xác định thông qua tên đối tượng Tên đối tượng sở liệu Tên sử dụng nhiều truy vấn SQL xem tảng sở liệu quan hệ tên bảng tên cột Trong sở liệu lớn với nhiều người sử dụng, ta định tên bảng câu lệnh SQL, hệ quản trị sở liệu hiểu tên bảng ta sở hữu (tức bảng ta tạo ra) Thông thường, hệ quản trị sở liệu cho phép người dùng khác tạo bảng trùng tên với mà không gây xung đột tên Nếu câu lệnh SQL ta cần đến bảng người dùng khác sở hữu (hiển nhiên phải phép) tên bảng phải viết sau tên người sở hữu phân cách với tên người sở hữu dấu chấm: tên_người_sở_hữu.tên_bảng Một số đối tượng sở liệu khác (như khung nhìn, thủ tục, hàm), việc sử dụng tên tương tự bảng Ta sử dụng tên cột cách bình thường câu lệnh SQL cảch cần định tên cột bảng Tuy nhiên, câu lệnh có liên quan đến hai cột trở lên có tên bảng khác bắt buộc phải định thêm tên bảng trước tên cột; tên bảng tên cột phân cách dấu chấm Ví dụ: Ví dụ minh hoạ cho ta thấy việc sử dụng tên bảng tên cột câu lệnh SQL SELECT masv,hodem,ten,sinhvien.malop,tenlop FROM dbo.sinhvien,dbo.lop WHERE sinhvien.malop = lop.malop 1.4.3 Kiểu liệu Chuẩn ANSI/ISO SQL cung cấp kiểu liệu khác để sử dụng sở liệu dựa SQL ngôn ngữ SQL Dựa sở kiểu liệu chuẩn ANSI/ISO SQL cung cấp, hệ quản trị sở liệu thương mại sử dụng dạng liệu khác sản phẩm Bảng liệt kê số kiểu liệu thông dụng sử dụng SQL Tên kiểu CHAR (n) NCHAR (n) VARCHAR (n) NVARCHAR (n) INTEGER INT TINYTINT SMALLINT BIGINT NUMERIC (p,s) DECIMAL (p,s) FLOAT REAL MONEY BIT DATETIME SMALLDATETIME BINARY VARBINARY IMAGE TEXT NTEXT Mô tả Kiểu chuỗi với độ dài cố định Kiếu chuỗi với độ dài cố định hỗ trợ UNICODE Kiểu chuỗi với độ dài xác Kiểu chuỗi với độ dài xác hỗ trợ UNICODE Số nguyên có giá trị từ -2 đến - Như kiểu Integer Số nguyên có giá trị từ đến 255 31 31 Số nguyên có giá trị từ -2 đến – Số nguyên có giá trị từ - đến -1 15 63 15 63 Kiểu số với độ xác cố định Tương tự kiểu Numeric Số thực có giá trị từ -1.79E+308 đến 1.79E+308 Số thực có giá trị từ -3.40E + 38 đến 3.40E + 38 Kiểu tiền tệ Kiểu bit (có giá trị 1) Kiểu ngày (chính xác đến phần trăm giây) Kiểu ngày (chính xác đến phút) Dữ liệu nhị phân với độ dài cố định (tối đa 8000 bytes) Dữ liệu nhị phân với độ dài xác (tối đa 8000 bytes) Dữ liệu nhị phân với độ dài xác (tối đa 2,147,483,647 bytes) Dữ liệu kiếu chuỗi với độ dài lớn (tối đa 2,147,483,647 ký tự) Dữ liệu kiếu chuỗi với độ dài lớn hỗ trợ UNICODE (tối đa 1,073,741,823 ký tự) Ví dụ 1.2: Câu lệnh định nghĩa bảng với kiểu liệu qui định cho cột bảng CREATE TABLE NHANVIEN (MANV NVARCHAR(10)NOT NULL, HOTEN NVARCHAR(30)NOT NULL, GIOITINH BIT, NGAYSINH SMALLDATETIME, NOISINH NCHAR(50), HSLUONG DECIMAL(4,2), MADV INT) 1.4.4 Giá trị NULL Một sở liệu phản ánh hệ thống giới thực, giá trị liệu tồn sở liệu khơng xác định Một giá trị không xác định xuất sở liệu số nguyên nhân sau: Giá trị có tồn khơng biết Khơng xác định giá trị có tồn hay khơng Tại thời điểm giá trị chưa có có Giá trị bị lỗi tính tốn (tràn số, chia cho không, ) Những giá trị không xác định biểu diễn sở liệu quan hệ giá trị NULL Đây giá trị đặc biệt không nên nhầm lẫn với chuỗi rỗng (đối với liệu kiểu chuỗi) hay giá trị không (đối với giá trị kiểu số) Giá trị NULL đóng vai trò quan trọng sở liệu hầu hết hệ quản trị sở liệu quan hệ hỗ trợ việc sử dụng giá trị 1.5 Kết chương Như vậy, SQL (viết tắt Structured Query Language) hệ thống ngôn ngữ sử dụng cho hệ quản trị sở liệu quan hệ Thơng qua SQL thực thao tác sở liệu định nghĩa liệu, thao tác liệu, điều khiển truy cập, quản lý toàn vẹn liệu SQL thành phần quan trọng thiếu hệ quản trị sở liệu quan hệ SQL đời nhằm sử dụng cho sở liệu theo mơ hình quan hệ Trong sở liệu quan hệ, liệu tổ chức lưu trữ bảng Mỗi bảng tập hợp bao gồm dòng cột; dòng ghi cột tương ứng với trường, tập tên cột với kiểu liệu tính chất khác tạo nên cấu trúc bảng, tập dòng bảng liệu bảng Các bảng sở liệu có mối quan hệ với Các mối quan hệ biểu diễn thơng qua khố khố ngồi bảng Khố bảng tập nhiều cột có giá trị bảng giá trị xác định dòng liệu bảng Một khố ngồi tập nhiều cột có giá trị xác định từ khố bảng khác Chương NGÔN NGỮ THAO TÁC DỮ LIỆU Đối với đa số người sử dụng, SQL xem công cụ hữu hiệu để thực yêu cầu truy vấn thao tác liệu Trong chương này, ta bàn luận đến nhóm câu lệnh SQL sử dụng cho mục đích Nhóm câu lệnh gọi chung ngôn ngữ thao tác liệu (DML: Data Manipulation Language)bao gồm câu lệnh sau: SELECT: Sử dụng để truy xuất liệu từ môt nhiều bảng INSERT: Bổ sung liệu UPDATE: Cập nhật liệu DELETE: Xố liệu Trong số câu lệnh này, nói SELECT câu lệnh tương đối phức tạp sử dụng nhiều sở liệu Với câu lệnh này, ta không thực yêu cầu truy xuất liệu đơn mà thực yêu cầu thống kê liệu phức tạp Cũng vậy, phần đầu chương tập trung tương đối nhiều đến câu lệnh SELECT Các câu lệnh INSERT, UPDATE DELETE bàn luận đến cuối chương 2.1 Truy xuất liệu với câu lệnh SELECT Câu lệnh SELECT sử dụng để truy xuất liệu từ dòng cột hay nhiều bảng, khung nhìn Câu lệnh dùng để thực phép chọn (tức truy xuất tập dòng hay nhiều bảng), phép chiếu (tức truy xuất tập cột hay nhiều bảng) phép nối (tức liên kết dòng hai hay nhiều bảng để truy xuất liệu) Ngồi ra, câu lệnh cung cấp khả thực thao tác truy vấn thống kê liệu phức tạp khác Cú pháp chung câu lệnh SELECT có dạng: SELECT [ALL | DISTINCT][TOP n] danh_sách_chọn [INTO tên_bảng_mới] FROM danh_sách_bảng/khung_nhìn [WHEREđiều_kiện] [GROUP BY danh_sách_cột] [HAVING điều_kiện] 10 Ràng buộc FOREIGN KEY định nghĩa theo cú pháp đây: [CONSTRAINT tên_ràng_buộc] FOREIGN KEY [(danh_sách_cột)] REFERENCES tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu) [ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT] [ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT] Việc định nghĩa ràng buộc FOREIGN KEY bao gồm yếu tố sau: Tên cột danh sách cột bảng định nghĩa tham gia vào khố ngồi Tên bảng tham chiếu khố ngồi danh sách cột tham chiếu đến bảng tham chiếu Cách thức xử lý ghi bảng định nghĩa trường hợp ghi tham chiếu bảng tham chiếu bị xoá (ON DELETE) hay cập nhật (ON UPDATE) SQL chuẩn đưa cách xử lý: CASCADE: Tự động xoá (cập nhật) ghi tham chiếu bị xoá (cập nhật) NO ACTION: (Mặc định) Nếu ghi bảng tham chiếu tham chiếu ghi bảng định nghĩa bàn ghi khơng phép xoá cập nhật (đối với cột tham chiếu) SET NULL: Cập nhật lại khố ngồi ghi thành giá trị NULL (nếu cột cho phép nhận giá trị NULL) SET DEFAULT: Cập nhật lại khoá ghi nhận giá trị mặc định (nếu cột có qui định giá trị mặc định) Ví dụ 3.8: Câu lệnh định nghĩa bảng DIEMTHI với hai khố ngồi cột MASV cột MAMONHOC (giả sử hai bảng SINHVIEN MONHOC định nghĩa) CREATE TABLE diemthi ( mamonhoc NVARCHAR(10) NOT NULL , masv NVARCHAR(10) NOT NULL , diemlan1 NUMERIC(4, 2), diemlan2 NUMERIC(4, 2), CONSTRAINT pk_diemthi PRIMARY KEY(mamonhoc,masv), CONSTRAINT fk_diemthi_mamonhoc 63 FOREIGN KEY(mamonhoc) REFERENCES monhoc(mamonhoc) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT fk_diemthi_masv FOREIGN KEY(masv) REFERENCES sinhvien(masv) ON DELETE CASCADE ON UPDATE CASCADE ) Lưu ý: Cột tham chiếu bảng tham chiếu phải khố (hoặc khố phụ) Cột tham chiếu phải có kiểu liệu độ dài với cột tương ứng khóa ngồi Bảng tham chiếu phải định nghĩa trước Do đó, bảng có mối quan hệ vòng, ta khơng thểđịnh nghĩa ràng buộc FOREIGN KEY câu lệnh CREATE TABLE mà phải định nghĩa thông qua lệnh ALTER TABLE 3.2 Sửa đổi định nghĩa bảng Một bảng sau định nghĩa câu lệnh CREATE TABLE sửa đổi thơng qua câu lệnh ALTER TABLE Câu lệnh cho phép thực thao tác sau: Bổ sung cột vào bảng Xoá cột khỏi bảng Thay đổi định nghĩa cột bảng Xoá bỏ bổ sung ràng buộc cho bảng Cú pháp câu lệnh ALTER TABLE sau: ALTER TABLE ADD tên_bảng định_nghĩa_cột | ALTER COLUMN tên_cột kiểu_dữ_liêu [NULL | NOT NULL] | DROP COLUMN tên_cột | ADD CONSTRAINT tên_ràng_buộc định_nghĩa_ràng_buộc | DROP CONSTRAINT tên_ràng_buộc 64 Ví dụ 3.9: Các ví dụ minh hoạ cho ta cách sử dụng câu lệnh ALTER TABLE trường hợp Giả sử ta có hai bảng DONVI NHANVIEN với định nghĩa sau: CREATE TABLE donvi ( madv INT NOT NULL PRIMARY KEY, tendv NVARCHAR(30) NOT NULL ) CREATE TABLE nhanvien ( manv NVARCHAR(10) NOT NULL, hoten NVARCHAR(30) NOT NULL, ngaysinh DATETIME, diachi CHAR(30) NOT NULL ) Bổ sung vào bảng NHANVIEN cột DIENTHOAI với ràng buộc CHECK nhằm qui định điện thoại nhân viên chuỗi chữ số: ALTER TABLE nhanvien ADD dienthoai NVARCHAR(6) CONSTRAINT chk_nhanvien_dienthoai CHECK (dienthoai LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]') Bổ sung thêm cột MADV vào bảng NHANVIEN: ALTER TABLE nhanvien ADD madv INT NULL Định nghĩa lại kiểu liệu cột DIACHI bảng NHANVIEN cho phép cột chấp nhận giá trị NULL: ALTER TABLE nhanvien ALTER COLUMN diachi NVARCHAR(100) NULL Xoá cột ngày sinh khỏi bảng NHANVIEN: ALTER TABLE nhanvien 65 DROP COLUMN ngaysinh Định nghĩa khố (ràng buộc PRIMARY KEY) cho bảng NHANVIEN cột MANV: ALTER TABLE nhanvien ADD CONSTRAINT pk_nhanvien PRIMARY KEY(manv) Định nghĩa khố ngồi cho bảng NHANVIEN cột MADV tham chiếu đến cột MADV bảng DONVI: ALTER TABLE nhanvien ADD CONSTRAINT fk_nhanvien_madv FOREIGN KEY(madv) REFERENCES donvi(madv) ON DELETE CASCADE ON UPDATE CASCADE Xoá bỏ ràng buộc kiểm tra số điện thoại nhân viên ALTER TABLE nhanvien DROP CONSTRAINT CHK_NHANVIEN_DIENTHOAI Lưu ý: Nếu bổ sung thêm cột vào bảng bảng có ghi cột cần bổ sung phải cho phép chấp nhận giá trị NULL phải có giá trị mặc định Muốn xoá cột ràng buộc ràng buộc tham chiếu khố ngồi, ta phải xố ràng buộc khố ngồi trước cho cột khơng ràng buộc khơng tham chiếu khố ngồi Nếu bổ sung thêm ràng buộc cho bảng có liệu ràng buộc cần bổ sung không thoả mãn ghi có bảng câu lệnh ALTER TABLE khơng thực 3.3 Xố bảng Khi bảng khơng cần thiết , ta xố khỏi sở liệu câu lệnh DROP TABLE Câu lệnh đồng thời xoá tất ràng buộc, mục, trigger liên quan đến bảng 66 Câu lệnh có cú pháp sau: DROP TABLE tên_bảng Trong hệ quản trị sở liệu, xoá bảng lệnh DROP TABLE, ta khôi phục lại bảng liệu Do đó, cần phải cẩn thận sử dụng câu lệnh Câu lệnh DROP TABLE thực bảng cần xoá tham chiếu ràng buộc FOREIGN KEY Trong trường hợp này, ràng buộc FOREIGN KEY tham chiếu bảng tham chiếu đến bảng cần xoá phải xoá trước Khi bảng bị xoá, tất ràng buộc, mục trigger liên quan đến bảng đồng thời bị xóa theo Do đó, ta tạo lại bảng phải tạo lại đối tượng Ví dụ 3.10: Giả sử cột MADV bảng DONVI tham chiếu khố ngồi fk_nhanvien_madv bảng NHANVIEN Để xố bảng DONVI khỏi sở liệu, ta thực hai câu lệnh sau: Xoá bỏ ràng buộc fk_nhanvien_madv khỏi bảng NHANVIEN: ALTER TABLE nhanvien DROP CONSTRAINT fk_nhanvien_madv Xoá bảng DONVI: DROP TABLE donvi 3.4 Khung nhìn Các bảng sở liệu đóng vai trò đối tượng tổ chức lưu trữ liệu Như vậy, ta quan sát liệu sở liệu cách thực truy vấn bảng liệu Ngồi ra, SQL cho phép quan sát liệu thông qua việc định nghĩa khung nhìn Một khung nhìn (view) xem bảng “ảo” sở liệu có nội dung định nghĩa thơng qua truy vấn (câu lệnh SELECT) Như vậy, khung nhìn trơng giống bảng với tên khung nhìn tập bao gồm dòng cột Điểm khác biệt khung nhìn bảng khung nhìn khơng xem cấu trúc lưu trữ liệu tồn sở liệu Thực chất liệu quan sát khung nhìn lấy từ bảng thơng qua câu lệnh truy vấn liệu Hình 3.3 minh hoạ cho ta thấy khung nhìn có tên DSSV định nghĩa thông qua câu lệnh SELECT truy vấn liệu hai bảng SINHVIEN LOP: 67 SELECT masv,hodem,ten, DATEDIFF(YY,ngaysinh,GETDATE()) AS tuoi,tenlop FROM sinhvien,lop WHERE sinhvien.malop=lop.malop Hình 3.3 Khung nhìn DSSV với liệu lấy từ bảng SINHVIEN LOP Khi khung nhìn DSSV định nghĩa, ta sử dụng câu lệnh SELECT để truy vấn liệu từ khung nhìn bảng Khi câu truy vấn xuất khung nhìn, hệ quản trị sở liệu dựa vào đinh nghĩa khung nhìn để chuyển yêu cầu truy vấn liệu liên quan đến khung nhìn thành yêu cầu tương tự bảng sở việc truy vấn liệu thực yêu cầu tương đương bảng Việc sử dụng khung nhìn sở liệu đem lại lợi ích sau đây: Bảo mật liệu: Người sử dụng cấp phát quyền khung nhìn với phần liệu mà người sử dụng phép Điều hạn chế phần việc người sử dụng truy cập trực tiếp liệu Đơn giản hoá thao tác truy vấn liệu: Một khung nhìn đóng vai trò đối tượng tập hợp liệu từ nhiều bảng khác vào “bảng” Nhờ 68 vào đó, người sử dụng thực yêu cầu truy vấn liệu cách đơn giản từ khung nhìn thay phải đưa câu truy vấn phức tạp Tập trung đơn giản hồ liệu: Thơng qua khung nhìn ta cung cấp cho người sử dụng cấu trúc đơn giản, dễ hiểu liệu sở liệu đồng thời giúp cho người sử dụng tập trung phần liệu cần thiết Độc lập liệu: Một khung nhìn cho phép người sử dụng có nhìn liệu độc lập với cấu trúc bảng sở liệu cho dù bảng sở có bị thay đổi phần cấu trúc Tuy nhiên, việc sử dụng khung nhìn tồn số nhược điểm sau: Do hệ quản trị sở liệu thực việc chuyển đổi truy vấn khung nhìn thành truy vấn bảng sở nên khung nhìn định nghĩa truy vấn phức tạp dẫn đến chi phí mặt thời gian thực truy vấn liên quan đến khung nhìn lớn Mặc dù thơng qua khung nhìn thực thao tác bổ sung cập nhật liệu cho bảng sở hạn chế khung nhìn đơn giản Đối với khung nhìn phức tạp thường khơng thực được; hay nói cách khác liệu khung nhìn đọc 3.4.1 Tạo khung nhìn Câu lệnh CREATE VIEW sử dụng để tạo khung nhìn có cú pháp sau: CREATE VIEW tên_khung_nhìn[(danh_sách_tên_cột)] AS câu_lệnh_SELECT Ví dụ 3.11: Câu lệnh tạo khung nhìn có tên DSSV từ câu lệnh SELECT truy vấn liệu từ hai bảng SINHVIEN LOP CREATE VIEW dssv AS SELECT masv,hodem,ten, DATEDIFF(YY,ngaysinh,GETDATE()) AS tuoi,tenlop FROM sinhvien,lop WHERE sinhvien.malop=lop.malop thực câu lệnh: SELECT * FROM dssv 69 ta có kết sau: Nếu câu lệnh CREATE VIEW, ta không định danh sách tên cột cho khung nhìn, tên cột khung nhìn tiêu đề cột kết câu lệnh SELECT Trong trường hợp tên cột khung nhìn đươc định, chúng phải có số lượng với số lượng cột kết câu truy vấn Ví dụ 3.12: Câu lệnh tạo khung nhìn từ câu truy vấn tương tự ví dụ có đặt tên cho cột khung nhìn: CREATE VIEW dssv(ma,ho,ten,tuoi,lop) AS SELECT masv,hodem,ten, DATEDIFF(YY,ngaysinh,GETDATE()),tenlop FROM sinhvien,lop WHERE sinhvien.malop=lop.malop câu lệnh: SELECT * FROM dssv 70 Khi tạo khung nhìn với câu lệnh CREATE VIEW, ta cần phải lưu ý số nguyên tắc sau: Tên khung nhìn tên cột khung nhìn, giống bảng, phải tuân theo qui tắc định danh Không thể qui định ràng buộc tạo mục cho khung nhìn Câu lệnh SELECT với mệnh đề COMPUTE BY không sử dụng để định nghĩa khung nhìn Phải đặt tên cho cột khung nhìn trường hợp sau đây: Trong kết câu lệnh SELECT có cột sinh biểu thức (tức là tên cột bảng sở) cột khơng đặt tiêu đề Tồn hai cột kết câu lệnh SELECT có tiêu đề cột Ví dụ 3.13: Câu lệnh câu lệnh sai cột thứ không xác định tên cột CREATE VIEW tuoisinhvien AS SELECT masv,hodem,ten,DATEDIFF(YY,ngaysinh,GETDATE()) FROM sinhvien 3.4.2 Cập nhật, bổ sung xố liệu thơng qua khung nhìn Đối với số khung nhìn, ta tiến hành thực thao tác cập nhập, bổ sung xoá liệu Thực chất, thao tác chuyển thành thao tác tương tự bảng sở có tác động đến bảng sở Về mặt lý thuyết, để thực thao tác bổ sung, cập nhật xố, khung nhìn trước tiên phải thoả mãn điều kiện sau đây: Trong câu lệnh SELECT định nghĩa khung nhìn khơng sử dụng từ khố DISTINCT, TOP, GROUP BY UNION Các thành phần xuất danh sách chọn câu lệnh SELECT phải cột bảng sở Trong danh sách chọn khơng chứa biểu thức tính tốn, hàm gộp Ngoài điều kiện trên, thao tác thay đổi đến liệu thơng qua khung nhìn phải đảm bảo thoả mãn ràng buộc bảng sở, tức đảm bảo tính tồn vẹn liệu Ví dụ minh hoạ cho ta thấy việc thực thao tác bổ sung, cập nhật xố liệu thơng qua khung nhìn Ví dụ 3.14: Xét định nghĩa hai bảng DONVI NHANVIEN sau: 71 CREATE TABLE donvi ( madv INT PRIMARY KEY, endv NVARCHAR(30) NOT NULL, dienthoai NVARCHAR(10) NULL, ) CREATE TABLE nhanvien ( manv NVARCHAR(10) PRIMARY KEY, hoten NVARCHAR(30) ngaysinh NOT NULL, DATETIME diachi NVARCHAR(50) NULL, NULL, madv INT FOREIGN KEY ON DELETE CASCADE ON UPDATE CASCADE REFERENCES donvi(madv) ) Giả sử hai bảng có liệu sau: Bảng DONVI Bảng NHANVIEN Câu lệnh định nghĩa khung nhìn NV1 cung cấp thông tin mã nhân viên, họ tên mã đơn vị nhân viên làm việc: 72 CREATE VIEW nv1 AS SELECT manv,hoten,madv FROM nhanvien Nếu ta thực câu lệnh INSERT INTO nv1 VALUES('NV04','Le Thi D',1) Một ghi bổ sung vào bảng NHANVIEN liệu bảng là: Bản ghi Thơng qua khung nhìn này, ta thực thao tác cập nhật xoá liệu Chẳng hạn, ta thực câu lệnh: DELETE FROM nv1 WHERE manv='NV04' Thì ghi tương ứng với nhân viên có mã NV04 bị xố khỏi bảng NHANVIEN Nếu danh sách chọn câu lệnh SELECT có xuất biểu thức tính tốn đơn giản, thao tác bổ sung liệu thơng qua khung nhìn khơng thể thực Tuy nhiên, trường hợp thao tác cập nhật xố liệu vấn có khả thực (hiển nhiên khơng thể cập nhật liệu cột có từ biểu thức tính tốn) Ví dụ 3.15: Xét khung nhìn NV2 định nghĩa sau: CREATE VIEW nv2 AS SELECT manv,hoten,YEAR(ngaysinh) AS namsinh,madv FROM nhanvien Đối với khung nhìn NV2, ta khơng thể thực thao tác bổ sung liệu cập nhật xố liệu bảng thơng qua khung nhìn Câu lệnh thực khung nhìn NV2 INSERT INTO nv2(manv,hoten,madv) VALUES('NV05','Le Van E',1) Nhưng câu lệnh: UPDATE nv2 SET hoten='Le Thi X' WHERE manv='NV04' 73 câu lệnh DELETE FROM nv2 WHERE manv='NV04' lại thực có tác động liệu bảng NHANVIEN Trong trường hợp khung nhìn tạo từ phép nối (trong ngồi) nhiều bảng, ta thực thao tác bổ sung cập nhật liệu thao tác có tác động đến bảng sở (câu lệnh DELETE thực trường hợp này) Ví dụ 3.16: Với khung nhìn định nghĩa sau: CREATE VIEW nv3 AS SELECT manv,hoten,ngaysinh, diachi,nhanvien.madv AS noilamviec, donvi.madv, tendv, dienthoai FROM nhanvien FULL OUTER JOIN donvi ON nhanvien.madv=donvi.madv Câu lệnh: INSERT INTO nv3(manv,hoten,noilamviec) VALUES('NV05','Le Van E',1) bổ sung thêm vào bảng NHANVIEN ghi Hoặc câu lệnh: INSERT INTO nv3(madv,tendv) VALUES(3,'P Ke toan') bổ sung thêm vào bảng DONVI ghi hai câu lệnh có tác động đến bảng sở Câu lệnh thực có tác động lúc đến hai bảng sở INSERT INTO nv3(manv,hoten,noilamviec,madv,tendv) VALUES('NV05','Le Van E',1,3,'P Ke toan') 3.4.3 Sửa đổi khung nhìn Câu lệnh ALTER VIEW sử dụng để định nghĩa lại khung nhìn có không làm thay đổi quyền cấp phát cho người sử dụng trước Câu lệnh sử dụng tương tự câu lệnh CREATE VIEW có cú pháp sau: ALTER VIEW tên_khung_nhìn [(danh_sách_tên_cột)] AS Câu_lệnh_SELECT Ví dụ 3.17: Ta định nghĩa khung nhìn sau: 74 CREATE VIEW viewlop AS SELECT malop,tenlop,tenkhoa FROM lop INNER JOIN khoa ON lop.makhoa=khoa.makhoa WHERE tenkhoa='Khoa Vật lý’ định nghĩa lại khung nhìn câu lệnh: ALTER VIEW view_lop AS SELECT malop,tenlop,hedaotao FROM lop INNER JOIN khoa ON lop.makhoa=khoa.makhoa WHERE tenkhoa='Khoa Công nghệ thông tin' 3.4.4 Xố khung nhìn Khi khung nhìn khơng sử dụng, ta xố khỏi sở liệu thơng qua câu lệnh: DROP VIEW tên_khung_nhìn Nếu khung nhìn bị xố, tồn quyền cấp phát cho người sử dụng khung nhìn đồng thời bị xố Do đó, ta tạo lại khung nhìn phải tiến hành cấp phát lại quyền cho người sử dụng Ví dụ 3.18: Câu lệnh xố khung nhìn VIEW_LOP khỏi sở liệu DROP VIEW view_lop 75 Bài tập chương Sử dụng câu lệnh CREATE TABLE để tạo bảng sở liệu sơ đồ (bạn tự lựa chọn kiểu liệu cho phù hợp) Bổ sung ràng buộc thiết lập giá trị mặc định cho cột SOLUONG cho cột MUCGIAMGIA bảng CHITIETDATHANG Bổ sung cho bảng DONDATHANG ràng buộc kiểm tra ngày giao hàng ngày chuyển hàng phải sau với ngày đặt hàng Bổ sung ràng buộc cho bảng NHANVIEN để đảm bảo nhân viên làm việc công ty đủ 18 tuổi không 60 tuổi Với bảng tạo được, câu lệnh: DROP TABLE nhacungcap thực khơng? Tại sao? Cho khung nhìn định nghĩa sau: CREATE VIEW view_donhang AS 76 SELECT dondathang.sohoadon, makhachhang, manhanvien, ngaydathang, ngaygiaohang, ngaychuyenhang, noigiaohang,mahang, giaban,soluong,mucgiamgia FROM dondathang INNER JOIN chitietdathang ON dondathang.sohoadon = chitietdathang.sohoadon a Có thể thơng qua khung nhìn để bổ sung liệu cho bảng DONDATHANG khơng? b Có thể thơng qua khung nhìn để bổ sung liệu cho bảng CHITIETDATHANG không? Với khung nhìn định nghĩa sau: CREATE VIEW view_donhang AS SELECT dondathang.sohoadon, makhachhang, manhanvien, ngaydathang, ngaygiaohang, ngaychuyenhang, noigiaohang, mahang, giaban * soluong as thanhtien, mucgiamgia FROM dondathang INNER JOIN chitietdathang ON dondathang.sohoadon = chitietdathang.sohoadon a Có thể thơng qua khung nhìn để xố hay cập nhật liệu bảng DONDATHANG khơng? b Có thể thơng qua khung nhìn để cập nhật liệu bảng CHITIETDATHANG không? 77 ... SQL ngôn ngữ có tính khai báo Với SQL, người dùng cần mô tả yêu cầu cần phải thực sở liệu mà không cần phải cách thức thực yêu cầu Chính vậy, SQL ngơn ngữ dễ tiếp cận dễ sử dụng 1.2 Vai trò SQL. .. quan hệ, SQL có vai trò sau: SQL ngơn ngữ hỏi có tính tương tác: Người sử dụng dễ dàng thơng qua trình tiện ích để gởi yêu cầu dạng câu lệnh SQL đến sở liệu nhận kết trả từ sở liệu SQL ngơn ngữ... khố bảng KHOA cột MAKHOA 1.4 Sơ lược SQL 1.4.1 Câu lệnh SQL SQL chuẩn bao gồm khoảng 40 câu lệnh Bảng 1.1 liệt kê danh sách câu lệnh thường sử dụng số câu lệnh SQL Trong hệ quản trị sở liệu khác