Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 31 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
31
Dung lượng
13,02 MB
Nội dung
CH4: LẬP TRÌNH TRANSACT - SQL GVPT: NGUYỄN THỊ MỸ DUNG SỐ TC: SỐ TIẾT: LT: 20; TH: 20 Biên soạn: Nguyễn Thị Mỹ Dung Chương 1: Tổng quan SQL Server (LT: 2) Chương 2: Tạo quản trị CSDL (LT: 6; TH: 6) Chương 3: Transact-SQL truy vấn liệu (LT: 6: TH: 8) Chương 4: Lập trình với Transact-SQL (LT: 4: TH: 4) Chương 5: Bảo Mật Phân Quyền (LT: 2; TH: 2) Chương 6: Kết nối CSDL (Tự học) Biên soạn: Nguyễn Thị Mỹ Dung CH4: LẬP TRÌNH TRANSACT - SQL I Thiết kế View, Index II Lập trình T-SQL III Stored Procedure IV Trigger Biên soạn: Nguyễn Thị Mỹ Dung Thiết kế View - Là bảng ảo tạo từ tập bảng (Table) thật khác Đối với người dùng View bảng thật - Cũng tương tự truy vấn liệu dùng để xem liệu từ nhiều bảng khác CSDL - Làm giảm phức tạp CSDL bảo vệ liệu người dùng không phép truy cập - Các lệnh sử dụng View tương tự Table CSDL - Nhược điểm View thời gian truy cập liệu từ bảng (table) gốc Biên soạn: Nguyễn Thị Mỹ Dung CH4: LẬP TRÌNH TRANSACT - SQL (khung nhìn): CREATE VIEW AS SELECT FROM [WHERE GROUP BY ] Biên soạn: Nguyễn Thị Mỹ Dung Ví dụ: Tạo View Ketquadetai gồm hotensv, học lực, điểm trung bình đề tài USE QLDETAISV CREATE VIEW KETQUADETAI AS SELECT SINHVIEN.MASV, HOCLUC, ROUND(AVG(KQ),2) AS DIEMTBDT FROM SINHVIEN LEFT JOIN SV_DT ON SV_DT.MASV = SINHVIEN.MASV GROUP BY SINHVIEN.MASV, HOCLUC Biên soạn: Nguyễn Thị Mỹ Dung CH4: LẬP TRÌNH TRANSACT - SQL : ALTER VIEW AS SELECT FROM [WHERE GROUP BY ] : DROP VIEW Biên soạn: Nguyễn Thị Mỹ Dung VD1: Sửa View Ketquadetai gồm hotensv, học lực từ điểm trở lên điểm trung bình đề tài USE QUANLYDETAISV ALTER VIEW KETQUADETAI AS SELECT SINHVIEN.MASV, HOCLUC, ROUND(AVG(KETQUA),2) AS DIEMTBDT FROM SINHVIEN LEFT JOIN SV_DT ON SV_DT.MASV = SINHVIEN.MASV GROUP BY SINHVIEN.MASV, HOCLUC WHERE HOCLUC >= VD2: DROP VIEW KETQUADETAI Biên soạn: Nguyễn Thị Mỹ Dung CH4: LẬP TRÌNH TRANSACT - SQL Lưu ý 1: - Có thể sử dụng câu truy vấn view tương tự bảng (Table) - Có thể truy vấn vừa bảng vừa View Ví dụ: SELECT MASV, HOTENSV, HOCLUC, DTBDT FROM KETQUADETAI KQ, SINHVIEN S WHERE KQ.MASV = S.MASV AND DTBDT >= - Khi thay đổi (xóa, thêm, sửa) liệu View liệu bảng gốc thay đổi theo Biên soạn: Nguyễn Thị Mỹ Dung Lưu ý 2: - Khi tạo View có sử dụng hàm kết tập khơng thể thực thao tác: Insert, Update, Delete VD: CREATE VIEW KETQUADT AS SELECT S.MASV, HOTENSV, AVG(KQ) AS DTBDT FROM SV_DT SD, SINHVIEN S WHERE SD.MASV = S.MASV GROUP BY S.MASV, HOTENSV Biên soạn: Nguyễn Thị Mỹ Dung CH4: LẬP TRÌNH TRANSACT - SQL Tạo Index (chỉ mục) Chỉ mục tạo nhằm để dòng bảng truy xuất nhanh hiệu Chỉ mục tạo nhiều cột bảng, mục đặt tên Người dùng không thấy mục Lưu ý: Khi bảng tạo mục việc cập nhật hay thêm dòng vào bảng nhiều thời gian bảng khơng có mục Chỉ nên tạo mục cho cột thường xuyên dùng tác vụ tìm kiếm Biên soạn: Nguyễn Thị Mỹ Dung Chỉ mục đơn (Unique Index) Cú pháp: CREATE [UNIQUE] INDEX ON UNIQUE: bắt buộc hai dòng bảng không phép mang giá trị cột tạo mục Ví dụ 1: CREATE UNIQUE INDEX TENDT_ID ON DE_TAI(TENDT) Ví dụ 2: Tạo mục nhiều cột CREATE INDEX SV_Index ON SINHVIEN (Hosv, Tensv) Biên soạn: Nguyễn Thị Mỹ Dung CH4: LẬP TRÌNH TRANSACT - SQL Xóa mục DROP INDEX Ví dụ: DROP INDEX DE_TAITENDT_ID DROP INDEX SINHVIEN.SV_ID Biên soạn: Nguyễn Thị Mỹ Dung Khái niệm Giống NNLT khác, SQL sử dụng biến, lệnh rẽ nhánh (if else, Case … end) vịng lặp (while) đơn giản Ngồi ra, SQL hỗ trợ xây dựng thủ tục, hàm Điểm khác biệt với NNLT khác SQL cho phép thiết lập trigger (bẫy lỗi kiện), cussor,… - Biến SQL dùng để lưu giá trị tạm thời trình xử lý tính tốn - Các lệnh cấu trúc dùng để hỗ trợ lập trình SQL - Chương trình con, trigger giúp SQL thực ràng buộc liệu CSDL Biên soạn: Nguyễn Thị Mỹ Dung CH4: LẬP TRÌNH TRANSACT - SQL Khai báo biến Khai báo biến cục DECLARE { @local_variable [AS] data_type, … } Trong đó: @local_variable: tên biến cục bộ, phải bắt đầu ký hiệu @ data_type: kiểu liệu hệ thống kiểu liệu người dùng Biên soạn: Nguyễn Thị Mỹ Dung Sử dụng biến Câu lệnh SET SELECT (lấy giá trị từ bảng liệu) dùng để gán giá trị cho biến SET @local_variable = value OR: SELECT @local_variable = value VD1: DECLARE @x int, @y int SET @y = SET @x = @y + VD2: DECLARE @TBKP FLOAT SELECT @TBKP = ([SELECT] AVG(Kinhphi) FROM DETAI WHERE MADT = 'DT001') Biên soạn: Nguyễn Thị Mỹ Dung CH4: LẬP TRÌNH TRANSACT - SQL Hiển thị giá trị biến Sử dụng câu lệnh PRINT SELECT để hiển thị giá trị biến VD: PRINT @x PRINT @y SELECT @x, @y Biên soạn: Nguyễn Thị Mỹ Dung Lưu ý: - Khi gán trị cho biến có liệu từ bảng liệu phải sử dụng từ khóa SELECT - Khi in liệu vừa có chuỗi vừa có biến lệnh PRINT phải chuyển đổi kiểu cho biến sang chuỗi với hàm CONVERT CONVERT Cú pháp: CONVERT (, ) VD: CONVERT (CHAR(5), MAXKP) CONVERT (VARCHAR(5), SUMKP) Biên soạn: Nguyễn Thị Mỹ Dung CH4: LẬP TRÌNH TRANSACT - SQL VD1: Tính tổng số DECLARE @tong float, @a float, @b float SET @a = 10.0 SET @b = 2.0 SET @tong = @a * @b PRINT @tong SELECT @a as so1, @b as so2, @tong as tong VD2: Tính điểm trung bình sinh viên A02 từ bảng KETQUA DECLARE @DiemTB float SET @DiemTB=(SELECT AVG(Diem) FROM KetQua WHERE MaSV='A02') SELECT @DiemTB as DTB Biên soạn: Nguyễn Thị Mỹ Dung VD3 VD 3: Lấy tổng kinh phí tất đề tài từ bảng đề tài DECLARE @tongkp float SELECT @tongkp = sum(kinhphi) FROM DETAI VD4 VD 4: Tìm max kinh phí kinh phí đề tài DECLARE @maxkp int, @minkp int SELECT @maxkp=MAX(kinhphi),@minkp = MIN (kinhphi) FROM DETAI PRINT N'Kinh phí cao là: ' + CONVERT (CHAR,@maxkp) PRINT N'Kinh phí thấp là: ' + CONVERT (CHAR,@minkp) Biên soạn: Nguyễn Thị Mỹ Dung 10 CH4: LẬP TRÌNH TRANSACT - SQL Lệnh vòng lặp Các câu lệnh thực thi nhiều lần (lặp) điều kiện WHILE BEGIN Các câu lệnh END - Break: lệnh break nằm bên vòng lặp while dùng để kết vòng lặp - Continue: lệnh continue nằm bên vòng lặp while để bỏ qua lệnh phía sau bắt đầu vịng lặp Biên soạn: Nguyễn Thị Mỹ Dung VD1: In tổng từ đến 10 DECLARE @TONG INT, @I INT SET @TONG = SET @I = WHILE (@I END Thực lệnh để kiểm tra EXEC THEM 'DT1001','Xây dựng Website hỗ trợ v iệc làm', 'Trần Kiến Quốc', 20 Biên soạn: Nguyễn Thị Mỹ Dung Sửa Procedure Khi thủ tục tạo ra, ta tiến hành định nghĩa lại thủ tục câu lệnh ALTER PROCEDURE Câu lệnh sử dụng tương tự câu lệnh CREATE PROCEDURE Cú pháp: ALTER PROC | PROCEDURE [()] AS [WITH RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION] Tập lệnh SQL … GO Biên soạn: Nguyễn Thị Mỹ Dung 21 CH4: LẬP TRÌNH TRANSACT - SQL VD: Sửa Procedure từ VD3 ALTER PROC THE M( @MAD T CHAR(40),@KINHPHI INT) AS CHAR(10 ),@TEND T CHAR(50 ),@CHUNHIE M BEGIN IF NOT EXISTS (SELECT MADT FROM DETAI WHERE MADT = @MADT) BEGIN INSERT INTO DETAI (MADT, TENDT, CHUNHIEM, KINHPHI) VALUES (@MADT, @TENDT, @CHUNHIEM, @KINHPHI) PRINT N'THÊM THÀNH CÔNG' END ELSE PRINT N'MADT ĐÃ CÓ!!!' BEGIN INSERT INTO SV_DT (MASV, MADT) SELECT MASV, @MADT FROM SINHVIEN WHERE HOCLUC > PRINT N'ĐÃ THÊM HOÀN TẤT!!!' END END Biên soạn: Nguyễn Thị Mỹ Dung Xóa Procedure Cú pháp: DROP PROCEDURE Ví dụ: DROP PROCEDURE PRO_SV_DT Bài tập tập:: Viết procedure kiểm tra số chẵn hay lẻ Viết proc in thứ tương ứng với số nhập vào Viết thủ tục kiểm tra khóa thêm liệu vào bảng Sinhvien, Monhoc, Khoa Viết thủ tục kiểm tra khóa Masv, Mamh có bảng Sinhvien bảng Monhoc thêm vào bảng kết Biên soạn: Nguyễn Thị Mỹ Dung 22 CH4: LẬP TRÌNH TRANSACT - SQL Tạo Proc xóa khoa nhập vào khơng vi phạm RBTV khóa Tạo Pro xóa mơn học nhập vào khơng vi phạm RBTV khóa Tạo Pro xóa Sinh viên nhập vào khơng vi phạm RBTV khóa Tạo Proc nâng điểm sinhvien có MASV Mã môn học, số điểm nâng nhập vào (sửa lại này: mã môn học tên môn học) Biên soạn: Nguyễn Thị Mỹ Dung Khái niệm Trigger kiểu thủ tục lưu trữ đặc biệt, chúng tự động gọi có sửa đổi liệu mà trigger thiết kế để bảo vệ Trigger giúp đảm bảo tính tồn vẹn liệu CSDL cách ngăn không cho thay đổi không quán thực Trigger kích hoạt câu lệnh thực thi bảng là: INSERT, UPDATE, DELETE Biên soạn: Nguyễn Thị Mỹ Dung 23 CH4: LẬP TRÌNH TRANSACT - SQL Giao tác - transaction Dùng để công việc gồm nhiều bước, bước thi hành - Mặc định SQL Server thực chế độ giao tác không tường minh Mỗi câu lệnh INSERT, UPDATE, DELETE Transaction Sau thực lệnh, thay đổi cập nhật vào CSDL - Giao tác tường minh + Khai báo trước với từ khóa: BEGIN TRAN + Kết thúc giao tác với từ khóa ROLLBACK TRAN có lỗi xảy khơng, thay đổi bị hủy hủy + Kết thúc giao tác với từ khóa COMMIT TRAN lệnh hồn tất, liệu thay đổi giữ lại Biên soạn: Nguyễn Thị Mỹ Dung VD: Đếm số lượng đề tài trước sau thêm SELECT COUNT(*) AS [SL_OLD] FROM DETAI BEGIN TRAN INSERT INTO DETAI VALUES ('DT1003', N'QUẢN LÝ ĐIỂM RÈN LUYỆN SINH VIÊN', N'MAI THANH TÂM', 15) SELECT COUNT(*) AS [SL MOI] FROM DETAI ROLLBACK TRAN | COMMIT TRAN SELECT COUNT(*) AS [SL HIENTAI] FROM DETAI Biên soạn: Nguyễn Thị Mỹ Dung 24 CH4: LẬP TRÌNH TRANSACT - SQL Trigger Kiểm tra RBTV thao tác liệu chức năng: thêm (insert), sửa (update), xóa (delete),… a/ Khai báo: CREATE TRIGGER ON [INSTEAD OF] | [FOR | AFTER] AS BEGIN TẬP LỆNH SQL … END Biên soạn: Nguyễn Thị Mỹ Dung b/ Các thành phần - Tên bảng: Trigger có ảnh hưởng bảng - INSTEAD OF: loại Trigger kiểm tra liệu trước, liệu không bị thay đổi, thay cập nhật liệu hành động khác - FOR | AFTER: loại Trigger thông thường kiểm tra Rule ràng buộc, liệu tạm thời thay đổi - INSERT | UPDATE | DELETE: hành động kích hoạt trigger hoạt động Biên soạn: Nguyễn Thị Mỹ Dung 25 CH4: LẬP TRÌNH TRANSACT - SQL c/ Các bảng trung gian bảng tạm - Inserted: Chứa liệu thêm INSERT | UPDATE, có cấu trúc bảng giống bảng thực - Deleted: Chứa liệu bị xóa DELETE | UPDATE, cấu trúc bảng giống bảng thực cập nhật - Chức UPDATE SQL xóa dịng liệu cũ, thêm dịng liệu với thông tin cập nhật Biên soạn: Nguyễn Thị Mỹ Dung VD1: Tạo trigger cập nhật, chèn liệu năm sinh cho sinh viên phải 18 CREATE TRIGGER TRIG_SV ON SINHVIEN FOR INSERT, UPDATE AS BEGIN CAP NHAT DU LIEU IF UPDATE(NGAYSINH) BEGIN IF EXISTS (SELECT * FROM DELETED A, INSERTED B WHERE (A.NAMSINH- B.NAMSINH)