Chuong 13: Transaction v - PowerPoint PPT Presentation

About This Presentation
Title:

Chuong 13: Transaction v

Description:

Ch ng 13: Transaction v Triggers M c ti u Qu n l transaction v kho T o v th triggers qu n l vi c ch nh s a d li u Kh i ... – PowerPoint PPT presentation

Number of Views:72
Avg rating:3.0/5.0
Slides: 51
Provided by: FMi82
Category:

less

Transcript and Presenter's Notes

Title: Chuong 13: Transaction v


1
Chuong 13 Transaction và Triggers
2
M?c tiêu
  • Qu?n lý transaction và khoá
  • T?o và th? triggers d? qu?n lý vi?c ch?nh s?a d?
    li?u

3
Khái quát v? Transaction
  • SQL Server s? d?ng nh?t ký giao d?ch (transaction
    log) trong m?i database d? khôi ph?c l?i các giao
    d?ch
  • Transaction là 1 chu?i các thao tác du?c th?c thi
    nhu 1 don v? công vi?c riêng l? (single logical
    unit of work).

4
Khái quát v? Transaction
  • Transaction ph?i bao hàm 4 thu?c tính co b?n
    (ACID) sau
  • Atomicity m?t transaction ph?i là 1 don v? công
    vi?c nguyên t? ho?c t?t c? các s?a d?i d? li?u
    d?u du?c th?c thi ho?c không 1 s?a d?i nào du?c
    th?c thi.
  • Consistency Khi hoàn t?t, transaction ph?i cho
    d? li?u ? tình tr?ng ?n d?nh.
  • Isolation Nh?ng ch?nh s?a du?c làm b?i
    transaction hi?n hành ph?i du?c cô l?p kh?i
    nh?ng ch?nh s?a du?c làm b?i các transaction hi?n
    hành khác.
  • Durability sau khi 1 transaction hoàn t?t, ?nh
    hu?ng c?a nó s? c? d?nh lâu dài trong h? th?ng.

5
Transaction
  • Ð? hoàn thành các yêu c?u c?a 4 tính ch?t ACID
    trên, SQL Server cung c?p các ch?c nang sau
  • Qu?n lý Transaction (Transaction management)
  • Khoá (Locking)
  • Ghi nh?t ký (Logging)
  • Transaction log là nh?t ký du?c duy trì b?i
    chính SQL Server d? qu?n lý t?t c? các
    transaction
  • Explicit transaction là 1 transaction mà vi?c
    kh?i d?ng và k?t thúc transaction dó d?u du?c
    d?nh nghia m?t cách tu?ng minh

6
Ð?nh nghia transaction
  • BEGIN TRANSACTION transaction_name
  • ? Dùng d? dánh d?u vi?c b?t d?u c?a 1 transaction
  • COMMIT TRANSACTION transaction_name
  • Hay
  • COMMIT WORK
  • ? Dùng d? dánh d?u vi?c k?t thúc c?a 1
    transaction tu?ng minh

7
Chuy?n giao t? d?ng các transaction Autocommit
Transactions
  • Mode chuy?n giao t? d?ng (Autocommit mode) là
    mode qu?n lý transaction m?c d?nh c?a SQL Server.
  • M?t l?nh (statement) du?c chuy?n giao (committed)
    n?u nó th?c hi?n thành công hay s? tr? ngu?c v?
    l?i ban d?u (roll back) n?u nó g?p l?i.
  • L?nh BEGIN TRANSACTION vu?t quy?n mode t? d?ng
    chuy?n giao (autocommit) m?c d?nh.
  • SQL Server tr? v? l?i mode autocommit khi
    transaction tu?ng minh dã du?c chuy?n giao
    (commit) hay tr? ngu?c v? d?u (roll back), hay
    khi mode transaction ng?m d?nh b? t?t.

8
Ví d?
  • BEGIN TRANSACTION trnUpdatePosition
  • UPDATE Employee
  • SET cCurrentPosition '0001'
  • WHERE cEmployeeCode '000002'
  • UPDATE Position
  • SET iCurrentStrength iCurrentStrength 1
  • WHERE cPositionCode '0001'
  • COMMIT TRANSACTION trnUpdatePosition

9
Làm th? nào d? quay v? l?i tru?c nh?ng thay d?i
  • ROLLBACK TRANSACTION
  • transaction_name savepoint_name
  • Dùng d? quay ngu?c m?t transaction tu?ng minh hay
    ng?m d?nh v? l?i di?m b?t d?u, hay v? di?m d?ng
    (save-point) bên trong 1 transaction

10
Ví d?
  • BEGIN TRANSACTION
  • USE Pubs
  • UPDATE Titles
  • SET Royalty Royalty 20
  • WHERE type LIKE 'busin'
  • IF (SELECT MAX(Royalty) FROM Titles WHERE Type
    LIKE 'busin') gt25
  • BEGIN
  • ROLLBACK TRANSACTION
  • PRINT 'Transaction Rolled back'
  • END
  • ELSE
  • BEGIN
  • COMMIT TRANSACTION
  • PRINT 'Transaction Committed'
  • END

11
T?o di?m d?ng cho 1 TRANSACTION
  • L?nh SAVE TRANSACTION dùng d? d?t 1 di?m d?ng
    (save point) bên trong 1 transaction. Ði?m d?ng
    chia transaction thành 1 các ph?n khác nhau sao
    cho transaction có th? quay v? l?i di?m d?ng này
    n?u 1 ph?n c?a transaction b? lo?i b? có di?u
    ki?n.
  • Cú pháp
  • SAVE TRANSACTION
  • savepoint_name

12
Th?c thi m?t transaction v?i di?m d?ng
  • BEGIN TRANSACTION
  • UPDATE Employee
  • SET cCurrentPosition '0015'
  • WHERE cEmployeeCode '000002'
  • UPDATE Position
  • SET iCurrentStrength iCurrentStrength 1
  • WHERE cPositionCode '0015'
  • SAVE TRANSACTION trnTransaction1
  • UPDATE Requisition
  • SET siNoOfVacancysiNoOfVacancy - 10
  • WHERE cRequisitionCode'000004'
  • UPDATE Position
  • SET iCurrentStrengthiCurrentStrength10
  • WHERE cPositionCode'0015

13
Th?c thi m?t transaction v?i di?m d?ng
  • IF (SELECT iBudgetedStrength-iCurrentStrength
  • FROM Position WHERE cPositionCode '0015') lt0
  • BEGIN
  • PRINT 'Transaction 1 has been committed
  • but transaction 2 has not been committed.'
  • ROLLBACK TRANSACTION trnTransaction1
  • END
  • ELSE
  • BEGIN
  • PRINT 'Both the transactions have been
    committed.'
  • COMMIT TRANSACTION
  • END

14
S? d?ng các transactions
  • Vi?c nhóm 1 s? l?n các l?nh hay batch vào trong
    cùng 1 transaction có th? c?n tr? vi?c th?c thi
    h? th?ng.
  • N?u COMMIT và BEGIN không n?m trong cùng 1 batch,
    khi l?i x?y ra, m?t s? batch s? v?n ti?p t?c th?c
    thi. Ði?u này có th? làm cho d? li?u không nh?t
    quán (inconsistency).
  • Các tài nguyên du?c dùng trong transaction s?
    du?c gi?i phóng ch? khi transaction du?c hoàn
    t?t.

15
Các l?nh không h?p l?
  • Rollback (quay v?) ph?i có kh? nang undo, vì
    v?y các l?nh sau không du?c dùng
  • CREATE DATABASE, ALTER DATABASE
  • CREATE TABLE, ALTER TABLE, TRUNCATE TABLE
  • CREATE INDEX
  • T?r c? l?nh DROP
  • SELECT...INTO
  • GRANT or REVOKE
  • DISK INIT, RECONFIGURE, LOAD DATABASE, LOAD
    TRANSACTION

