5.3.1 Thủ tục lưu trữ
Các khái niệm
SQL được thiết kế và cài đặt như là một ngôn ngữ để thực hiện các thao tác trên cơ sở dữ liệu như tạo lập các cấu trúc trong cơ sở dữ liệu, bổ sung, cập nhật, xoá và truy vấn dữliệu trong cơ sở dữ liệu. Các câu lệnh SQL được người sửdụng viết và yêu cầu hệ quản trịcơ sở dữ liệu thực hiện theo chế độtương tác.
83 Các câu lệnh SQL có thểđược nhúng vào trong các ngôn ngữ lập trình, thông qua đó chuỗi các thao tác trên cơ sở dữ liệu được xác định và thực thi nhờ vào các câu lệnh, các cấu trúc điều khiển của bản thân ngôn ngữ lập trình được sử dụng. Với thủ tục lưu trữ, một phần nào đó khảnăng của ngôn ngữ lập trình được đưa vào trong ngôn ngữ SQL.Một thủ tục là một đối tượng trong cơ sở dữ liệu bao gồm một tập nhiều câu lệnh SQL đượcnhómlại với nhau thành một nhómvới những khảnăng sau:
• Các cấu trúc điều khiển (IF, WHILE, FOR) có thểđược sửdụng trong thủ tục. • Bên trong thủ tục lưu trữ có thể sử dụng các biến như trong ngôn ngữ lập trình nhằm lưu giữcác giá trị tính toán được, các giá trị được truy xuất được từ cơ sở dữ liệu.
• Một tập các câu lệnh SQL được kết hợp lại với nhau thành một khối lệnh bên trong một thủ tục. Một thủ tục có thể nhận các tham số truyền vào cũng như có thể trả về các giá trị thông qua các tham số(như trong các ngôn ngữ lập trình). Khi một thủ tục lưu trữđã được định nghĩa, nó có thểđược gọi thông qua tên thủ tục, nhận các tham số truyền vào, thực thi các câu lệnh SQL bên trong thủ tục và có thể trả về các giá trị sau khi thực hiện xong.
Sửdụng các thủ tục lưu trữ trong cơ sở dữ liệu sẽ giúp tăng hiệu năng của cơ sở dữ liệu, mang lại các lợi ích sau:
-Đơn giản hoá các thao tác trên CSDL nhờ vào khả năng module hoá các thao tác này.
-Thủ tục lưu trữ được phân tích, tối ưu khi tạo ra nên việc thực thi chúng nhanh hơn nhiều so với việc phải thực hiện một tập rời rạc các câu lệnh SQL tương đương theo cách thông thường.
-Thủ tục lưu trữ cho phép chúng ta thực hiện cùng một yêu cầu bằng một câu lệnh đơn giản thay vì phải sửd ụng nhiều dòng lệnh SQL. Điều này sẽ làm giảm thiểu sự lưu thông dữ liệu trên mạng.
84 -Thay vì cấp phát quyền trực tiếp cho người sửdụng trên các câu lệnh SQL và trên các đối tượng CSDL, có thể cấp phát quyền cho người sử dụng thông qua các thủ tục lưu trữ, nhờđó tăng khảnăng bảo mật đối với hệ thống.
Một số nhóm thủ tục lưu trữ
Là một nhóm các câu lệnh T-SQL đã được biên dịch từtrước (pre-compiled). Một thủ tục lưu trữ có thể không chứa hoặc chứa nhiều tham số truyền vào; đồng thời có thể trả về một giá trị, một bảng hoặc không trả về 1 giá trịnào đó. Sử dụng thủ tục lưu trữđể thực thi nhanh hơn, dễ thay đổi, nâng cấp và bảo mật,…
Có 2 dạng thủ tục lưu trữ - System Stored Procedure - User-defined Stored Procedure
Các hệ thống thủ tục lưu trữ có sẵn khi cài đặt SQL Server. Tất cả các System StoredProcedure đều bắt đầu bằng tiền tố sp_
Database Engine stored procedures: bao gồm các câu lệnh truy vấn lấy thông tin của SQL Server và CSDL.
Ví dụ: sp_helpdb lấy thông tin của tất cả các CSDL hiện có trên Server
Database Mail stored procedures: dùng cho các thao tác về e-mail trong CSDL (sp_send_dbmail)
Security stored procedures: dùng cho mục đích bảo mật như thêm/ xóa User, đăng nhập… ( sp_addlogin)
XML stored procedures: dùng quản lý các tài liệu (sp_xml_preparedocument).
Tạo thủ tục lưu trữ
Cú pháp:
CREATE PROCEDURE tên_thủ_tục[(danh_sách_tham_số)] [WITH
RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION] AS
85 Trong đó:
tên_thủ_tục Tên của thủ tục cần tạo. Tên phải tuân theo qui tắc định danh và không được vượt quá 128 ký tự.
danh_sách_tham_số Các tham số của thủ tục được khai báo ngay sau tên thủ tục và nếu thủ tục có nhiều tham số thì các khai báo phân cách nhau bởi dấu phẩy. Khai báo của mỗi một tham số tối thiểu phải bao gồm hai phần:
- tên tham sốđược bắt đầu bởi dấu @. - kiểu dữ liệu của tham số
RECOMPILE Thông thường, thủ tục sẽ được phân tích, tối ưu và dịch sẵn ở lần gọi đầu tiên. Nếu tuỳ chọn WITH RECOMPILE được chỉ định, thủ tục sẽ được dịch lại mỗi khi được gọi.
Ví dụ1: Giả sử cần thực hiện một chuỗi các thao tác như sau trên cơ sở dữ liệu - Bổ sung thêm môn học cơ sở dữ liệu có mã TI-005và sốđơn vị học trình là
5 vào bảng MONHOC
- Lên danh sách nhập điểm thi môn cơ sở dữ liệu cho các sinh viên học lớp có mã C24102 (tức là bổ sung thêm vào bảng DIEMTHI các bản ghi với cột MAMONHOC nhận giá trịTI-005,cột MASV nhận giá trị lần lượt là mã các sinh viên học lớp cómã C24105 và các cột điểm là NULL).
Nếu thực hiện yêu cầu trên thông qua các câu lệnh SQL như thông thường, phải thực thi hai câu lệnh như sau:
INSERT INTO MONHOC
VALUES ('TI-005','Cơ sở dữ liệu',5)
INSERT INTO DIEMTHI (MAMONHOC,MASV) SELECT ‘TI-005’, MASV
FROM SINHVIEN
86 Thay vì phải sử dụng hai câu lệnh như trên, có thể định nghĩa môt thủ tục lưu trữ với các tham sốvào là @mamonhoc, @tenmonhoc, @sodvhtvà @malop như sau: CREATE PROC sp_LenDanhSachDiem(
@mamonhoc NVARCHAR(10), @tenmonhoc NVARCHAR(50), @sodvht SMALLINT, @malop NVARCHAR(10)) AS BEGIN
INSERT INTO monhoc
VALUES(@mamonhoc,@tenmonhoc,@sodvht) INSERT INTO diemthi(mamonhoc,masv)
SELECT @mamonhoc,masv FROM sinhvien
WHERE malop=@malop END
Khi thủ tục trên đã được tạo ra, có thể thực hiện được hai yêu cầu đặt ra ở trên một cách đơn giản thông qua lời gọi thủ tục:
sp_LenDanhSachDiem 'TI-005','Cơsởdữliệu', 5,'C24102'
Lời gọi thủ tục lưu trữ
Như đã thấy ở ví dụ ở trên, khi một thủ tục lưu trữ đã được tạo ra, có thể yêu cầu hệ quản trị cơ sở dữ liệu thực thi thủ tục bằng lời gọi thủ tục có dạng:
tên_thủ_tục [danh_sách_các_đối_số]
Sốlượng các đối sốcũng như thứ tự của chúng phải phù hợp với sốlượng và thứ tự của các tham sốkhi định nghĩa thủ tục.
Trong trường hợp lời gọi thủ tục được thực hiện bên trong một thủ tục khác, bên trong một trigger hay kết hợp với các câu lệnh SQL khác, sử dụng cú pháp như sau:
87 EXECUTE tên_thủ_tục [danh_sách_các_đối_số]
- Thực hiện thủ tục:
EXEC <tên SP>
- Thay đổi thủ tục:
ALTER PRO[CEDURE] . . . - Xóa thủ tục:
DROP PRO[CEDURE] <tên SP>
5.3.2 Trigger (Bẫy lỗi )
Trigger là đối tượng gắn liền với một bảng, tựđộng thực hiện khi xảy ra sự thay đổi dữ liệu trong bảng như Update, Insert hay Delete. Trigger được dùng đềđảm bảo toàn vẹn dữ liệu (Data Integrity) hay thực hiện các ràng buộc dữ liệu (Business Rule) nào đó.
Định nghĩa Trigger cần chú ý: Trigger được tạo trong bảng nào?
Trigger được kích hoạt khi câu lệnh nào được thực thi (Insert, Update hay Delete). Cú pháp:
CREATE TRIGGER <Trigger Name> ON <Scope>
<Trigger Timing><Trigger Condition> As
Begin
<Trigger Action> End
Sử dụng trigger khi cập nhật dữ liệu trên bảng Cú pháp
CREATE TRIGGER <Trigger name> ON <table>
88 FOR UPDATE AS BEGIN Statements END
Giả sử muốn tạo ra một Trigger tự động thông báo tới người quản lý khi có một đơn hàng mới được cập nhập.
Hình 3. 4 Tạo trigger gửi mail
Chú ý: để thực hiện được câu lệnh trên phải Enable chức năng “Database Mail XPs”
Sau khi tạo thành công Trigger sẽ tự đông giám sát và thông báo khi có sự thay đổi trong bảng Orders.
Ví dụ1: Để giám sát các hoạt động thêm, chỉnh sửa và cập nhật hàng trong bảng Products hãy tạo ra một bảng Audit, với các cột AuditID, AuditType,DateTimeAudit,ProductID. Trong đó AuditType có các giá trị ,I‟,‟U‟,‟D‟ tương ứng với các hoạt động Insert, Update hay Delete.
89 Sau đó tạo ra Trigger dùng cho việc Audit như sau
Các ví dụ minh họa: tạo một CSDL như bên dưới, sau đó tạo các Trigger để quản lý việc thay đổi dữ liệu.
Tạo CSDL
90 Tạo Trigger tg_UpdateOrder
Hình 3. 5 Tạo trigger DeleteOrderDetail
- Sửa, xóa:
Xoá trigger
DROP TRIGGER <tên trigger> Sửa trigger
ALTER TRIGGER <tên trigger> Xem lại định nghĩa của trigger: sp_helptext
91
PHẦN 2: PHẦN THỰC HÀNH BÀI 1: CÀI ĐẶT MS SQL SERVER
Bước 1: Chạy file setup.exe để cài đặt, chọn Installation -> New SQL Server stand-alone ...
Hình 1.2 Giao diện SQL Server Installation Center
Bước 2: Sau khi Setup Support Rules kết thúc chọn OK để tiếp tục cài đặt. Setup Support Rules là phần kiểm tra các lỗi trước khi cài đặt SQL server.
92 Hình 1.3 Giao diện Setup Support Rules
Bước 3: Màn hình Windows Product Key xuất hiện yêu cầu nhập Key cho phần mềm. Sau khi nhập đúng key chọn Next để tiếp tục.
Hình 1.4 Giao diện Installation Type
Bước 4: Màn hình hiển thị về việc đồng ý với điều khoản bản quyền của Microsoft. Chọn vào ô đồng ý và sau đó chọn Next tiếp tục cài đặt.
93
Bước 5: Cửa sổ Setup Support Files xuất hiện. Chọn Install để lựa chọn cài đặt.
94
Bước 6: Cửa sổ Feature Selection xuất hiện tại đây có thể lựa chọn các thành phần muốn cài đặt hoặc chọn Select All để lựa chọn tất cả. Chọn Next để tiếp tục.
Hình 1.7 Giao diện Feature Selection
95
Hình 1.8 Giao diện Instance Configuration
Bước 8: Yêu cầu về ổ cứng. Phần mềm tự động kiểm tra dung lượng ổ cứng cài đặt. Chọn Next
Bước 9: Cấu hình Server. Sử dụng cùng 1 tên đăng nhập cho tất cả các dịch vụ của SQL Server. Thực hành theo hình dưới.
96 Hình 1.10 Giao diện Server Configuration
Bước 10: Cấu hình dữ liệu như sau chọn Window Authentication và Add current User
97 Hình 1.11 Giao diện Database Engine Configuration
98 Hình 1.12 Giao diện cấu hình Analynis Services Configuration
Bước 12: Cấu hình Report, Error và Usage Reporting. Nhấn Next, Next..cho đến khi hiện ra màn hình cài đặt.
99
Bước 13:Cài đặt. Lựa chọn Install để bắt đầu cài đặt và chờđợi quá trình cài đặt kết thúc.
100
BÀI 2: TẠO LẬP VÀ QUẢN LÝ CƠ SỞ DỮ LIỆU
Nội dung kiến thức thực hành:
SQL SerVer Management Studio Tạo và quản lý CSDL
Phần 1: SQL Server Management Studio
1. Khởi động SQL Server Management Studio
- Start Program FileMicroSoft SQL Server 2008SQL Server Management studio
- Thực hiện kết nối các Sevice của một Server trên máy hiện hành. Server type: Chọn loại server.
Server name: Hộp Combo box thứ 2 chứa 1 danh sách của SQL Server cài đặt mà chọn. Trong hộp thoại hình trên, bạn sẽ thấy tên của máy tính được cài đặt trên local (gõ dấu . nghĩa là local, hoặc có thể gõ vào chữ local). Nếu bạn mở hộp Server name bạn có thể tìm kiếm nhiều server local hoặc network
101 connection bằng cách chọn <Browse for more...>.
Authentication: Combo box cuối cùng xác định các loại hình kết nối bạn muốn sử dụng.Trong bài tập này chúng ta kết nối đến SQL Server sử dụng Windows Authentication. Nếu bạn cài đặt SQL Server với chế độ hỗn hợp(mix mode), thì bạn có thể thay đổi chọn lựa SQL Server authentication, thì nó sẽ mở hai hộp thoại và cho phép nhập username và password. Chọn Connect: Kết nối
Cancel: Hủy bỏ thao tác
Option: Các lựa chọn khác
- Bạn hãy cho khởi động dịch vụ SQL Server, SQL Server Agent. 2. Vào menu View, Chọn Object Explorer Details
- Lần lượt mở các nhánh của cây MicroSoft SQL Servers. - Tìm hiểu sơlược cửa sổ, thực đơn, thanh công cụ. 3. Tại cửa sổ Object Explorer, thực hiện:
- Quan sát các thành phần đối tượng trên cửa sổ và hãy cho biết:
Có bao nhiêu SQL Server Group, mỗi Server tên là gì? Đang connect hay disconnect?
... ... Liêt kê các thành phần trong Server hiện hành
102 ... ... Trong server hiện hành, có các Database nào?
... (Hãy so sánh tên của các database với các database của máy bên cạnh)
103 (Các database khác nhau thì các đối tượng có khác nhau không?)
- Mở database Master, khảo sát các đối tượng:
Vào đối tượng Table, tìm hiểu cấu trúc và dữ liệu của bảng (lưu ý: chỉđược chọn xem không nên xoá hay sửa dữ liệu): Sysdatabases, SysObjects, systypes, syslogins, sysusers, sysmessages, syspermissions…
Vào đối tượng Stored Procedures, tìm hiểu nội dung của các thủ tục sau (lưu ý: chỉ được chọn xem không nên xoá hay sửa): sp_help, sp_helpdb, sp_helpcontraint, sp_rename, sp_renamedb, sp_table, sp_addlogin, sp_addmessage, sp_addrole …
Lần lượt vào đối tượng còn lại User, Role, …
4. Khởi động Books online. Lần lượt tìm hiểu các lệnh Create DataBase, Create Table, Alter Table, Select Statement, Select into, Update Statement, Insert Statement, DataType, Triggers… (Hướng dẫn: Gõ tên lệnh/từ khóa cần tìm và nhấn Enter)
5. Khởi động màn hình Query Editor:
- Nhập dòng lệnh sau trên cửa sổ Query Editor: USE AdventureWorks SELECT * FROM Employees - Nhấn F5 để thực thi và quan sát kết quả hiển thị. Phần 2: Tạo và quản lý CSDL
104 1. Tạo CSDL từ menu
a. Click phải vào Database chọn New Database
Database name QuanLyDeAn
Tên logic của data file chính QuanLyDeAn_data Tên tập tin và đường dẫn của
data file chính
T:\HoTenSV\QuanLyDeAn_Data.mdf
Kích cỡ khởi tạo của CSDL 20 MB Kích cỡ tối đa của CSDL 40 MB Kích thước gia tăng tập tin
CSDL
1 MB
Tên logic của transaction log QuanLyDeAn _Log Tên tập tin và đường dẫn của
transaction log
T:\HoTenSV\ QuanLyDeAn _Log.ldf
Kích cỡ khởi tạo của transaction log 6 MB Kích cỡ tối đa của transaction log 8 MB Kích thước gia tăng tập tin
transaction log
1 MB
b. Xem lại thuộc tính (properties) của CSDL QuanLyDeAn. (HD: Nhắp phải chuột tại tên CSDL, chọn properties). Quan sát và cho biết các trang thể hiện thông tin gì?.
c. Tại cửa sổ properties của CSDL, khai báo thêm Một Group File mới có tên là DuLieu QuanLyDeAn
105 Một tập tin dữ liệu (data file) thứ hai nằm trong Group file vừa tạo ở trên và có thông sốnhư sau Tên login của data file là QuanLyDeAn _Data2; Tên tập tin và đường dẫn vật lý của data file là T:\HoTenSV\ QuanLyDeAn_Data2.ndf.
Chọn thuộc tính ReadOnly, sau đó đóng cửa sổ properies. Quan sát màu sắc của CSDL. Bỏ thuộc tính ReadOnly.
2. Thực hiện xóa CSDL quản lý thư viện vừa tạo và kiểm tra lại các files group đã bị xóa.
3. Thực hiện tại cửa sổ Query Editor (lưu ý: sau mỗi lần có sự thay đổi thì phải dùng các lệnh để kiểm tra sự thay đổi đó) .
a. Dùng lệnh Create DataBase, tạo một CSDL với các tham số được liệt kê như trong bảng dưới. Lưu ý rằng CSDL này gồm một data file và nó được nằm trong primary filegroup
THAM SỐ GIÁ TRỊ
Database name QuanLyDeAn
Tên logic của data file chính QuanLyDeAn data1 Tên tập tin và đường dẫn của data file
chính
T:\HoTenSV\QuanLyDeAn _data1.mdf
Kích cỡ khởi tạo của CSDL 10 MB Kích cỡ tối đa của CSDL 40 MB Kích thước gia tăng tập tin CSDL 1 MB
Tên logic của transaction log QuanLyDeAn _Log Tên tập tin và đường dẫn của
transaction log
106 Kích cỡ tối đa của transaction log 8 MB
Gia số gia tăng tập tin transaction log 1 MB
b. Xem lại thuộc tính của CSDL QuanLyDeAn bằng Management Studio và bằng thủ tục hệ thống sp_helpDb, sp_spaceused.
c. Thêm một filegroup có tên là DuLieu QuanLyDeAn (HD: dùng lệnh Alter DataBase <Tên Database> ADD FILEGROUP <Tên filegroup>)
d. Khai báo một secondary file có tên logic là QuanLyDeAn _data2, tên vật lý QuanLyDeAn _data2.ndf nằm ở T:\HoTenSV, các thông số khác tùy bạn chọn, data file này nằm trong file group là QuanLyDeAn. (HD: Dùng lệnh Alter Database …. ADD FILE …. TO FILEGROUP …)
e. Dùng Books Online, bạn tìm hiểu thủ tục hệ thống sp_helpfilegroup dùng để làm gì?
f. Dùng lệnh Alter Database … Set … để cấu hình cho CSDL QuanLyDeAn có thuộc tính là Read_Only. Dùng sp_helpDB để xem lại thuộc tính của CSDL. Hủy bỏ thuộc tính Read_Only.
g. Dùng lệnh Alter DataBase … MODIFY FILE … để tăng SIZE của QuanLyDeAn
_data1 thành 50 MB. Tương tự tăng SIZE của tập tin QuanLyDeAn _log thành 10 MB. Nếu trong Management Studio để thay đổi SIZE của các tập tin bạn làm như thế nào
107 1. Cho CSDL Quản lý đề án, hãy tạo CSDL có tên_QuanLyDeAn_TenSV
trong thư mục tùy ý