青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

Update操作一定是先Delete再Insert嗎?

轉載:http://www.cnblogs.com/liuxinhuahao/archive/2010/01/15/1648749.html

Update操作一定是先DeleteInsert嗎?

Update在數據庫中的執行是怎么樣的?“Update操作是先把數據刪除,然后再插入數據”。在網上看了很多也都是這么認為的。但在查閱到一些不同看法的時候我進行了一些驗證,發現還有其它的情況。

這里我分三種情況來講:

1、更改沒有索引列的字段,更改前和更改后的字符串長度一樣;
2
更改沒有索引列的字段,更改后比更改前的字符串長
3
、更改聚集索引字段。

一、 創建表、索引和數據:

--創建表MyTable1

IF EXISTS(SELECT * FROM sysobjects WHERE [name]='MyTable1' AND [type]='u')

    DROP TABLE MyTable1

GO

CREATE TABLE MyTable1

(

    ID     INT,

    SName  VARCHAR(20)  

);

--創建索引

CREATE UNIQUE CLUSTERED INDEX IX_ID ON MyTable1(ID);

 

INSERT INTO MyTable1 values( 1,'aaaa')

INSERT INTO MyTable1 values( 2,'bbbb')

INSERT INTO MyTable1 values( 3,'cccc')

GO

 

SELECT * FROM MyTable1 mt

GO

 

--創建表MyTable2

IF EXISTS(SELECT * FROM sysobjects WHERE [name]='MyTable2' AND [type]='u')

    DROP TABLE MyTable2

GO

CREATE TABLE MyTable2

(

    ID     INT,

    SName  VARCHAR(20)  

);

--創建索引

CREATE UNIQUE CLUSTERED INDEX IX_ID ON MyTable2(ID);

 

INSERT INTO MyTable2 VALUES ( 1,'aaaa')

INSERT INTO MyTable2 VALUES ( 2,'bbbb')

INSERT INTO MyTable2 VALUES ( 3,'cccc')

 

SELECT * FROM MyTable2 mt

二、 查看數據庫的ID號以及兩個表對應的ID

--查看數據庫的ID號以及兩個表對應的ID

select db_id() AS '數據庫ID',object_id('MyTable1')as 'MyTable1_ID',object_id('MyTable2')as 'MyTable2_ID'

 

 

 

查詢結果如下:

三、 查看數據頁的頁碼

--查看數據頁的ID

DBCC extentinfo(6,213575799)--這里是剛剛查出來的數據庫的ID,是表MyTable1ID

DBCC extentinfo(6,229575856)--這里是剛剛查出來的數據庫的ID,是表MyTable2ID

查詢結果如下:

表示MyTable1的數據存儲在第45頁,MyTable2的數據存儲在第94頁。

四、 查看2個表所在頁面上每條記錄的存儲情況:

DBCC traceon(3604) WITH NO_INFOMSGS              --打開跟蹤

DBCC IND('TestDB','MyTable1',0)               --列出所有頁和索引。

                                              --參數說明,:數據庫名;:表名;:索引的ID,表示堆,-1 表示顯示所有索引和IAMs, -2表示只顯示IAMs

 

DBCC PAGE(TestDB,1,45,1)                  --查看數據頁和索引

                                             --參數說明,:數據庫名;:數據頁文件文件組編號;:數據頁ID;:數據顯示類型(,)

語句執行后我們得到下面的結果:

1.   MyTable1Row – Offset

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 115 (0x73)                

0 (0x0) - 96 (0x60)                        

 

 

2.   MyTable2Row – Offset

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                 

1 (0x1) - 115 (0x73)                

0 (0x0) - 96 (0x60)                   

 

    可以看到兩個表的存儲在數據庫中數據頁的位置是一樣的。這是因為一個頁只能放一個對象。

五、 下面我們來看第一種情況:更改沒有索引列的字段,更改前和更改后的字符串長度一樣;

UPDATE MyTable1 SET  SName = 'dddd' WHERE ID=2

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 115 (0x73)                

0 (0x0) - 96 (0x60)                        

 

發現他的存儲位置沒有發生改變。

再來看MyTable2

--先刪除后插入

DELETE FROM MyTable2 WHERE ID=2

INSERT INTO MyTable2(ID,SName)VALUES(2,   'dddd')

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 153 (0x99)                

0 (0x0) - 96 (0x60)                             

 

