Bài giảng Các hệ cơ sở dữ liệu: Quản lý truy xuất đồng thời - Lương Trần Hy Hiến
lượt xem 17
download
Bài giảng "Các hệ cơ sở dữ liệu: Quản lý truy xuất đồng thời" cung cấp các kiến thức giúp người đọc có thể hiểu được các khái niệm giao tác, các vấn đề xảy ra khi nhiều người cùng khai thác cơ sở dữ liệu, các giải pháp cho các vấn đề trên,... Mời các bạn cùng tham khảo nội dung chi tiết.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Các hệ cơ sở dữ liệu: Quản lý truy xuất đồng thời - Lương Trần Hy Hiến
- Khái niệm giao tác (transaction). Các vấn ñề xảy ra khi nhiều người cùng khai thác Cơ Sở Dữ Liệu. Các giải pháp cho các vấn ñề trên. Sử dụng giao tác trong SQL Server. DBMS02 – Slides 2 Giao tác Ví dụ Giao tác là một dãy các thao tác cần thực Hệ thống giao dịch ngân hàng hiện trên cơ sở dữ liệu dưới một ñơn vị Hệ thống ñặt vé bay duy nhất, nghĩa là hoặc thực hiện tất cả DBMS là môi trường ña người dùng các thao tác hoặc không thực hiện thao Nhiều thao tác truy xuất lên cùng một ñơn vị dữ tác nào cả. liệu Nhiều thao tác thi hành ñồng thời Khách hàng 1 Khách hàng 2 Tìm thấy 1 chỗ trống 2 khách hàng ñặt Tìm thấy 1 chỗ trống cùng 1 chỗ trống Thời gian ðặt vé bay ??? ðặt vé bay Cơ chế tuần tự DBMS02 – Slides 3 DBMS02 – Slides 4
- Giao tác Ví dụ: giao tác chuyển khoản từ A B Khi DBMS gặp sự cố gồm 2 thao tác sau: Các thao tác có thể làm cho trạng thái CSDL Trừ tiền A không chính xác Cộng tiền B Tài khoản A Tài khoản B Chuyển khoản ñược thực hiện dưới dạng ðọc số dư của tài khoản A giao tác (transaction) nghĩa là hoặc thực Kiểm tra (số dư > số tiền cần rút) hiện cả 2 việc trừ tiền A và cộng tiền B Tăng số dư của tài khoản B Sự cố Ngân hàng chịu lỗ hoặc nếu có sự cố thì không làm gì cả và Giảm số dư của tài khoản A 1 khoảng tiền ??? thông báo giao tác thất bại. DBMS02 – Slides 5 DBMS02 – Slides 6 Vấn ñề mất dữ liệu ñã cập nhật Vấn ñề mất dữ liệu ñã cập nhật Vấn ñề không thể ñọc lại Ví dụ: Nhà sách còn 500 quyển sách. Vấn ñề dữ liệu không nhất quán Vào lúc T1 nhân viên A nhân yêu cầu mua 400 quyển từ khách hàng X. Cũng vào T1 nhân viên B nhân yêu cầu mua 300 quyển từ khách hàng Y. A và B ñọc dữ liệu thấy còn 500 quyển nên ñều ñồng ý bán DBMS02 – Slides 7 DBMS02 – Slides 8
- Vấn ñề mất dữ liệu ñã cập nhật (tt) Vấn ñề không thể ñọc lại Ví dụ: Nhà sách còn 500 quyển sách. Ví dụ: Giả sử nhà sách còn 200 quyển sách. Vào lúc T2 nhân viên A sẽ thực hiện cập nhật Vào lúc T1 nhân viên A bán cho khách 150 quyển, sẽ số sách từ 500 thành 100. thực hiện cập nhật số sách từ 200 thành 50. (giao dịch chưa hoàn thành chẳng hạn vì việc giao nhận Vào lúc T3 nhân viên B sẽ thực hiện cập nhật tiền chưa xong) số sách từ 500 thành 200. Sau ñó lúc T2, B nhận ñươc yêu cầu mua 100 quyển Như vậy thao tác cập nhật của A không sách, nếu B ñược ñọc dữ liệu chưa hoàn tất thì B sẽ có tác dụng hay dữ liệu mà A cập nhật sẽ từ chối bán 100 quyển sách này. bị mất vì B cập nhật sau??? (last in wind) DBMS02 – Slides 9 DBMS02 – Slides 10 Vấn ñề không thể ñọc lại (tt) Vấn ñề dữ liệu không nhất quán Ví dụ: Giả sử nhà sách còn 200 quyển sách. Ví dụ: Giả sử nhân viên C cần tổng hợp 5 Nếu vào lúc T3 vì lý do nào ñó chẳng hạn không ñủ dòng dữ liệu 1 2 3 4 5 ñể làm một bản tiền khách hàng của A không mua 150 quyển sách nửa. Giao tác bán hàng của A sẽ không thể thực hiện báo cáo. nên quay về trạng thái số sách còn là 200. T1:C ñọc và ñưa các dòng 1 2 3 4 vào báo cáo Nhưng B ñã từ chối khách hàng. T2:D lại xóa dòng 1 thay bằng dòng 6. Nếu B không ñọc ñược dữ liệu từ lúc T1 ñến T3 thì sẽ T3:C ñọc tiếp các dòng 5 6 ñưa vào báo cáo như thế nào? Vậy báo cáo này xử lý cả dữ liệu cũ và mới SAI DBMS02 – Slides 11 DBMS02 – Slides 12
- Tính chất ACID của giao tác Ví dụ T: Read(A,t); Nguyên tố (Atomicity) t:=t-50; Hoặc là toàn bộ hoạt ñộng của giao dịch ñược phản ánh Write(A,t); ñúng ñắn trong CSDL hoặc không có hoạt ñộng nào cả Read(B,t); t:=t+50; Nhất quán (Consistency) Write(B,t); Một giao tác ñược thực hiện ñộc lập với các giao tác khác xử lý ñồng thời với nó ñể bảo ñảm tính nhất quán cho CSDL Consistency Cô lập (Isolation) Tổng A+B là không ñổi Một giao tác không quan tâm ñến các giao tác khác xử lý Nếu CSDL nhất quán trước khi T ñược thực hiện ñồng thời với nó thì sau khi T hoàn tất CSDL vẫn còn nhất quán Bền vững (Durability) Mọi thay ñổi mà giao tác thực hiện trên CSDL phải ñược ghi nhận bền vững DBMS02 – Slides 13 DBMS02 – Slides 14 Ví dụ (tt) Ví dụ (tt) T: Read(A,t); T: Read(A,t); t:=t-50; t:=t-50; Write(A,t); Write(A,t); Read(B,t); Read(B,t); t:=t+50; t:=t+50; Write(B,t); Write(B,t); Atomicity Durability A=100, B=200 (A+B=300) Tại thời ñiểm sau khi write(A,t) Khi T kết thúc thành công A=50, B=200 (A+B=250) - CSDL không nhất quán Dữ liệu sẽ không thể nào bị mất bất chấp có sự Tại thời ñiểm sau khi write(B,t) cố hệ thống xãy ra A=50, B=250 (A+B=300) - CSDL nhất quán Nếu T không bao giờ bắt ñầu thực hiện hoặc T ñược ñảm bảo phải hoàn tất thì trạng thái không nhất quán sẽ không xuất hiện DBMS02 – Slides 15 DBMS02 – Slides 16
- Ví dụ (tt) Trạng thái của giao tác T: Read(A,t); Active t:=t-50; Write(A,t); Ngay khi bắt ñầu thực hiện thao tác ñọc/ghi T’ Read(B,t); Partially committed t:=t+50; Write(B,t); Sau khi lệnh thi hành cuối cùng thực hiện Isolation Failed Giả sử có 1 giao tác T’ thực hiện phép toán A+B và chen Sau khi nhận ra không thể thực hiện các hành ñộng ñược vào giữa thời gian thực hiện của T nữa T’ kết thúc: A+B=50+200=250 Aborted T kết thúc: A+B=50+250=300 Sau khi giao tác ñược quay lui và CSDL ñược phục hồi về trạng thái trước trạng thái bắt ñầu giao dịch Hệ thống của các giao tác thực hiện ñồng thời có trạng Bắt ñầu lại giao tác (nếu có thể) thái tương ñương với trạng thái hệ thống của các giao Hủy giao tác tác thực hiện tuần tự theo 1 thứ tự nào ñó Committed DBMS02 – Slides 17 DBMS02 Sau khi mọi hành – Slides ñộng hoàn tất 18 thành công Sơ ñồ trạng thái của giao tác Phân loại Transaction Giao dịch tường minh (Explicit transaction) Giao dịch ngầm ñịnh (Implicit transaction) Giao dịch xác nhận (Commit transaction) DBMS02 – Slides 19 DBMS02 – Slides 20
- Phân loại các Locks trong SQL Locks Server Khóa (Lock) ñược sinh ra ñể giới hạn quyền truy nhập trên môi trường ña người dùng. Pessimistic Lock Microsoft SQL Server 200X sử dụng lock ñể Optimistic Lock ñảm bảo tính toàn vẹn của transaction và tính thống nhất của database. Shared Locks Nếu lock không ñược sử dụng, dữ liệu bên Exclusive Locks trong CSDL có thể bị sai về logíc, và các query chạy trên ñó sẽ ñưa ra các kết quả không Update Locks mong ñợi. Bản chất của lock là việc một người muốn truy nhập riêng vào một bảng, vì vậy server sẽ lock bảng ñó lại cho riêng người ñó. DBMS02 – Slides 21 DBMS02 – Slides 22 Share Lock: khi một giao tác ñang ñọc dữ Kỹ thuật khóa 2 giai ñoạn liệu X thì X sẽ bị share lock. Nghĩa là giao Kỹ thuật khóa trên dữ liệu phân cấp tác khác trong cùng thời ñiểm chỉ có Khóa chết (dead lock): là tình trạng 2 hay quyền ñọc X và không có quyền sửa X. nhiều giao tác cùng trong trạng thái chờ Exclusive Lock: khi một giao tác ñang cập giao tác giải phóng tài nguyên cần thiết nhật dữ liệu X thì X sẽ bị exclusive lock. ñể hoàn thành giao tác. Nghĩa là giao tác khác trong cùng thời ñiểm không thể ñọc hay sửa X. DBMS02 – Slides 23 DBMS02 – Slides 24
- Deadlock Khóa chết (dead lock) Một deadlock xảy ra khi có 2 người dùng (hoặc 2 phiên làm việc) ñã ñặt khóa trên 2 ñối tượng riêng, và mỗi user muốn ñặt khóa trên ñối tượng của user kia. Mỗi user ñều TRANSACTION A TRANSACTION B phải ñợi người kia giải phóng khóa của họ ra DISTRIBUTOR PRODUCTS ñể mình có thể ñặt khóa. SQL Server tự ñộng nhận ra deadlock và giải quyết bằng cách chọn một ứng dụng và bắt nó phải giải phóng khóa, trong khi ñó vẫn cho ứng dụng còn lại chạy tiếp. Cách tốt nhất ñể tránh deadlock là tránh nó. Một cách ñể tránh nó là không chạy các transaction ñồng thời. DBMS02 – Slides 25 DBMS02 – Slides 26 Giải quyết Deadlock Giải quyết Dead Lock SET DEADLOCK_PRIORITY Phát hiện Cho phép trạng thái deadlock xãy ra và sau ñó cố gắng khôi SET LOCK_TIMEOUT phục lại hệ thống Chọn 1 giao tác ñể rollback Phương pháp ðồ thị chờ (wait-for graph) Ngăn ngừa Quản lý các giao tác sao cho không bao giờ có deadlock Phương pháp Sắp thứ tự tài nguyên (resource ordering) Timeout Wait-die Wound-wait DBMS02 – Slides 27 DBMS02 – Slides 28
- ðồ thị chờ Ví dụ ðồ thị gồm T1 T2 T3 T4 1 L(A); R(A) ðỉnh là các giao tác ñang giữ khóa hoặc ñang chờ khóa 2 L(C); R(C) Cung ñi từ ñỉnh T sang U khi 3 L(B); R(B) U ñang giữ khóa trên ñơn vị dữ liệu A 4 L(D); T ñang chờ khóa trên A 5 L(A) R(D) T không thể khóa ñơn vị dữ liệu A nếu U không giải phóng khóa 6 ↓ L(C) 7 Chờ ↓ L(A) 8 L(B) Chờ ↓ Nếu ñồ thị chờ không có chu trình ↓ Chờ Chờ Các giao tác có thể hoàn tất Ngược lại Không một giao tác nào trong chu trình có thể tiếp tục thực T1 T2 T3 T4 hiện → deadlock DBMS02 – Slides 29 DBMS02 – Slides 30 Ví dụ (tt) Sắp thứ tự tài nguyên T1 T2 T3 T4 1 L(A); R(A) Áp ñặt một thứ tự nào ñó lên các ñơn vị 2 L(C); R(C) dữ liệu 3 L(B); R(B) 4 L(D); Nếu các giao tác thực hiện khóa những 5 L(A) R(D) 6 L(C) ñơn vị dữ liệu theo thứ tự này 7 L(A) 8 L(B) Thì không có deadlock xãy ra trong khi chờ ñợi T1 T2 T3 T4 DBMS02 – Slides 31 DBMS02 – Slides 32
- Timeout Wait-die Giới hạn các giao tác chỉ ñược thực hiện Mỗi giao tác sẽ ñược gán một nhãn ghi nhận thứ tự xuất hiện, kí hiệu: ts(T) trong 1 khoảng thời gian nào ñó Xét 2 giao tác T và U Nếu giao tác vượt quá thời gian này U ñang giữ khóa trên ñơn vị dữ liệu A Thì giao tác phải bị rollback T muốn khóa ñơn vị dữ liệu A T U T sẽ chờ-wait U khi ts(T) < ts(U) Ngược lại T sẽ bị hủy-die và bắt ñầu làm lại ở 1 thời T U ñiểm khác DBMS02 – Slides 33 DBMS02 – Slides 34 Wound-wait Nhận xét Mỗi giao tác sẽ ñược gán một nhãn ghi nhận Timeout thứ tự xuất hiện, kí hiệu: ts(T) ðơn giản Xét 2 giao tác T và U Khó chọn ñược khoảng thời gian timeout thích hợp U ñang giữ khóa trên ñơn vị dữ liệu A Có hiện tượng starvation T muốn khóa ñơn vị dữ liệu A Giao tác lập ñi lập lại quá trình: bắt ñầu, deadlock, rollback T U T buộc U rollback và trao khóa Resource ordering lại cho T-wound khi ts(T) < ts(U) Không thực tế Ngoại lệ: nếu U ñã kết thúc và giải T U Chờ ñợi nhiều → tiềm ẩn của deadlock phóng khóa, U sẽ không rollback Ngược lại T sẽ chờ-wait U DBMS02 – Slides 35 DBMS02 – Slides 36
- Nhận xét (tt) Lịch thao tác (schedule) Wait-die và Wound-wait Lịch thao tác (schedule) Không có starvation Giới thiệu Wound-wait ít rollback các giao tác hơn wait-die ðịnh nghĩa Dễ cài ñặt hơn wait-for graph Có thể rollback những giao tác không gây ra deadlock Lịch tuần tự (serial schedule) Wait-for graph Lịch khả tuần tự (serilizable schedule) Nếu ñồ thị quá lớn sẽ tốn nhiều thời gian phân tích Conflict-Serializable Rất phức tạp khi CSDL phân tán View-Serializable Giảm tối thiểu rollback các giao tác Chỉ rollback 1 trong những giao tác gây ra deadlock DBMS02 – Slides 37 DBMS02 – Slides 38 Nhãn thời gian (timestamps) Transaction với T-SQL Giới thiệu BEGIN TRANSACTION Nhãn thời gian toàn phần COMMIT TRANSACTION Nhãn thời gian riêng phần ROLLBACK TRANSACTION Nhãn thời gian nhiều phiên bản (multiversion) SAVE TRANSACTION DBMS02 – Slides 39 DBMS02 – Slides 40
- 2 loại giao tác Transaction in SQL Server Giao tác không tường minh: Mặc ñịnh các Transaction Recovery: 2 thao tác lệnh bên trong 1 lô (batch), chỉ cần 1 lệnh COMMIT: hoàn tất giao tác thành công thực hiện không thành công thì tất cả các ROLLBACK: giao tác thất bại quay về lệnh còn lại trong lô ñó sẽ không thực trạng thái trước khi thực hiện giao tác hiện không khuyến khích. Transaction Log: undo the changes Giao tác tường minh: Có chỉ ñịnh BEGIN ñánh dấu bắt ñầu giao tác và COMMIT / Khi user muốn một chỉnh sửa dữ liệu, ROLLBACK ñể kết thúc giao tác. trong transaction log lưu 2 phiên bản của dòng dữ liệu ñó: trước và sau khi chỉnh sửa. DBMS02 – Slides 41 DBMS02 – Slides 42 Chuyển giao tự ñộng các transaction – Autocommit Transactions Nếu user thực hiện câu lệnh Commit thì Mode chuyển giao tự ñộng (Autocommit mode) là mode end-of-transaction ñược ghi xuống quản lý transaction mặc ñịnh của SQL Server. transaction log. Một lệnh (statement) ñược chuyển giao (committed) nếu nó thực hiện thành công hay sẽ trả ngược về lại Nếu user thực hiện câu lệnh Rollback thì ban ñầu (roll back) nếu nó gặp lỗi. hệ thống sẽ tìm phiên bản trước khi chỉnh Lệnh BEGIN TRANSACTION vượt quyền mode tự ñộng sửa và cập nhật lại vào CSDL. chuyển giao (autocommit) mặc ñịnh. SQL Server trở về lại mode autocommit khi transaction ðiều gì xảy ra khi SQL Server khởi ñộng tường minh ñã ñược chuyển giao (commit) hay trả và trong transaction log có một giao tác ngược về ñầu (roll back), hay khi mode transaction ngầm ñịnh bị tắt. chưa Commit và cũng không Rollback? DBMS02 – Slides 43 DBMS02 – Slides 44
- ðảm bảo tính nhất quán của dữ liệu Giải quyết vấn ñề 1: Vấn ñề 1: BEGIN TRANSACTION trnUpdatePosition Một nhân viên có mã ‘000002’ ñược chọn làm ‘Sales Manager’ (position code=‘0001’). Ta sẽ cần cập nhật UPDATE Employee trong bảng Employee và cả trong bảng Position số SET cCurrentPosition = '0001' lượng người hiện tạ nắm giữ vị trí có Position WHERE cEmployeeCode= '000002' Code=‘0001’. • Lệnh SQL tương ứng: UPDATE Position UPDATE Employee SET cCurrentPosition = '0001' SET iCurrentStrength = iCurrentStrength + 1 WHERE cEmployeeCode= '000002‘ WHERE cPositionCode = '0001' UPDATE Position COMMIT TRANSACTION trnUpdatePosition SET iCurrentStrength=iCurrentStrength + 1 WHERE cPositionCode='0001’ DBMS02 – Slides 45 DBMS02 – Slides 46 Vn ñ 2: Gi0i quy2t vn ñ 2: Ten candidates have been recruited for the position 0015. To reflect this change, the siNoOfVacancy attribute of the Requisition In the Query Analyzer window, type: table is to be decreased by 10 for cRequisitionCode 000004. Also BEGIN TRANSACTION the iCurrentStrength attribute of the Position table is to be increased by 10 for cPositionCode 0015 using the following commands: UPDATE Requisition UPDATE Requisition SET siNoOfVacancy=siNoOfVacancy - 10 set siNoOfVacancy=siNoOfVacancy - 10 WHERE cRequisitionCode='000004' WHERE cRequisitionCode='000004‘ UPDATE Position set iCurrentStrength=iCurrentStrength + 10 UPDATE Position WHERE cPositionCode='0015’ SET iCurrentStrength=iCurrentStrength + 10 Both these statements should be atomic and if the iCurrentStrength WHERE cPositionCode='0015' attribute becomes more than the iBudgetedStrength attribute, then the changes made by the UPDATE statements must be reverted. DBMS02 – Slides 47 DBMS02 – Slides 48
- Tạo ñiểm dừng cho 1 TRANSACTION IF (SELECT iBudgetedStrength-iCurrentStrength FROM Position Lệnh SAVE TRANSACTION dùng ñể ñặt 1 ñiểm WHERE cPositionCode = '0015')
- Kiểm tra lỗi bên trong giao tác Kiểm tra lỗi bên trong giao tác SQL Server trả giá trị lỗi về trong biến Giao tác không thể tự ñộng ROLLBACK toàn cục @@ERROR. khi gặp những lỗi phát sinh trong quá @@ERROR= 0: không xảy ra lỗi trình thực hiện 1 câu lệnh thành phần @@ERROR 0: xảy ra lỗi với mã lỗi là trong giao tác. Vì vậy cần kiểm tra giá trị @@ERROR của biến @@ERROR sau mỗi câu lệnh thành phần trong giao tác và cần xử lý những lỗi (nếu có): yêu cầu giao tác ROLLBACK một cách tường minh bằng lệnh ROLLBACK TRANSACTION. DBMS02 – Slides 53 DBMS02 – Slides 54 Ví dụ về kiểm tra lỗi Tóm lại -- Vi du: insert vao bang NhanVien Giao tác (Transaction) là một loạt các thao tác cần thực hiện dưới dạng một ñơn insert into NhanVien values(…) vị duy nhất. if (@@ERROR 0 ) Truy xuất ñồng thời vấn ñề begin Mất dữ liệu ñã cập nhật rollback tran Không thể ñọc lại Dữ liệu không nhất quán return Cài transaction trên SQL Server: begin end transaction, commit, rollback, save DBMS02 – Slides 55 transaction… DBMS02 – Slides 56
- Bài tập Lập trình với T_SQL Khai báo biến: DECLARE @Tên_Biến Kiểu_Dữ_Liệu Ví dụ: DECLARE @Tuoi int DECLARE @MSSV varchar(5) DECLARE @numCount int Tên biến: Bắt ñầu bởi @ Kiểu dữ liệu của biến: Lấy kiểu dữ liệu hệ thống, trừ kiểu text, ntext, image DBMS02 – Slides 57 DBMS02 – Slides 58 Gán giá trị cho biến Gán giá trị cho biến Cách 1: Cách 2: SET @Tên_Biến = Giá_Trị SELECT @Tên_Biến = Giá_Trị Ví dụ: Ví dụ: DECLARE @HoTen nvarchar(20) DECLARE @HoTen nvarchar(20) SET @HoTen = N‘Nguyễn Hằng Nga’ SELECT @HoTen = N‘Nguyễn Hằng Nga’ DBMS02 – Slides 59 DBMS02 – Slides 60
- Gán giá trị cho biến SQL Server Object – Local Variables Cách 3: Các biến ñược sử dụng trong cấu truy vấn như là các tham số. SELECT @Tên_Biến = Tên_cột Cho lược ñồ CSDL và dữ liệu tương ứng như sau: FROM Tên_Bảng HocSinh DiemThi Ví dụ: Tìm lương lớn nhất của tất cả nhân MaHS TenHS NgaySinh DiaChi MaHS HocKy NamHoc Diem viên: 01 Bảo 10/10/1977 123 01 01 2001 10 DECLARE @MaxSalary decimal(18,2) 02 Hải 11/11/1981 456 03 01 2002 8 SELECT @MaxSalary = MAX(Luong) FROM NhanVien DBMS02 – Slides 61 DBMS02 – Slides 62 SQL Server Object – Local Variables SQL Server Object – Local Variables Ví dụ: Liệt kê danh sách học sinh có ngày Ví dụ: Liệt kê danh sách các học sinh có ñịa chỉ là sinh vào ngày ‘10/10/1977’ ‘123’ và ñiểm thi lớn hơn 7 DECLARE @NgaySinh datetime DECLARE @DiaChi nvarchar(50), @Diem Decimal SET @NgaySinh = ’10/10/1977’ SELECT@DiaChi=’123’, @Diem = 7 SELECT * FROM HocSinh SELECT * FROM HocSinh JOIN DiemThi ON WHERE NgaySinh = @NgaySinh HocSinh.MaHS = DiemThi.MaHS WHERE DiaChi = @DiaChi AND DiemThi > @Diem DBMS02 – Slides 63 DBMS02 – Slides 64
- Cấu trúc ñiều khiển Cấu trúc ñiều kiện Cấu trúc ñiều kiện: Tìm Max 2 số Nếu (biểu thức ñiều kiện) thì Lệnh/Khối lệnh DECLARE @a, @b, @Max int SET @Max = @a IF (biểu thức ñiều kiện) IF (@a < @b) BEGIN BEGIN Lệnh/Khối lệnh S SET @Max = @b hoặc SQL Statement END END Print @Max Lệnh/Khối lệnh P hoặc SQL Statement DBMS02 – Slides 65 DBMS02 – Slides 66 Cấu trúc ñiều kiện Cấu trúc ñiều kiện Nếu (biểu thức ñiều kiện) thì Tìm Max 2 số Lệnh/Khối lệnh S1 DECLARE @a, @b, @Max int Ngược lại IF (@a < @b) Lệnh/Khối liệnh S2 BEGIN IF (biểu thức ñiều kiện) SELECT @Max = @b BEGIN END Lệnh/Khối lệnh S1 ELSE END BEGIN ELSE SELECT @Max = @a BEGIN END Lệnh/Khối lệnh S Print @Max END Lệnh/Khối lệnh P DBMS02 – Slides 67 DBMS02 – Slides 68
- Cấu trúc CASE Cấu trúc CASE Cho phép kiểm tra ñiều kiện và xuất Cú pháp 2 thông tin theo từng trường hợp CASE WHEN THEN Cú pháp 1 WHEN THEN CASE / … WHEN THEN [ELSE ] WHEN THEN END … [ELSE ] END DBMS02 – Slides 69 DBMS02 – Slides 70 Ví dụ Case Ví dụ Case (tt) Ví dụ 1: CHITIETBAN(sohd, masach, slban, dgban) SELECT TENCLB1, ‘Kết quả’ = Ví dụ 2: CASE SELECT masach,sum(slban)as tongslban, (CASE WHEN sum(slban)>10 THEN WHEN (SOBANTHANG – SOBANTHUA > 0) THEN ‘Thắng’ N‘Bán chạy' WHEN (SOBANTHANG – SOBANTHUA = 0) THEN ‘Hòa’ ELSE WHEN (SOBANTHANG – SOBANTHUA < 0) THEN ‘Thua’ N‘Bán chậm' END, END) as thongtin TENCLB2 FROM CHITIETBAN FROM vKETQUA GROUP BY masach DBMS02 – Slides 71 DBMS02 – Slides 72
- Ví dụ Case (tt) Cấu trúc lặp SACH (masach, tuasach, sotrang, matheloai, slton) Ví dụ 3: Tăng số trang của những sách thuộc thể loại Tin học thêm 10, câp số trang của những sách thuộc thể loại Toán học UPDATE sach SET sotrang=sotrang+ Viết chương trình tính tổng s = 1 + 2 + .. + n CASE WHEN matheloai=1 THEN 10 WHEN matheloai=4 THEN -10 ELSE 0 END DBMS02 – Slides 73 DBMS02 – Slides 74 Cấu trúc lặp BREAK: Thoát khỏi vòng lặp WHILE CONTINUE: Thực hiện lần lặp mới DBMS02 – Slides 75
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng: Các hệ cơ sở tri thức - Trần Nguyên Hương
142 p | 314 | 88
-
Bài giảng Nhập môn cơ sở dữ liệu
188 p | 338 | 54
-
Bài giảng Các hệ cơ sở tri thức (KBS: Knowledge Based Systems) - Trần Nguyên Hương
105 p | 252 | 47
-
Bài giảng Các hệ cơ sở dữ liệu: Tối ưu hóa truy vấn - Lương Trần Hy Hiến
32 p | 168 | 27
-
Bài giảng Quản trị cơ sở dữ liệu - Chương 2: Mô hình quan hệ
29 p | 167 | 11
-
Bài giảng Tin học cơ sở: Chương 7 - Hệ điều hành và chương trình tiện ích
41 p | 75 | 9
-
Bài giảng Các hệ cơ sở dữ liệu: Hệ quản trị cơ sở dữ liệu phân tán - Lương Trần Hy Hiến
15 p | 120 | 9
-
Bài giảng Tin học cơ sở 1: Phần 1
110 p | 38 | 7
-
Bài giảng Các hệ cơ sở dữ liệu: Cấu trúc lưu trữ và phương thức truy xuất - Lương Trần Hy Hiến
19 p | 103 | 6
-
Bài giảng Các hệ thống thông tin số - Trường Đại học Hàng Hải Việt Nam
49 p | 81 | 6
-
Bài giảng Các hệ cơ sở dữ liệu: An toàn và khôi phục dữ liệu - Lương Trần Hy Hiến
9 p | 101 | 6
-
Bài giảng Các hệ cơ sở dữ liệu - Lương Trần Hy Hiến
2 p | 94 | 5
-
Bài giảng Các hệ quản trị CSDL: Chương 1 - ĐH Sư phạm TP. HCM
46 p | 92 | 5
-
Bài giảng Các hệ cơ sở dữ liệu: Ôn tập môn các hệ quản trị cơ sở dữ liệu - Lương Trần Hy Hiến
5 p | 95 | 4
-
Bài giảng Các hệ cơ sở dữ liệu: Giới thiệu và kiến trúc của hệ quản trị cơ sở dữ liệu - Lương Trần Hy Hiến
22 p | 95 | 3
-
Bài giảng Lý thuyết cơ sở dữ liệu - Chương 4: Đại số quan hệ
43 p | 77 | 3
-
Bài giảng Lý thuyết cơ sở dữ liệu - Chương 3: Mô hình cơ sở dữ liệu quan hệ
35 p | 64 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn