1. Trang chủ
  2. » Luận Văn - Báo Cáo

Giao Trinh SQL bai 131415

30 14 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 412 KB

Nội dung

Cursor là một đối tượng của CSDL mà nó hỗ trợ cho là một đối tượng của CSDL mà nó hỗ trợ cho phép truy xuất và thao tác dữ liệu trong một tập kết.. phép truy xuất và thao tác dữ liệu[r]

(1)

CURSOR

CURSOR 13

(2)

1 Khái niệm: 1 Khái niệm:

Cursor

Cursor đối tượng CSDL mà hỗ trợ cho đối tượng CSDL mà hỗ trợ cho phép truy xuất thao tác liệu tập kết

phép truy xuất thao tác liệu tập kết

quả Sau

quả Sau cursorcursor định vị dòng, định vị dịng, hoạt động thực dịng đó.

hoạt động thực dịng đó. Dùng Cursor để:

Dùng Cursor để:

Định vị dịng đặc biệt tập kết quả.Định vị dòng đặc biệt tập kết quả.

Truy xuất khối dịng vị trí Truy xuất khối dịng vị trí cursor tập kết quả.

cursor tập kết quả.

Cung cấp thao tác hiệu chỉnh liệu cho dòng Cung cấp thao tác hiệu chỉnh liệu cho dòng tại vị trí

tại vị trí Cursor Cursor tập kết quả.trong tập kết quả.

Cung cấp mức độ khác tính tường Cung cấp mức độ khác tính tường minh thay đổi đước tạo người

(3)

Khi sử dụng cursor SQL Server:

Khi sử dụng cursor SQL Server:

Cursor cần phải khai báo thuộc tính Cursor cần phải khai báo thuộc tính nó cần xác định

nó cần xác định

Mở cursorMở cursor..

Phải lấy (fetchPhải lấy (fetch) dòng cần thiết từ cursor) dịng cần thiết từ cursor..

Dữ liệu dịng hành hiệu Dữ liệu dịng hành hiệu chỉnh cần thiết.

chỉnh cần thiết.

Tạm thời khơng dùng cursor phải đóng cursor Tạm thời khơng dùng cursor phải đóng cursor lại.

lại.

Cursor cần phải giải phóng khơng cần Cursor cần phải giải phóng khơng cần dùng nữa.

(4)

2 Phân Loại Cursor:

2 Phân Loại Cursor:

a Static Cursor: a Static Cursor:

Tập kết trỏ loại Static xây dựng Tập kết trỏ loại Static xây dựng trong

trong tempdbtempdb trỏ mở. trỏ mở.

Con trỏ khơng phản ánh thay đổi Con trỏ không phản ánh thay đổi nào database dòng nào database dịng

liệu có thay đổi. liệu có thay đổi.

Tất tTất thao tác Inserthao tác Insert, Update, Update, Delete, Delete khơng khơng có tác dụng dùng

(5)

b Keyset-driven Cursor: b Keyset-driven Cursor:

Thành viên thứ tự dòng Thành viên thứ tự dòng keyset-driven cursor

keyset-driven cursor cố định cursor cố định cursor mở Con trỏ điều khiển tập giá trị mở Con trỏ điều khiển tập giá trị

nhận dạng gọi

nhận dạng gọi KeysetKeyset Keyset xây dựng Keyset xây dựng trong

trong TempdbTempdb trỏ mở. trỏ mở.

Cho phép hiệu chỉnh (updateCho phép hiệu chỉnh (update, delete, delete) liệu ) liệu cột không keyset (bởi chủ cursor từ user cột không keyset (bởi chủ cursor từ user

khác) user duyệt thông qua trỏ. khác) user duyệt thơng qua trỏ.

(6)

c Dynamic Cursor: c Dynamic Cursor:

CursorCursor phản ánh tồn thay đổi phản ánh toàn thay đổi các dòng liệu tập kết duyệt các dòng liệu tập kết duyệt

Cursor Cursor

Giá trị liệu, thứ tự, thành viên Giá trị liệu, thứ tự, thành viên dòng tập kết thay đổi ứng với dịng tập kết thay đổi ứng với

mỗi lần duyệt trỏ. mỗi lần duyệt trỏ.