16
Ví d? v? s? d?ng khoá
  • User1 dang th?c hi?n các l?nh sau d? c?p nh?t
    di?m và ngày thi cho ?ng viên có mã là 000002
    trong b?ng ExternalCandidate.
  • BEGIN TRANSACTION
  • UPDATE ExternalCandidate
  • SET siTestScore 90
  • WHERE cCandidateCode'000002'
  • UPDATE ExternalCandidate
  • SET dTestDate getdate()
  • WHERE cCandidateCode '000002'

17
Ví d? v? s? d?ng khoá
  • Trong khi transaction trên dang th?c hi?n, User2
    mu?n l?p l?ch ph?ng v?n cho các ?ng viên, nhung
    không th? xem chi ti?t c?a các ?ng viên có di?m
    thi trên 80. User2 dang s? d?ng các l?nh sau
  • BEGIN TRANSACTION
  • SELECT from ExternalCandidate
  • WHERE siTestScore gt 80
  • UPDATE ExternalCandidate
  • SET dInterviewDate getdate() 2
  • WHERE siTestScore gt 80
  • Hãy xác d?nh t?i sao user2 không th? th?c thi
    transaction

18
Lock
  • Các b?ng s? b? khoá khi transaction trên máy 1
    dang th?c hi?n.
  • Khi transaction trên máy 1 k?t thúc b?ng cách
    dùng l?nh sau
  • COMMIT TRANSACTION
  • Thì transaction trên máy 2 m?i du?c th?c hi?n.

19
Các bài toán d?ng th?i- Concurrency Problems
  • N?u không dùng khoá và nhi?u user cùng truy xu?t
    vào 1 database, các r?c r?i có th? x?y ra n?u các
    transaction s? d?ng cùng lúc cùng m?t d? li?u.
    Các bài toán d?ng th?i bao g?m
  • M?t c?p nh?t (Lost updates).
  • Ph? thu?c chua du?c chuy?n giao (Uncommitted
    dependency).
  • Phân tích không nh?t quán (Inconsistent
    analysis).
  • Ð?c ?o (Phantom reads)

20
Locking Co ch? khoá
  • SQL Server s? d?ng co ch? khoá d? b?o d?m các
    giao d?ch và tính nh?t quán c?a database.
  • Locking d? tránh cho ngu?i dùng kh?i d?c d? li?u
    dang b? thay d?i b?i các ngu?i dùng khác, và
    tránh cho nhi?u ngu?i dùng kh?i thay d?i d? li?u
    cùng lúc.
  • M?c dù SQL Server th?c hi?n co ch? khoá t? d?ng,
    ngu?i dùng v?n có th? thiêt k? các ?ng d?ng hi?u
    qu? hon b?ng cách th?c hi?n các tùy bi?n v? khoá.

21
Locking Co ch? khoá
  • SQL Server có nhi?u m?c khóa khác nhau cho phép
    các lo?i tài nguyên khác nhau du?c khoá b?i
    transaction.
  • Ð? gi?m vi?c hao t?n khi th?c hi?n khóa, SQL
    Server khoá tài nguyên m?t cách t? d?ng ? m?c phù
    h?p v?i nhi?m v? c?n th?c hi?n.
  • Vi?c khoá ? m?c càng nh?, ví d? ? m?c các hàng
    c?a b?ng, làm tang tính d?ng th?i, nhung có phí
    t?n cao b?i vì nhi?u khoá du?c t?o ra n?u nhi?u
    hàng du?c khoá.
  • Vi?c khoá ? m?c càng l?n, ch?ng h?n m?c b?ng, s?
    gây ra lãng phí khi xét d?n tính d?ng th?i vì
    vi?c khoá c? b?ng s? h?n ch? vi?c truy xu?t d?n
    b?t k? ph?n nào c?a b?ng dó, nhung chi phí s?
    gi?m b?i vì ch? có 1 ít khoá c?n du?c qu?n lý.

