我有桌子:[dbo]。[产品] 数据:
ID Name
01 Keyboard
02 Monitor
03 Mouse
04 RAM
05 HDD
然后我有一个交易:
BEGIN TRAN
UPDATE Product SET Name = 'XXX' WHERE ID = 01
SELECT Name as Name_in_Trans FROM Product WHERE ID = 01
COMMIT TRAN
SELECT Name as Name_out_Trans FROM Product WHERE ID = 01
结果:
Name_in_Trans
XXX
Name_out_Trans
XXX
我不知道这个结果是正确的还是不正确的!
答案 0 :(得分:1)
第一个选择与更新在同一个事务中,因此它将在该事务中看到任何未提交的数据 - 在您的情况下,为XXX
值。第二个选择是在提交事务之后,此时任何查询都应该看到更新的数据。长话短说 - 两个查询都应该看到XXX
,这是预期的行为。
答案 1 :(得分:0)
这是正确的。
BEGIN TRAN
UPDATE Product SET Name = 'XXX' WHERE ID = 01
SELECT Name as Name_in_Trans FROM Product WHERE ID = 01
COMMIT TRAN
SELECT Name as Name_out_Trans FROM Product WHERE ID = 01
BEGIN TRAN
将启动您的交易,COMMIT TRAN
会将交易提交到数据库。
UPDATE
正在将Name
表格的Product
字段设置为“XXX”,仅在ID
字段为01的字段上设置。已经提交,但由于它位于其中间,SELECT
将显示该更改,直到事务回滚。
提交事务后,该更改已提交到数据库,因此从Name
表中选择Product
字段仍将显示“XXX”,因为它现在在数据库中有效。