Tất lệnh Insert, Update, DeleteTất lệnh Insert, Update, Delete user hữu hiệu thông qua trỏ.

user hữu hiệu thông qua trỏ. d Fast Forward Cursor:

d Fast Forward Cursor:

Chỉ duyệt trỏ theo chiều từ

(7)

13.2 Làm việc với T-SQL server cursors13.2 Làm việc với T-SQL server cursors

Khai báo cursor

Khai báo cursor Bằng câu lệnh declare sau từ khóa Bằng câu lệnh declare sau từ khóa AS stored procedures functions

AS stored procedures functions DECLARE

DECLARE cursor_name CURSOR cursor_name CURSOR

[LOCAL | GLOBAL][LOCAL | GLOBAL]

[FORWARD_ONLY | SCROLL][FORWARD_ONLY | SCROLL]

[STATIC | KEYSET | DYNAMIC |FAST_FORWARD][STATIC | KEYSET | DYNAMIC |FAST_FORWARD]

[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC][READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]

FOR

FOR select_statementselect_statement

(8)

Ghi chú:

Ghi chú:

• Select_statement:Select_statement: Là câu lệnh truy vấn để định Là câu lệnh truy vấn để định nghĩa tập kết cursor Từ khóa nghĩa tập kết cursor Từ khóa

COMPUTE

COMPUTE, COMPUTE BY, COMPUTE BY, FOR BROWSE, , FOR BROWSE, and

and INTOINTO không cho phép select_statement khơng cho phép select_statement

• READ ONLYREAD ONLY khơng cho phép Update không cho phép Update cursor này.

cursor này.

• UPDATEUPDATE [OF [OF column_name [,…n]]:column_name [,…n]]: Quy định Quy định cột cho phép

cột cho phép updateupdate dùng cursor Nếu dùng cursor Nếu OF column_name

OF column_name [,n…] định rõ ràng [,n…] định rõ ràng chỉ có cột định cho phép chỉ có cột định cho phép

hiệu chỉnh, khơng có column list,

hiệu chỉnh, khơng có column list, all columns all columns có thể update.

(9)

Mở cursor: Mở cursor: Cursor open sau khai báoCursor open sau khai báo

OPEN

OPEN {cursor_name}{cursor_name}

Lấy mẫu tin điều hướng cursor (FETCH)Lấy mẫu tin điều hướng cursor (FETCH)

FETCH

FETCH [ [ [ [ NEXT | PRIOR | FIRST | LAST | NEXT | PRIOR | FIRST | LAST | ABSOLUTE

ABSOLUTE n n | REALTIVE | REALTIVE n ]n ] ] ] FROM

FROM cursor_name [ cursor_name [ INTOINTO @variable_name [,…n]]@variable_name [,…n]]

Truy xuất dòng liệu Kiểm tra phạm vi Truy xuất dòng liệu Kiểm tra phạm vi trỏ bằng

trỏ @@Fetch_status@@Fetch_status @@fetch_status:

@@fetch_status: Trả vềTrả trỏ1 trỏ dời qua dời qua LAST

LAST Trả 0Trả phạm vi duyệt trỏ phạm vi duyệt trỏ vòng lặp

vòng lặp WhileWhile để duyệt tập kết Cursor để duyệt tập kết Cursor

INTOINTO @variable_name@variable_name[,[, n n]:]: Allows data from the Allows data from the

columns of a fetch to be placed into local variables

(10)

Có thể dùng câu lệnh UpdateCó thể dùng câu lệnh Update Delete Delete để hiệu để hiệu

chỉnh liệu.

chỉnh liệu.

Sử dụng liệu mẫu tin hành: Dữ liệu gán Sử dụng liệu mẫu tin hành: Dữ liệu gán

cho biến tương ứng câu lệnh

cho biến tương ứng câu lệnh FetchFetch

Cập nhật liệu thông qua cursorCập nhật liệu thông qua cursor: Thực chất : Thực chất

liệu hiệu chỉnh trực tiếp vào bảng.

liệu hiệu chỉnh trực tiếp vào bảng.Cập nhật giá trị cho cộtCập nhật giá trị cho cột

UPDATE

UPDATE <Table_Name> <Table_Name>

SET

SET <Column_Name> = <Value> [,…n] <Column_Name> = <Value> [,…n]

WHERE CURRENT OF

WHERE CURRENT OF <Cur_Name> <Cur_Name>

Xóa liệu thơng qua cursor: Thực liệu xóa Xóa liệu thơng qua cursor: Thực liệu xóa trên bảng

trên bảng

DELETE

DELETE <Ten Table> <Ten Table>

WHERE CURRENT

(11)

Đóng CursorĐóng Cursor

Kết thúc hành động cursor cho lần mở (open),

Kết thúc hành động cursor cho lần mở (open),

vẫn hữu gặp lệnh Open khác

vẫn hữu gặp lệnh Open khác

hoặc gặp lệnh Close cursor.

hoặc gặp lệnh Close cursor. CLOSE

CLOSE cursor_namecursor_name

Giải phóng CursorGiải phóng Cursor

Giải phóng cursor, hủy bỏ tham chiếu đến trỏ từ

Giải phóng cursor, hủy bỏ tham chiếu đến trỏ từ

session hành Tiến trình làm cho tài nguyên

session hành Tiến trình làm cho tài nguyên

trở trạng thái sẵn sàng truy xuất.

trở trạng thái sẵn sàng truy xuất. DEALLOCATE

(12)

DECLARE

DECLARE contro CURSOR FOR contro CURSOR FOR

Select Select mahang, tenhang, soluong Frommahang, tenhang, soluong From mathang mathang

OPEN

OPEN contro contro

Declare

Declare @mahang Nvarchar(10) @mahang Nvarchar(10)

Declare

Declare @tenhang Nvarchar(10) @tenhang Nvarchar(10)

Declare

Declare @soluong Int @soluong Int

FETCH NEXT FROM

FETCH NEXT FROM contro contro

INTO

INTO @mahang, @tenhang, @soluong @mahang, @tenhang, @soluong While

While @@FETCH_STATUS @@FETCH_STATUS = = BeginBegin

Print 'Ma hang: '+@mahang Print 'Ma hang: '+@mahang

Print 'Ten hang:'+@tenhang Print 'Ten hang:'+@tenhang

Print 'So luong: '+STRPrint 'So luong: '+STR(@soluong) (@soluong)

FETCH NEXT FROMFETCH NEXT FROM contro contro

INTOINTO @mahang, @tenhang, @soluong @mahang, @tenhang, @soluong

EndEnd

CLOSE

(13)

Declare

Declare MyCursor CURSOR FOR MyCursor CURSOR FOR

Select

Select c.CustomerId, c.CompanyName, o.OrderID, o.OrderDate c.CustomerId, c.CompanyName, o.OrderID, o.OrderDate

From

From Customers c Inner Join Customers c Inner Join Orders o Orders o

ON

ON c.CustomerID = o.CustomerID c.CustomerID = o.CustomerID

FOR UPDATE

FOR UPDATE

OPEN

OPEN MyCursor MyCursor

Declare

Declare @cid varchar @cid varchar (8), @cn varchar(80), @o int (8), @cn varchar(80), @o int, @od datetime, @od datetime FETCH NEXT FROM

FETCH NEXT FROM MyCursor MyCursor

INTO

INTO @cid, @cn, @o, @od@cid, @cn, @o, @od

Select

Select @cid, @cn @cid, @cn

Begin TRANSACTION Begin TRANSACTION

Update

Update Customers SET Customers SET CompanyName = CompanyName = 'q' 'q'

Where

Where Current Of Current Of MyCursor MyCursor

Deallocate

Deallocate MyCursor MyCursor

Select

Select * From * From Customers Where Customers Where CompanyName = CompanyName = 'q' 'q'

(14)

TRIGGER

TRIGGER

14

(15)

I Khái niệm Trigger:

I Khái niệm Trigger:

Cũng tương tự store procedureCũng tương tự store procedure, Trigger, Trigger

một đối tượng chứa tập câu lệnh SQL tập

một đối tượng chứa tập câu lệnh SQL tập

các câu lệnh thực thi

các câu lệnh thực thi triggertrigger gọi gọi