22
Các lo?i khoá
  • SQL Server có th? t?o ra các lo?i khoá sau
  • RID (row identifier) khoá 1 hàng trong b?ng
  • Key khoá 1 hàng trong b?ng index
  • Table khoá t?t c? các hàng và ch? m?c c?a 1
    b?ng
  • Database du?c dùng khi luu tr? c? database
  • Page khoá 1 trang d? li?u hay trang ch? m?c
  • Extent khoá 1 nhóm các trang trong lúc phân ph?i
    không gian luu tr?

23
Các ki?u Lock
  • Shared Locks cho phép các transaction d?ng th?i
    cùng d?c chung 1 tài nguyên
  • Update Locks tránh kh?i b? deadlock
  • Exclusive Locks h?n ch? các transaction d?ng
    th?i kh?i truy xu?t cùng m?t tài nguyên
  • Intent Locks SQL Server mu?n d?t du?c khoá lo?i
    shared hay exclusive trên 1 s? tài nguyên m?c
    th?p hon theo th? t? phân c?p
  • Schema Locks SQL Server xem xét các khoá làm
    thay d?i chema khi b?t k? l?nh DDL (data
    definition language) du?c th?c thi trong b?ng

24
Deadlock
  • A deadlock là m?t hoàn c?nh mà trong dó 2 user (
    hay transaction) có các khoá trên các d?i tu?ng
    khác nhau, và m?i user dang ch? khoá trên d?i
    tu?ng c?a ngu?i dùng khác

25
Phát hi?n và k?t thúc Deadlocks
  • Vi?c phát hi?n deadlock du?c th?c thi b?i 1
    thread riêng bi?t d? qu?n lý khoá.
  • Thread qu?n lý khoá (lock monitor thread) quét
    qua các phiên làm vi?c dang d?i khoá. Trong lúc
    quét l?n d?u, SQL Server dánh d?u cho t?t c? các
    phiên làm vi?c dang d?i tài nguyên. Khi SQL
    Server quét qua các phiên làm vi?c ? l?n th? hai,
    vi?c dò tìm deadlock d? quy b?t d?u. N?u phát
    hi?n ra có 1 chu?i các yêu c?u khoá, SQL Server
    lo?i b? transaction nào mà ít t?n kém nh?t và
    dánh d?u transaction dó nhu 1 n?n nhân c?a
    deadlock (deadlock victim).
  • Nh? vào co ch? quét các session d? phát hi?n
    deadlock, SQL Server k?t thúc deadlock nh? ch?n
    m?t cách t? d?ng 1 user nào dó làm n?n nhân c?a
    deadlock.

26
Khái quát v? trigger
  • SQL Server cung c?p hai co ch? co b?n d? b?o d?m
    các quy t?c nghi?p v? (business rules) và b?o
    toàn d? li?u ( data integrity)
  • Các ràng bu?c (Constraint)
  • Triggers.
  • Trigger là m?t lo?i th? t?c d?c bi?t ch?y t? d?ng
    khi d? li?u trong 1 b?ng d?c bi?t nào dó b? ch?nh
    s?a hay 1 s? ki?n d?c bi?t nào dó x?y ra.

27
So sánh gi?a trigger và Constraint
  • Trigger có th? th?c hi?n m?i ch?c nang c?a
    constraint tuy nhiên không ph?i lúc nào dùng
    trigger cung là cách t?t nh?t
  • Các trigger thu?ng dùng nh?t khi m?t s? quy t?c
    nghi?p v? không th? th?c hi?n du?c b?i các
    constraint. Xét ví d? sau
  • Constraint lo?i CHECK có th? du?c dùng d? xét
    tính h?p l? c?a 1 c?t này hay c?t khác trong cùng
    b?ng. Nhung n?u ?ng d?ng c?n xét tính h?p l? c?a
    1 c?t trong b?ng v?i 1 c?t trong b?ng khác thì
    không th? dùng constraint du?c mà ph?i dùng
    trigger.
  • Các constraint có th? thông báo l?i thông qua h?
    th?ng thông báo l?i tiêu chu?n. N?u ?ng d?ng yêu
    c?u các thông báo tùy ch?n và qu?n lý l?i ph?c
    t?p hon, ta c?n ph?i dùng trigger.

28
Các tính ch?t c?a Trigger
  • M?t trigger là m?t kh?i mã ch?a 1 t?p h?p các
    l?nh T-SQL s? du?c kích ho?t d? dáp ?ng m?t hành
    d?ng ( action) nào dó.
  • Các trigger có th? l?ng nhau lên d?n 32 m?c.

29
Các tính ch?t c?a Trigger
  • Nó du?c kích ho?t t? d?ng b?i SQL server khi
    b?t k? m?t l?nh s?a d?i d? li?u du?c th?c hi?n
  • Nó giúp tránh nh?ng thay d?i d? li?u hông dúng,
    không nh?t quán
  • Nó không th? g?i m?t cách tu?ng minh nhu 1 th?
    t?c thông thu?ng (stored procedure)
  • Nó không th? tr? v? d? li?u cho ngu?i dùng

30
T?o trigger
  • Trigger th?c thi ph? thu?c vào hành d?ng mà
    trigger du?c t?o.
  • Có 2 lo?i trigger
  • FOR/AFTER s? kích ho?t sau khi l?nh INSERT,
    UPDATE hay DELETE du?c th?c thi d?i v?i b?ng
  • INSTEAD OF s? du?c th?c thi thay cho l?nh làm
    cho trigger ho?t d?ng
  • M?i trigger s? du?c k?t h?p v?i 1 b?ng hay view

31
T?o trigger
  • Cú pháp
  • CREATE TRIGGER trigger_name
  • ON table_name
  • FOR INSERT DELETE UPDATE
  • AS sql_statements
  • Thông tin liên quan d?n trigger du?c vi?t vào các
    b?ng h? th?ng sysobjects và syscomments

32
Các b?ng Magic
  • B?t k? lúc nào m?t trigger ho?t d?ng d? dáp ?ng
    l?nh INSERT, DELETE, hay UPDATE, hai b?ng d?c
    bi?t du?c t?o ra. Ðó là các b?ng magic, có tên là
    inserted và deleted
  • B?ng inserted ch?a 1 b?n sao t?t c? các b?n ghi
    du?c chèn vào b?ng trigger.
  • B?ng deleted ch?a 1 b?n sao t?t c? c1c b?n ghi
    v?a du?c xoá kh?i b?ng trigger
  • B?t k? khi nào l?nh c?p nh?t du?c th?c hi?n,
    trigger s? s? d?ng c? hai b?ng inserted và
    deleted.

33
B?ng Inserted and deleted
34
T?o m?t trigger cho l?nh INSERT
  • Trigger dùng cho l?nh INSERT s? du?c kích ho?t
    b?t c? lúc nào có 1 b?n ghi m?i du?c chèn vào
    b?ng trigger
  • Khi l?nh INSERT du?c th?c hi?n, m?t hàng m?i s?
    du?c thêm vào c? hai b?ng b?ng trigger và b?ng
    inseerted.

35
Ví d? c?a insert trigger
  • CREATE TRIGGER trgInsertRequisition
  • ON Requisition FOR insert AS
  • DECLARE _at_VacancyReported int
  • DECLARE _at_ActualVacancy int
  • SELECT _at_ActualVacancy
  • iBudgetedStrength - iCurrentStrength
  • FROM Position Join Inserted on
  • Position.cPositionCode Inserted.cPositionCode
  • SELECT _at_VacancyReported inserted.siNoOfVacancy
  • FROM inserted
  • IF(_at_VacancyReported gt _at_Actualvacancy)
  • BEGIN
  • PRINT 'The actual vacancies are less than the
    vacancies
  • reported. Hence, cannot insert.'
  • ROLLBACK TRANSACTION
  • END
  • RETURN

36
Ví d? c?a insert trigger
  • Ch?y th? trigger
  • INSERT Requisition
  • VALUES('000003','0001',getdate(), getdate() 7,
    '0001', 'North',20)

