データベース・サーバのトランザクション・モード
≪データベース・トランザクションの自動コミット・モード|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
3つのトランザクション:転送元:http://sswh.iteye.com/blog/1019104
ロックメカニズムの説明:回転:http://www.iteye.com/topic/186542
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: