zoukankan      html  css  js  c++  java
  • Trigger study

    Trigger study

    目录

    Trigger introduction. 1

    The advantage and disadvantage of trigger. 1

    The advantage of trigger. 1

    The disadvantage of trigger. 2

    How to Create a Trigger. 2

    The virtual table of inserted and deleted. 3

    Recursive Triggers. 4

    Direct Recursive Triggers. 4

    Indirect Recursion Triggers. 4

     

    Trigger introduction

    Trigger is a special kind of stored procedure, similar to other programming languages function events, SQL Server allows for the INSERT, UPDATE, DELETE to create triggers, when in the table (view) to insert, update, delete records, trigger one or a series of T-SQL statement and to do something that user defined.

    A trigger is used to update table automatic, and it can send an e-mail to database administrator that notice the databases’ situation.

    The advantage and disadvantage of trigger

    There is some advantage and disadvantage of trigger.

    The advantage of trigger

    1.        Pre-compiled has been optimized, more efficient. To avoid the SQL statement in the network transmission and then to explain the low efficiency.

    2.        The trigger has a good security. There will be no SQL statement into the problem.

    The disadvantage of trigger

    1.        Portability is the stored procedures and triggers the greatest shortcomings.

    2.        Occupy too much server-side resources, create a tremendous pressure on the server

    3.        Can’t do DDL.

    4.        Flip-flop troubleshooting difficulties and the data easily lead to inconsistent, the latter maintaining inconvenient.

    How to Create a Trigger

    You can create a trigger like following statement.

    CREATE TRIGGER trigger name

     ON table name or view_name

     FOR INSERT, UPDATE or DELETE

     AS

     T-SQL statement

     

    In this above code ,the trigger is a keyword to create a trigger. And the for means the trigger is an after trigger ,the word insert ,update and delete is to sign the trigger is trigger by update, insert , delete or they trigger by all of them.

    For example,

    CREATE TRIGGER update_test

    ON TABLE tb_test

    FOR UPDATE

    AS

    UPDATE test1 set ss = 1 where ID=1.

    And this above code just shows create a simple trigger on table tb_test.When update table tb_test,the table test1 are update too.

     

    Sometimes we should to judge a column is update or not. Then we can create a trigger like the following code.

    CREATE TRIGGER update_test1

    ON TABLE tb_test

    FOR UPDATE

    AS

    IF UPDATE (ID)

      PRINT 'The ID of tb_test is update'

    The above code is limit the trigger to a field.That used to check this field’s situation.

    There is a instead of trigger sometime are used to create.You can create a instead  of trigger like following statement.

    Create trigger trigger_name

    On table_name or view_name

    Instead of insert, update or delete

    As

    T-SQL statement

    If a trigger on view, you can update the view instead of update the entity table.

    Then you can use the instead of trigger to do it.

    The following code is shows how to create a instead of trigger.

    create trigger view_test

    on vw_test

    instead of update

    as

    begin

    declare @id int

    declare @name varchar(50)

    set @id = (select inserted.numbers from inserted)

    set @name = (select inserted.names from inserted)

        update table1 set names=@name,ID=@id

    end

     

    update vw_test set names='kangyi' where numbers=1002

    The virtual table of inserted and deleted

    Both inserted table and deleted tables is all virtual table. The inserted table is used to an insert or update trigger, if you add a record into table, the inserted table access the add information, if you update a record of table, the inserted table accesses the update information. The deleted table accesses the delete information of a table’s records. All of them are useful. The following code is shows the inserted table.

    create trigger insert_test1

    on table tb_test

    after insert

    as

    begin

        insert into test1(ID) select inserted.ID from inserted

    end

     

    create trigger update_test1

    on table tb_test

    after update

    as

    begin

    declare @id int

    declare @name varchar(50)

    set @id = select inserted.ID from inserted

    set @name = select inserted.names from inserted

        update test1 set names=@name where ID=@id

    end

    The following code shows the deleted table.

    create trigger delete_test1

    on table tb_test

    after delete

    begin

        insert into delete_table(ID,Names) select deleted.ID,deleted.Names from deleted

    end

    Recursive Triggers

    Direct Recursive Triggers

    Table A on the trigger changes such as insert, delete or update table A of data, the resulting in Table A of flip-flop once again trigger a direct recursive call this state of affairs.

    The following code shows a direct recursive triggers on table tb_test.

    create trigger directRecursive_test

    on tb_test

    for update

    as

    begin

    declare @id int

    declare @name varchar(50)

    set @id = (select inserted.numbers from inserted)

    set @name = (select inserted.names from inserted)

        update tb_test set names=@name,numbers=@id

    end

     Indirect Recursion Triggers

    Table A on the table B trigger that to update table data, the resulting in Table B trigger flip-flop, and table B trigger further changes in table A of data, the resulting in Table A Trigger will trigger again, this state of affairs called indirect recursion.

    The following code shows a indirect recursion triggers on table tb_test and table table1.

    create trigger view_test

    on table1

    for update

    as

    begin

    declare @id int

    declare @name varchar(50)

    set @id = (select inserted.numbers from inserted)

    set @name = (select inserted.names from inserted)

        update tb_test set names=@name,numbers=@id

    end

     

    create trigger view_test

    on tb_test

    for update

    as

    begin

    declare @id int

    declare @name varchar(50)

    set @id = (select inserted.numbers from inserted)

    set @name = (select inserted.names from inserted)

        update table1 set names=@name,ID=@id

    end

    The recursive triggers may be made a deadlock. If you want to use the recursive triggers, make sure control your code correctly, or it may be affect the database efficiency.

  • 相关阅读:
    LeetCode-380 Insert Delete GetRandom O(1)
    LeetCode-378 Kth Smallest Element in a Sorted Matrix
    LeetCode-373 Find K Pairs with Smallest Sums
    LeetCode-372 Super Pow
    LeetCode-365 Water and Jug Problem
    LeetCode-352 Data Stream as Disjoint Intervals
    LeetCode-347 Top K Frequent Elements
    LeetCode-341 Flatten Nested List Iterator
    LeetCode-337 House Robber III
    【问题】win10开机慢 底部任务栏出来慢
  • 原文地址:https://www.cnblogs.com/kangyi/p/1569635.html
Copyright © 2011-2022 走看看