Điểm khác biệt store procedureĐiểm khác biệt store procedure trigger trigger là: là:

store procedure

store procedure thực thi người sử dụng có lời thực thi người sử dụng có lời gọi đến chúng cịn

gọi đến chúng triggertrigger lại “gọi” TỰ ĐỘNG lại “gọi” TỰ ĐỘNG

khi xảy giao tác làm thay đổi liệu

khi xảy giao tác làm thay đổi liệu

các bảng.

các bảng.

Mỗi triggerMỗi trigger tạo gắn liền với bảng tạo gắn liền với bảng

nào sở liệu

nào sở liệu Khi liệu bảng bị Khi liệu bảng bị

thay đổi trigger tự đơng kích hoạt.

(16)

Dùng trigger cách hợp lý sở liệu có Dùng trigger cách hợp lý sở liệu có

tác động lớn việc tăng hiệu CSDL:

tác động lớn việc tăng hiệu CSDL:

Một trigger nhận biết, ngăn chặn huỷ bỏ Một trigger nhận biết, ngăn chặn huỷ bỏ

những thao tác làm thay đổi trái phép liệu

những thao tác làm thay đổi trái phép liệu

sở liệu

sở liệu

Các thao tác liệu (Các thao tác liệu (DeleteDelete, , InsertInsert, , UpdateUpdate) )

được

được triggertrigger phát tự động thực loạt phát tự động thực loạt các thao tác CSDL nhằm đảm bảo tính hợp lệ

các thao tác CSDL nhằm đảm bảo tính hợp lệ

dữ liệu

dữ liệu

Thông qua Thông qua triggertrigger, ta tạo kiểm tra , ta tạo kiểm tra

những mối quan hệ phức tạp bảng

những mối quan hệ phức tạp bảng

cơ sở liệu mà thân ràng buộc

cơ sở liệu mà thân ràng buộc

thực

(17)

1 Định nghĩa Trigger:

1 Định nghĩa Trigger:

CREATE TRIGGER

CREATE TRIGGER tên_trigger tên_trigger ON tên_bảng

ON tên_bảng

[

[ WITHWITH ENCRYPTIONENCRYPTION ] ]

FORFOR { [INSERT { [INSERT] [,] [UPDATE] [,] [UPDATE] [,] [DELETE] [,] [DELETE] } ] } AS

AS

[

[IF UPDATEIF UPDATE (tên_cột) (tên_cột) [

[AND UPDATEAND UPDATE (tên_cột) | OR UPDATE (tên_cột) | OR UPDATE (tên_cột)] ] (tên_cột)] ] các_câu_lệnh_của_trigger

(18)

Create Trigger

Create Trigger tg_NhatKyBanHang_insert tg_NhatKyBanHang_insert On

On NhatKyBanHangNhatKyBanHang FOR INSERT

FOR INSERT AS

AS

Update

Update MatHangMatHang

Set

Set SoLuong SoLuong = m.SoLuong - i= m.SoLuong - i.SoLuong.SoLuong From

From Mathang as Mathang as m Inner Join m Inner Join InsertedInserted asas ii

On

(19)

Với trigger vừa tạo trên, liệu bảng Với trigger vừa tạo trên, liệu bảng MatHang là:

MatHang là:

Insert Into

Insert Into NhatKyBanBang NhatKyBanBang

(NgayBan, NguoiMua, MaHang, SoLuong, GiaBan)

(NgayBan, NguoiMua, MaHang, SoLuong, GiaBan) Values

Values('5/5/2004', N'Trần Ngọc Thanh', 'H1', 10('5/5/2004', N'Trần Ngọc Thanh', 'H1', 10, 5200) , 5200)

Dữ liệu bảng MatHang sau ta thực câu Dữ liệu bảng MatHang sau ta thực câu lênh Insert trên:

(20)

Hai Hai bảng logicbảng logic InsertedInserted DeletedDeleted để sử dụng để sử dụng

trigger

trigger Cấu trúc hai bảng tương tự cấu Cấu trúc hai bảng tương tự cấu trúc bảng mà

trúc bảng mà triggertrigger tác động Dữ liệu hai tác động Dữ liệu hai bảng tuỳ thuộc vào câu lệnh tác động lên bảng làm