37
Trigger cho l?nh DELETE
  • Trigger c?a l?nh DELETE s? du?c kích ho?t b?t k?
    lúc nào có l?nh xoá các hàng kh?i b?ng trigger
  • Có 3 cách d? th?c thi vi?c b?o toàn tham chi?u
    b?ng cách dùng trigger c?a l?nh DELETE
  • Phuong pháp xoá song song (Cascade)
  • Phuong pháp h?n ch? (Restrict)
  • Phuong pháp gán null (Nullify)

38
Ví d? DELETE trigger
  • CREATE TRIGGER trgDeleteContractRecruiter
  • ON ContractRecruiter FOR delete
  • AS
  • PRINT 'Deletion of Contract Recruiters is not
    allowed'
  • ROLLBACK TRANSACTION
  • RETURN

39
Trigger c?a l?nh UPDATE
  • Trigger này d?oc kích ho?t b?t k? lúc nào có 1
    s?a d?i nào dó trong b?ng trigger
  • Ví d?
  • CREATE TRIGGER trgUpdateContractRecruiter
  • ON ContractRecruiter FOR UPDATE
  • AS
  • DECLARE _at_AvgPercentageCharge int
  • SELECT _at_AvgPercentageCharge avg(siPercentageChar
    ge)
  • FROM ContractRecruiter
  • IF(_at_AvgPercentageCharge gt 11)
  • BEGIN
  • PRINT 'The average cannot be more than 11'
  • ROLLBACK TRANSACTION
  • END
  • RETURN

40
(No Transcript)
41
Hàm Update
  • CREATE TRIGGER trgUpdatePub
  • ON Publishers FOR UPDATE
  • AS
  • IF UPDATE (Pub_Id)
  • BEGIN
  • PRINT 'Publisher ID cannot be modified'
  • ROLLBACK TRAN
  • END

42
Trigger và b?o toàn d? li?u
  • Trigger có th? du?c dùng d? th?c hi?n các quy
    t?c nghi?p v? và các quy lu?t b?o toàn d? li?u.
  • N?u có b?t k? thay d?i nào trong b?ng chính
    (master table) thì trigger s? làm cho nh?ng thay
    d?i dó cung x?y ra song song trong b?ng ph? thu?c
    (dependent table)
  • Ví d? 1
  • CREATE TRIGGER trgDeleteTitle
  • ON Titles FOR DELETE
  • AS
  • DELETE TitleAuthor FROM TitleAuthor t JOIN
    Deleted d
  • ON t.Title_Id d.Title_Id
  • N?u b?t k? thay d?i nào vi ph?m quy lu?t b?o
    toàn tham chi?u,thì trigger s? làm cho t?t c? các
    thay d?i này b? t? ch?i, và lo?i tr? m?i c? g?ng
    s?a d?i d? li?u trong database
  • Trigger cho phép th?c hi?n các ràng bu?c ph?c
    t?p
  • Trigger có th? th?c hi?n 1 hành d?ng d?c bi?t
    ph? thu?c vào các ch?nh s?a x?y ra trong b?ng

43
Ví d? 2
  • CREATE TRIGGER trgUpdateDelete
  • ON TitleAuthor
  • FOR INSERT, UPDATE
  • AS
  • / Ki?m tra s? t?n t?i c?a title ID trong b?ng
    titles /
  • If (SELECT COUNT () FROM Titles t JOIN inserted
    i
  • ON t.Title_Id i.Title_Id) 0
  • BEGIN
  • PRINT 'Invalid title ID entered.'
  • ROLLBACK TRAN
  • END
  • / Ki?m tra s? t?n t?i c?a author ID trong b?ng
    authors /
  • If (SELECT COUNT() FROM Authors t JOIN inserted
    i
  • ON t.Au_Id i.Au_Id) 0
  • BEGIN
  • PRINT 'Invalid author ID entered.'
  • ROLLBACK TRAN
  • END