MyTable2的存儲發生變化了,原先在115134之間存儲的是第二條記錄,現在這條記錄卻存儲到了153個字節以后了,而原來115134之間什么也沒存儲,這樣這里就形成了內部碎片。對于這種update后數據的存儲位置不發生變化的更新稱為現場更新,如果位置發生了改變就稱為非現場更新。

所以對于這種情形來說:update操作并不是先deleteinsert的。

六、 下面我們再來測試第二種情況:更改沒有索引列的字段,更改后比更改前的字符串長;

先更新表MyTable1,再查看數據頁的存儲情況:

UPDATE MyTable1 SET SName='aaaaaa' WHERE ID=2

DBCC PAGE(TestDB,1,45,1)

存儲結果如下:

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 153 (0x99)                

0 (0x0) - 96 (0x60)  

這時我們看到他的存儲和先DeleteInsert一樣了。

七、 我們再來看第三種情況:更改聚集索引字段

為了避免對數據庫的操作影響查看的難度,再執行一下創建表的語句。

數據更新之前的結果如下:

MyTable1

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 115 (0x73)                

0 (0x0) - 96 (0x60)  

 

MyTable2

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 115 (0x73)                

0 (0x0) - 96 (0x60)                 

 

先對表MyTable1操作:更新ID

UPDATE MyTable1 SET ID = 0 WHERE ID=2

DBCC PAGE(TestDB,1,94,1)   --數據頁的位置已經發生改變

存儲結果如下:

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 153 (0x99)                

0 (0x0) - 96 (0x60)                 

再來對MyTable2操作:

DELETE FROM MyTable2 WHERE ID = 2

INSERT INTO MyTable2(ID,SName)VALUES(2,   'bbbb')

DBCC PAGE(TestDB,1,126,1)  --數據頁的位置已經發生改變

存儲結果如下:

OFFSET TABLE:

 

Row - Offset                        

2 (0x2) - 134 (0x86)                

1 (0x1) - 153 (0x99)                

0 (0x0) - 96 (0x60)        

發現此時upadte為非現場更新,數據的存儲位置已經發生了改變。和我們所想的先DeleteInsert是一樣的。

其實在更改聚集索引鍵列的時候,也可能發生現場更新。比如有3條記錄分別為125,我們把其中的2更改為了3,由于3是在15之間的數字,所以在更改為3后,這條記錄還是會存儲在15之間,所以就是現場更新了。


posted on 2011-03-30 15:48 楊粼波 閱讀(934) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲无线视频| 久久aⅴ乱码一区二区三区| 久久精品国产69国产精品亚洲| 欧美日韩在线直播| 一区二区高清视频| 亚洲激情电影在线| 亚洲免费影院| 狠狠色综合一区二区| 久久精品亚洲精品国产欧美kt∨| 亚洲欧美久久久久一区二区三区| 国产精品一区二区三区四区五区 | 亚洲精品中文字幕在线| 久久躁狠狠躁夜夜爽| 亚洲日本va午夜在线影院| 亚洲第一天堂av| 欧美日韩不卡视频| 亚洲欧美日韩国产成人| 午夜视频精品| 亚洲欧洲一区二区在线播放| 亚洲免费av网站| 国产精品一区二区你懂的| 久久久久在线| 欧美国产日韩免费| 欧美一级午夜免费电影| 久久国产加勒比精品无码| 亚洲国产精品黑人久久久| 日韩亚洲不卡在线| 久久婷婷国产综合精品青草| 一本色道久久综合| 亚洲欧洲av一区二区| 亚洲第一福利在线观看| 亚洲免费av观看| 黄色成人在线观看| 亚洲激情小视频| 午夜宅男久久久| 免费看亚洲片| 久久国产精品久久国产精品| 免费美女久久99| 久久九九久精品国产免费直播| 欧美国产一区二区三区激情无套| 午夜天堂精品久久久久| 免费在线国产精品| 久久精品国产综合| 欧美日韩在线高清| 美女诱惑一区| 国产日韩欧美视频| 一区二区三区久久网| 亚洲第一级黄色片| 午夜欧美大尺度福利影院在线看| 9人人澡人人爽人人精品| 久久精品一区四区| 小嫩嫩精品导航| 欧美三级午夜理伦三级中文幕 | 性欧美18~19sex高清播放| 欧美黄色免费网站| 欧美va天堂va视频va在线| 国产日韩精品入口| 亚洲神马久久| 亚洲一区二区精品在线| 欧美精品亚洲精品| 欧美激情综合| 亚洲精品久久| 欧美成人一区二区三区| 欧美激情精品久久久久| 在线观看中文字幕不卡| 欧美一区二区视频97| 欧美一区二区视频在线观看2020| 免费观看成人| 欧美精品一区在线播放| 亚洲中字在线| 亚洲国产精品久久精品怡红院| 久久精品成人一区二区三区| 亚洲在线免费| 欧美日韩mv| 蜜臀va亚洲va欧美va天堂 | 精品91久久久久| 亚洲欧洲日产国码二区| 国产综合色产在线精品| 亚洲一区免费观看| 亚洲特黄一级片| 欧美久久久久久| 亚洲清纯自拍| 日韩亚洲精品在线| 欧美日韩国产小视频| 欧美成人高清| 国产精品久久久久久影视| 亚洲综合久久久久| 久久久精彩视频| 麻豆精品精华液| 在线观看视频欧美| 久久国产精品毛片| 亚洲福利视频网| 亚洲乱码久久| 久久精品伊人| 久久香蕉精品| 欧美电影免费| 亚洲欧美国产另类| 国产精品久久久久久亚洲毛片| 亚洲自拍偷拍福利| 久久国产福利| 在线播放豆国产99亚洲| 欧美在线看片a免费观看| 亚洲国产精品第一区二区| 亚洲精品在线视频观看| 欧美视频中文在线看| 午夜精品久久久久久久久久久久| 久久九九国产| 亚洲精品久久久蜜桃| 欧美一级在线视频| 欧美日韩在线三级| 欧美一级黄色网| 欧美成人午夜77777| 在线亚洲精品福利网址导航| 国产精品天天摸av网| 久久免费视频一区| 亚洲美女尤物影院| 男女视频一区二区| 亚洲一品av免费观看| 国产中文一区| 欧美精品一区三区| 香蕉成人久久| 久久爱另类一区二区小说| 伊大人香蕉综合8在线视| 欧美人交a欧美精品| 亚洲专区一区| 亚洲国产高清在线| 午夜视频一区二区| 亚洲精品乱码视频| 欧美日韩日本网| 久久亚洲一区| 亚洲欧美国产日韩天堂区| 欧美国产日韩一区二区三区| 亚洲永久在线观看| 亚洲激情在线观看视频免费| 国产精品久久久久影院色老大| 亚洲制服丝袜在线| 欧美成人情趣视频| 亚洲欧美日韩国产一区二区| 精品福利av| 国产嫩草一区二区三区在线观看 | 亚洲美女黄色| 伊人狠狠色j香婷婷综合| 亚洲欧美资源在线| 欧美91视频| 欧美一区二区三区婷婷月色| 日韩一级片网址| 亚洲电影网站| 可以看av的网站久久看| 欧美在线www| 亚洲三级毛片| 一本久久综合亚洲鲁鲁五月天| 国产偷国产偷精品高清尤物| 欧美日韩精品一本二本三本| 久久精品亚洲热| 欧美伊久线香蕉线新在线| 一本色道88久久加勒比精品| 亚洲国产精品ⅴa在线观看| 免费在线观看精品| 老司机成人网| 蜜臀久久久99精品久久久久久| 久久国产福利国产秒拍| 欧美一区综合| 午夜亚洲福利| 亚洲一区二区三区免费观看| 欧美精品在线免费播放| 亚洲国产成人精品久久| 欧美69视频| 欧美高清视频www夜色资源网| 亚洲综合视频1区| 欧美激情一区二区三区成人| 亚洲美女精品成人在线视频| 亚洲精品免费观看| 欧美va亚洲va香蕉在线| 蜜臀91精品一区二区三区| 久久蜜桃资源一区二区老牛| 欧美中文字幕在线播放| 久久99在线观看| 久久精品三级| 久久久中精品2020中文| 亚洲图片欧洲图片av| 久久精品卡一| 免费久久精品视频| 男人的天堂亚洲在线| 亚洲第一毛片| 亚洲精品欧洲| 欧美亚洲三区| 久久久久中文| 欧美国产日韩xxxxx| 国产精品v欧美精品v日韩| 国产情人节一区| 亚洲国产精品综合| 精品不卡在线| 亚洲欧美日本日韩| 狼狼综合久久久久综合网| 欧美日韩精品三区| 国产精品黄视频| 在线观看一区欧美| 亚洲欧美视频| 亚洲黄色尤物视频| 国产精品99久久久久久久久久久久|