bảng tuỳ thuộc vào câu lệnh tác động lên bảng làm

kích hoạt

kích hoạt Trigger:Trigger:

Khi câu lệnh Khi câu lệnh DeleteDelete thực thi bảng, thực thi bảng, các dòng các dòng

dữ liệu bị xoá chép vào trong

dữ liệu bị xoá chép vào trong bảngbảng DeletedDeleted Trong trường hợp này

Trong trường hợp Bảng InsertedBảng Inserted khơng có liệu.khơng có liệu.

Dữ liệu trongDữ liệu trong bảng Insertedbảng Inserted sẽ dòng liệu bổ sẽ dòng liệu bổ

sung vào bảng gây nên kích hoạt đối với

sung vào bảng gây nên kích hoạt triggertrigger bằng câu lệnh

bằng câu lệnh InsertInsert Trong trường hợp Trong trường hợp này Bảng Bảng Deleted

(21)

Khi câu lệnh Khi câu lệnh UPDATEUPDATE thực thi bảng: thực thi bảng:

Các dòng liệu cũ chịu tác động câu lệnh Các dòng liệu cũ chịu tác động câu lệnh

được chép vào bảng

được chép vào bảng DeletedDeleted

Còn bảng Còn bảng InsertedInserted dòng sau dòng sau

cập nhật.

cập nhật.

Thay định Thay định triggertrigger kích hoạt kích hoạt

bảng, ta định

bảng, ta định triggertrigger kích hoạt thực kích hoạt thực hiện thao tác cụ thể việc thay đổi liệu

hiện thao tác cụ thể việc thay đổi liệu chỉ liên quan đến số cột định cột

liên quan đến số cột định cột

Trong trường hợp này, ta sử dụng mệnh đề Trong trường hợp này, ta sử dụng mệnh đề IFIF

UPDATE

UPDATE trigger trigger IF UPDATEIF UPDATE không sử dụng không sử dụng được câu lệnh

(22)

Xét lại ví dụ với hai bảng Xét lại ví dụ với hai bảng MatHangMatHang NhatKyBanHangNhatKyBanHang, ,

trigger kích hoạt ta tiến hành cập nhật

trigger kích hoạt ta tiến hành cập nhật

duy nhất

duy cột cột SoluongSoluong cho bảng cho bảng NhatKyBanHangNhatKyBanHang Create Trigger

Create Trigger tg_nhatkybanhang_update_soluong tg_nhatkybanhang_update_soluong

ON NhatKyBanHang

ON NhatKyBanHang

FOR UPDATE FOR UPDATE

AS

AS

IF UPDATE

IF UPDATE(soluong) (soluong)

Update

Update mathang mathang

Set

Set MatHang.soluong = MatHang.soluong - MatHang.soluong = MatHang.soluong -(

(InsertedInserted.soluong - soluong - DeletedDeleted.soluong) soluong)

From

From ( (Deleted Deleted Inner JoinInner Join Inserted Inserted OnOn Deleted

Deleted.stt = stt = InsertedInserted.stt) stt) Inner JoinInner Join MatHang MatHang OnOn

MatHang.MaHang =

(23)

Với Với triggertrigger ví dụ trên, câu lệnh: ví dụ trên, câu lệnh:

Update

Update NhatKyNanHang NhatKyNanHang

Set

Set soluong=soluong+20 soluong=soluong+20

Where

Where stt=1 stt=1

Sẽ kích hoạt

Sẽ kích hoạt Trigger Trigger ứng với mệnh đề ứng với mệnh đề IF UPDATEIF UPDATE

(soluong),

(soluong), câu lệnh Update trigger thực thi.câu lệnh Update trigger thực thi.

Tuy nhiên câu lệnh sau khơng kích hoạt Tuy nhiên câu lệnh sau khơng kích hoạt triggertrigger

Update

Update NhatKyNanHang NhatKyNanHang

Set

Set nguoimua=N'Mai Hữu Toàn' nguoimua=N'Mai Hữu Toàn'

Where

(24)

Bảo mật SQL Server

Bảo mật SQL Server 15

(25)

Windows Authentication Windows Authentication

Mode: Mode:

Windows Authentication:

Windows Authentication:

User phải User User phải User

được Windows quản lý được Windows quản lý

được truy nhập. được truy nhập.

Mixed Mode:Mixed Mode:

Windows and SQL Server

Windows and SQL Server

Authentication:

Authentication: User User Windows SQL Server để Windows SQL Server để

có thể thiết lập để truy có thể thiết lập để truy

nhập SQL Server nhập SQL Server

CHẾ ĐỘ BẢO MẬT – SECURITY MODE

(26)

Role đối tượng xác định nhóm thuộc tính để gán

Role đối tượng xác định nhóm thuộc tính để gán

quyền cho user tham gia khai thác SQL Server

quyền cho user tham gia khai thác SQL Server Server Role Server Role (xem bảng – Giáo trình –Tr.133)(xem bảng – Giáo trình –Tr.133)

Về giống Server Role giống Group Về giống Server Role giống Group

Windwos server

Windwos server

Một thành viên thành Server Role Một thành viên thành Server Role

có thể thêm User khác có Sever Role đó

có thể thêm User khác có Sever Role đóDatabase Role Database Role (xem bảng – Giáo trình –Tr.136)(xem bảng – Giáo trình –Tr.136)

Các quyền truy xuất CSDL phải cấp rõ ràng Các quyền truy xuất CSDL phải cấp rõ ràng

một system administrator thành viên

một system administrator thành viên

administrator role CSDL

administrator role CSDL

SERVER ROLE DATABASE ROLE

(27)

Người dùng SQL Server chia thành mức:

Người dùng SQL Server chia thành mức:

Người truy nhập vào SQL Server gọi

Người truy nhập vào SQL Server gọi LoginLogin, người , người khai thác CSDL gọi

khai thác CSDL gọi User.User. Mức Login:

Mức Login:

Là đối tượng quyền truy nhập vào SQL Server,

Là đối tượng quyền truy nhập vào SQL Server,

tùy theo chế độ bảo mật SQL Server mà

tùy theo chế độ bảo mật SQL Server mà

login account Windows NT hay SQL Server.

login account Windows NT hay SQL Server. Mức User:

Mức User:

User đối tượng khai thác CSDL, login xác

User đối tượng khai thác CSDL, login xác

định truy nhập vào SQL Server

định truy nhập vào SQL Server UserUser login ID login ID

tham gia khai thác CSDL.

tham gia khai thác CSDL.

QUẢN TRỊ NGƯỜI DÙNG

(28)

sp_addlogin

sp_addlogin ''login_namelogin_name' , 'password' , 'database_name' ' , 'password' , 'database_name'

sp_droplogin

sp_droplogin ''login_namelogin_name' '

sp_grantdbaccess

sp_grantdbaccess ''login_namelogin_name' '

sp_revokedbaccess

sp_revokedbaccess ''login_namelogin_name' '

sp_helprole sp_helprole

sp_addrolemember

sp_addrolemember ' 'role_namerole_name' , ' , 'login_name'login_name' '

sp_droprolemember

sp_droprolemember ' 'role_namerole_name' , ' , 'login_name'login_name' '

sp_helpsrvrole sp_helpsrvrole

sp_addsrvrolemember

sp_addsrvrolemember 'login_name'login_name ' , ' , ''role_namerole_name' '

sp_dropsrvrolemember

sp_dropsrvrolemember 'login_name'login_name ' , ' , ''role_namerole_name' '

Tạo User Gán Role câu lệnh Tạo User Gán Role câu lệnh

(29)

Vd

Vd1: 1:

sp_addlogin

sp_addlogin ''admin' , '123456' , 'QLyDiem' admin' , '123456' , 'QLyDiem' sp_grantdbaccess

sp_grantdbaccess 'admin' 'admin' sp_addrolemember

sp_addrolemember ' 'db_ownerdb_owner' , 'admin' ' , 'admin' sp_addsrvrolemember

sp_addsrvrolemember 'admin' ,'admin' , ' 'sysadminsysadmin' '

Tạo User Gán Role câu lệnh Tạo User Gán Role câu lệnh

(30)

Database role Database role

Server role Server role

Ngày đăng: 20/04/2021, 10:32