データベース・サーバのトランザクション・モード


≪データベース・トランザクションの自動コミット・モード|Database Transaction Automatic Submit Mode|oem_src≫:トランザクションをサポートするデータベース・サービスでは、通常、データベース・トランザクションが実行されるときの自動コミット・モードがあり、デフォルトのコミット・モードは一般的にオンになります.
ServerとMySQL 5.0以降のInnoDBテーブルではこのようになっています.トランザクションをテストする場合は、まずトランザクションの自動コミットモードを手動で閉じる必要があります.SQL Serverのトランザクションは次のとおりです.http://software.it168.com/manual/sqlserver/ac_8_md_06_35bq.htm
      
        Microsoft® SQL Server™          。   Transact-SQL       ,       。           ,      ;      ,      。                    ,SQL Server              。         ADO、OLE DB、ODBC   DB-Library      。

SQL Server     BEGIN TRANSACTION         ,              ,            。          ,           ,SQL Server           。

        
        ,      SQL Server           ,        SQL   。                              。        SQL Server       ,                。                        ,                        。    ,      ,           INSERT        。           INSERT             。

USE pubs
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3))
GO
INSERT INTO TestBatch VALUES (1, 'aaa')
INSERT INTO TestBatch VALUES (2, 'bbb')
INSERT INTO TestBatch VALUSE (3, 'ccc')  /* Syntax error */
GO
SELECT * FROM TestBatch   /* Returns no rows */
GO

       ,    INSERT             。      INSERT            ,                 。

USE pubs
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3))
GO
INSERT INTO TestBatch VALUES (1, 'aaa')
INSERT INTO TestBatch VALUES (2, 'bbb')
INSERT INTO TestBatch VALUES (1, 'ccc')  /* Duplicate key error */
GO
SELECT * FROM TestBatch   /* Returns rows 1 and 2 */
GO

SQL Server          ,              。       ,    INSERT        ,     INSERT                          ,          TestBatch   。

USE pubs
GO
CREATE TABLE TestBatch (Cola INT PRIMARY KEY, Colb CHAR(3))
GO
INSERT INTO TestBatch VALUES (1, 'aaa')
INSERT INTO TestBatch VALUES (2, 'bbb')
INSERT INTO TestBch VALUES (3, 'ccc')  /* Table name error */
GO
SELECT * FROM TestBatch   /* Returns rows 1 and 2 */
GO


3つのトランザクション:転送元:http://sswh.iteye.com/blog/1019104
      
SQLServer      :      、         。  ,          “SET IMPLICIT_TRANSACTIONS {ON|OFF}”  。
         。        : 

  

                  ,                  ,                。
 
                 ,     begin commit    (       )。 
SQLServer     ,             。 
SQLServer  SQL92       (          SELECT           ),   : 
READ UNCOMMITTED 
READ COMMITTED(  ) 
REPEATABLE READ 
SERIALIZABLE 

    :“  ”      ,        ,            。@@trancount           commit  (          )。
 Begin transaction [name]             ,     begin      。(   @trancount+1),              (             ),                  。
 Commit transaction [name]        。 @@trancount=1     ,      。      (@@trancount=0) ,        。     ,   @@trancount-1。
 Rollback transaction [name]      ,     ,                 。              。      (@@trancount=0) ,      。      ,     (@@trancount)    ;           ,  @@trancount=0(        )。
 Save transaction <name>            。      。        ,       。 
             @@trancount    。       : 

  

  @@TRANCOUNT                  ,      266     。
 
                     SELECT              : 
        ,insert/delete/update                   ,     ,           。 
 select              ,      。 
READ UNCOMMITTED ,select   ,  ,              ,       。 
READ COMMITTED ,select      ,           ,      (       ),select       ,  ,      。select       ,       (      );         ,           ,           。
 REPEATABLE READ ,                   。            ,           。                        ,        。
 SERIALIZABLE ,          ,          。         。 
        : 

  

 •   :   (S)           (SELECT)     。        (S)   ,             。        ,            (S)  ,                     ,                    (S)  。
 •   :        ,   INSERT、UPDATE   DELETE。   (X)                 。              (X)       。
 •     :               ,        。                   ,                      。                       。
 •   :                         ,       。            , SQL Server             。 

ロックメカニズムの説明:回転:http://www.iteye.com/topic/186542
              : 
1.     
2.         
         ,            。           。         ,                 ,         ,  : 
1)     
A,B              ,                       
2)   
A        ,B        , A                 ,      ,  B                     
3)      
B          ,  ,A        ,  A                    
SQL SERVER           ,      ,          。SQLSERVER  “ ”             。 

 、     
 (LOCKING)           。                、             。              (     )   ,        ,     ,      ,          ,          ,           。      ,        。
                  ,              

 、     
SQL Server 2000        ,                。            ,SQL Server                。        (   )              ,          ,         。        (   )           ,                         ,        ,          。SQL Server      、 、    、 、    。
 •         
•RID           
•Key           
•Page                
•Extent                
•Table         
•Database             

       ,          。           ,     ;           ,     。 
         ,                          。  ,                     ,                   ,               ,          ,      。  , SQL Server ,      (lock escalation)。
              ,                    ,         。 SQL Server           ,        ,                  。
         , SQL Server ,                     ,       。 

 、     
         

       •  (S)            (    ), SELECT   
