intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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

Chia sẻ: Gió Biển | Ngày: | Loại File: PDF | Số trang:19

163
lượt xem
17
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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.

Chủ đề:
Lưu

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

  1.  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
  2. 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
  3.  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
  4. 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
  5. 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
  6. 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
  7. 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
  8. ðồ 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
  9. 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
  10. 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
  11. 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
  12. ðả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
  13. 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')
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
5=>2