44
S? d?ng nhi?u trigger
  • Có th? t?o ra nhi?u trigger cho cùng 1 l?nh DML
    trên cùng 1 b?ng
  • Vi?c s? d?ng nhi?u trigger s? giúp ngu?i dùng có
    th? th?c thi nhi?u quy t?c nghi?p v?, m?i quy t?c
    du?c th?c thi b?ng 1 trigger
  • Các trigger du?c th?c thi theo th? t? mà chúng
    du?c t?o ra.

45
Các trigger AFTER và INSTEAD OF
  • Trigger AFTER có th? du?c t?o ra cho b?t k? b?ng
    nào v?i các l?nh INSERT, UPDATE, hay DELETE tuong
    t? nhu các trigger thông thu?ng khác.
  • Trigger AFTER s? kích ho?t sau khi l?nh DML liên
    quan t?i nó du?c th?c thi
  • Trigger INSTEAD OF có th? du?c dùng d? th?c thi
    m?t hành d?ng nhu l?nh DML trên 1 b?ng hay view
    khác. Trigger này có th? du?c t?o ra cho c? b?ng
    và view
  • Khác v?i trigger AFTER, không th? t?o nhi?u hon 1
    trigger INSTEAD OF cho 1 l?nh DML trên cùng 1
    b?ng hay view

46
Các ví d?
  • Ví d? 1
  • CREATE TRIGGER trgDeleteTitles
  • ON Titles AFTER DELETE
  • AS
  • print 'Deletion successful'
  • Ví d? 2
  • CREATE TRIGGER trgPublisherDelete
  • ON Publishers INSTEAD OF DELETE
  • AS
  • print 'Master records cannot be deleted'

47
Trigger và l?nh update view
  • Hãy kh?o sát view sau
  • CREATE VIEW vwEmployeeCandidate
  • AS
  • SELECT Employee.cCandidateCode, vFirstName,
    vLastName, cPhone, siTestScore
  • FROM Employee JOIN InternalCandidate
  • ON Employee.cCandidateCode InternalCandidate.cCa
    ndidateCode
  • N?u mu?n c?p nh?t view b?ng l?nh sau thì s? nh?n
    du?c thông báo l?i
  • UPDATE vwEmployeeCandidate
  • SET cPhone '(614)324-1111', siTestScore 90
  • WHERE cCandidateCode '000018'
  • Lý do????

48
Trigger và l?nh update view
  • T?o trigger INSTEAD OF sau
  • CREATE TRIGGER trgEmployeeCandidate
  • ON vwEmployeeCandidate INSTEAD OF UPDATE
  • AS
  • DECLARE _at_Phone char(15)
  • DECLARE _at_TestScore int
  • DECLARE _at_CandidateCode char(6)
  • SET _at_Phone (SELECT cPhone FROM INSERTED)
  • SET _at_TestScore (SELECT siTestScore FROM
    INSERTED)
  • SET _at_CandidateCode (SELECT cCandidateCode FROM
    INSERTED)
  • UPDATE Employee
  • SET cPhone_at_Phone
  • WHERE cCandidateCode_at_CandidateCode
  • UPDATE InternalCandidate
  • SET siTestScore _at_TestScore
  • WHERE cCandidateCode_at_CandidateCode
  • ?L?nh update cho view trên s? du?c th?c thi mà
    không có l?i nào

49
Ch?nh s?a trigger
  • ALTER TRIGGER owner.trigger_name
  • ON owner.table_name
  • FOR AFTER INSTEAD OF DELETE , INSERT
    ,UPDATE
  • AS
  • IF UPDATE (column)
  • AND OR UPDATE (column
  • sql_statements

50
M?t s? l?nh khác v? triggers
  • Ð? c?m t?t c? trigger c?a 1 b?ng
  • ALTER TABLE table_name DISABLE TRIGGER ALL
    trigger_name
  • Ð? cho phép t?t c? các trigger c?a 1 b?ng
  • ALTER TABLE table_name ENABLE TRIGGER ALL
    trigger_name
  • Ð? xoá trigger
  • DROP TRIGGER trigger_name
Write a Comment
User Comments (0)
About PowerShow.com