•  (U)          。          、                         。 
•  (X)         ,   INSERT、UPDATE DELETE。                  
•     Microsoft SQL Server              ,                     .  : 
           ,                    。     ,                        。 
       :    (IS)、    (IX)        (SIX) •                  。       :    (Sch-M)     (Sch-S)
 •     (BU)               TABLOCK      



  SQL Server       
1              
              ,                                        
    SET DEADLOCK_PRIORITY                 。 
Syntax: 
SET DEADLOCK_PRIORITY { LOW | NORMAL} 
  LOW             ,      ,            。 
2               。 
@@LOCK_TIMEOUT               ,      
SET LOCK_TIMEOUT                        。           LOCK_TIMEOUT    ,            ,        "           "  1222      
    
1)          1,800   。 
SET LOCK_TIMEOUT 1800 
2)           
     sp_indexoption                    
3)         
SET   TRANSACTION   ISOLATION   LEVEL 

         
1    EXEC SP_LOCK          
2        Ctrl+2         

 、   sql   



Java    
1.begin tran  
2.update titles set title_idid=title_id  where 1=2  
3.if (selectavg(price)fromtitles)>$15  
4.begin  
5.update titles set price=price*1.10  
6.where price<(select avg(price)from titles)  
7.end  
8.commit tran  
 

update titles set title_idid=title_id  where 1=2,             ,          ? 
   where        ,          false。          ,           SARG,                        。      ,where        false ,            ,                。
                 ,                    ,      ,      holdlock         。 
  ,                  ,           。  ,         ,       :                     。 
  ,      ,              price。 

         
1      ,             ,         ; 
2              , :3  -10  ;    ,        ,      ; 
3    SP       (  @error) 
4       SQL SERVER       。        
5     ,           ; 
1)          
2)            ,              。 
3)      。             ,       。    /        ,             ,        ,       。 
4)         。               /      ,                           。          :              ,                。         ,              (     1 ),        ;                 、  ,              ,  ,                 
 5)         。                 ,                        ,           。          :   ,              ;   ,         。
 6)            。                                   ,SQL92   4      :    、   、        。            ,    ,                                ,                 ,         。
 7)  Bound Connections。Bound connections                  ,                            ,                       。
 8)                      。  

     、  、      
1            



Java    
1.SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED  
2.SELECT * FROM table1 ROWLOCK WHERE A = 'a1'  
 
2           
select col1 from   (tablockx) where 1=1 ; 
          ,        , commit rollback   
3.   
   



Java    
1.create table table1(A varchar(50)  not  null, B varchar(50) ,C varchar(50));  
2.create table table2(D varchar(50),E varchar(50))  
3.insert table1 (A,B,C) values(‘a1’,’b1’,’c1’);  
4.insert table1 (A,B,C) values(‘a2’,’b2’,’c2’);  
5.insert table1 (A,B,C) values(‘a3’,’b3’,’c3’);  
6.insert table2 (D,E) values(‘d1’,’e1’);  
7.insert table2 (D,E) values(‘d2’,’e2’);  
 
1)    



Java    
1.-- A     table1 ,    ,           
2.begin tran  
3.update table1 set A='aa' where B='b2';  
4.waitfor delay '00:00:30'; --  30   
5.commit tran  
6.-- A     table2   
7.begin tran  
8.select * from table1 where B='b2';  
9.commit tran  
           , select      update            30  
2)    



Java    
1.-- A     table1 ,    ,    ,                 
2.begin tran  
3.select * from table1 holdlock where B='b2' ;  
4. -holdlock      
5.waitfor delay '00:00:30';--  30   
6.commit tran  
7.-- A     table1 ,   table1   
8.begin tran  
9.select A,C from table1 where B='b2';  
10.update table1 set A='aa' where B='b2';  
11.commit tran  
           , B    select      , update                            30  
3)   



Java    
1.-- A     table1 ,    30 ,   table2 ;  
2.begin tran  
3.update table1 set A='aa' where B='b2';  
4.--    Table1        ,             。  
5.waitfor delay '00:00:30';  
6.--      
7.update table2 set D='d5' where E='e1' ;  
8.commit tran  
9.-- B     table2 ,    10 ,   table1 ;  
10.begin tran  
11.update table2 set D='d5' where E='e1';  
12.--    Table2        ,               
13.waitfor delay '00:00:10'  
14.--      
15.update table1 set A='aa' where B='b2' ;  
16.commit tran  
           ,A,B              ,        。 

 、sqlserver       
sqlserver                
1. HOLDLOCK:          ,        ,                  。  
2. NOLOCK:          ,        ,            “   ”,         SELECT  。   
3. PAGLOCK:      (          ) 
4. READCOMMITTED                         。     ,SQL Server 2000          。 
5. READPAST:           ,                              ,              ,READPAST     READ COMMITTED            SELECT    
 6. READUNCOMMITTED:   NOLOCK。    
7. REPEATABLEREAD:              。  
8. ROWLOCK:     ,                。 
9. SERIALIZABLE:                          。    HOLDLOCK。 
  10. TABLOCK:       ,             ,SQL Server             ,        HOLDLOCK,             。
 11. TABLOCKX:          ,                     ,             。 
12. UPDLOCK :              (update lock)        ,                  ,  UPDLOCK             (            ),             ,                   
 SELECT * FROM table WITH (HOLDLOCK)          ,        
SELECT * FROM table WITH (TABLOCKX)          ,      

 、      

                ,   sql server                       
sp_getapplock:          
sp_releaseapplock: