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

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
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 楊粼波 閱讀(939) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲激情在线视频| 一区二区黄色| 国产精品免费一区二区三区在线观看 | 亚洲伦理中文字幕| 久久久久久97三级| 亚洲欧美激情诱惑| 亚洲日本免费电影| 激情伊人五月天久久综合| 欧美日韩国产综合久久| 久久一区亚洲| 香蕉久久夜色精品| 中国日韩欧美久久久久久久久| 欧美高清在线一区| 米奇777超碰欧美日韩亚洲| 欧美亚洲日本国产| 亚洲一区在线播放| 在线一区日本视频| 夜夜嗨一区二区三区| 亚洲国产日韩在线一区模特| 国产视频在线观看一区二区| 国产精品久久久久久亚洲毛片| 欧美日韩久久久久久| 欧美福利精品| 牛人盗摄一区二区三区视频| 美女成人午夜| 麻豆久久久9性大片| 久久久久久电影| 久久精品在这里| 久久久精品国产一区二区三区| 性欧美暴力猛交另类hd| 亚洲午夜电影网| 亚洲午夜一区| 欧美亚洲视频| 欧美一区影院| 久久久久国产精品一区二区| 久久九九国产| 久久久最新网址| 免费永久网站黄欧美| 免费人成精品欧美精品| 欧美fxxxxxx另类| 欧美黑人多人双交| 欧美午夜精品一区| 国产精品日韩欧美综合| 国产欧美 在线欧美| 国产亚洲日本欧美韩国| 激情亚洲成人| 亚洲精品中文字幕女同| 亚洲天堂成人在线视频| 亚洲欧美激情一区| 久久久精品久久久久| 理论片一区二区在线| 欧美国产视频在线观看| 亚洲精品免费一区二区三区| 99www免费人成精品| 亚洲专区在线| 久久九九免费视频| 欧美国产激情| 国产精品中文在线| 一区二区视频免费在线观看| 亚洲日本欧美| 香蕉国产精品偷在线观看不卡| 久久久久一区二区| 亚洲国产欧美精品| 亚洲午夜久久久久久尤物| 久久国产精品久久久久久久久久 | 国产精品久久久免费| 国产午夜精品在线观看| 亚洲二区在线| 亚洲性人人天天夜夜摸| 久久久久久亚洲精品杨幂换脸| 欧美成人午夜视频| 中文在线一区| 久久婷婷久久| 欧美午夜视频在线| 又紧又大又爽精品一区二区| 一区二区三区高清| 久久久7777| 日韩亚洲欧美成人一区| 欧美自拍偷拍| 欧美日韩综合一区| 一区免费在线| 亚洲欧美日韩国产综合在线 | 在线电影院国产精品| 99热在线精品观看| 久久久精品免费视频| 亚洲精品一区二区三| 欧美一区二区免费观在线| 欧美黑人国产人伦爽爽爽| 国产一区二区三区不卡在线观看 | 羞羞色国产精品| 欧美激情综合五月色丁香| 国产欧美一区二区精品秋霞影院| 亚洲美女性视频| 久久人人97超碰人人澡爱香蕉| 亚洲欧洲美洲综合色网| 欧美一区二区三区四区夜夜大片| 欧美精品导航| 亚洲国产三级在线| 久久久av水蜜桃| 在线视频一区二区| 欧美国产在线观看| 一区二区在线观看视频| 性色av一区二区三区| 亚洲精品乱码久久久久久久久| 久久久噜噜噜久久狠狠50岁| 国产精品自在线| 亚洲一区二区三区乱码aⅴ| 91久久久在线| 欧美丰满高潮xxxx喷水动漫| 一区免费观看视频| 久久久九九九九| 午夜精品久久久久影视| 欧美视频福利| 一本色道久久综合亚洲91| 亚洲福利免费| 免费观看亚洲视频大全| 狠久久av成人天堂| 久久欧美肥婆一二区| 亚洲欧美日韩精品一区二区| 国产精品福利在线观看网址| 亚洲作爱视频| 亚洲精品一区二区三区在线观看 | 国产在线日韩| 久久精品视频免费播放| 欧美亚洲免费电影| 国产一区二区三区自拍| 久久精品噜噜噜成人av农村| 午夜一区在线| 国产一区二区在线观看免费播放| 性色av一区二区三区在线观看| 中日韩视频在线观看| 欧美小视频在线| 亚洲欧美亚洲| 性色av一区二区怡红| 国语自产精品视频在线看| 久久久www成人免费精品| 久久精品国产v日韩v亚洲| 在线观看亚洲视频啊啊啊啊| 免费欧美日韩国产三级电影| 米奇777在线欧美播放| 亚洲国产精品国自产拍av秋霞| 欧美电影美腿模特1979在线看| 欧美a级在线| 亚洲私人影吧| 亚洲免费视频成人| 韩日视频一区| 欧美国产一区二区| 欧美日韩天堂| 欧美一区二区三区喷汁尤物| 欧美一区二区高清在线观看| 在线日韩av片| 亚洲三级免费观看| 国产精品国产自产拍高清av王其 | 免费观看在线综合色| 亚洲精品视频免费观看| 亚洲精品视频免费观看| 国产九色精品成人porny| 麻豆精品精品国产自在97香蕉| 美女啪啪无遮挡免费久久网站| 亚洲视频大全| 欧美亚洲自偷自偷| 亚洲精品一区在线观看| 亚洲天堂第二页| 在线观看国产精品淫| 亚洲另类在线视频| 国产在线播放一区二区三区| 亚洲电影毛片| 国产精品一级在线| 亚洲丶国产丶欧美一区二区三区| 欧美午夜精品伦理| 免费久久99精品国产自| 欧美性大战久久久久久久| 久久人人爽人人爽| 欧美日韩在线观看视频| 久久久久久久久久看片| 欧美精品亚洲精品| 欧美与欧洲交xxxx免费观看| 欧美bbbxxxxx| 欧美在线一二三区| 欧美日本国产视频| 久久人人97超碰精品888| 欧美日韩精品免费看| 久久综合亚州| 国产精品久久久久久久第一福利| 欧美国产视频在线| 国产视频精品va久久久久久| 亚洲人永久免费| 一区二区三区在线免费播放| 一区二区三区**美女毛片| 亚洲大片精品永久免费| 亚洲欧美激情诱惑| 99www免费人成精品| 久久久国产一区二区三区| 亚洲影院免费观看| 欧美精品一区三区| 玖玖国产精品视频| 国产深夜精品福利| 亚洲一区免费观看| 亚洲午夜黄色| 欧美激情亚洲自拍|