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

posts - 9, comments - 4, trackbacks - 0, articles - 9

2011年1月19日

protected void Page_Load(object sender, EventArgs e)
    {
        this.Calendar1.Attributes.Add("style", "display:none;border-width:1px;border-style:solid;border-collapse:collapse;z-index: 100; left: 0px;");
        TextBox1.Attributes.Add("onfocus", "javascript:document.getElementById('Calendar1').style.display=''");
    }
    protected void Calendar1_SelectionChanged(object sender, EventArgs e)
    {
        TextBox1.Text = this.Calendar1.SelectedDate.ToShortDateString();
        Calendar1.Attributes.Add("onblur", "javascript:document.getElementById('Calendar1').style.display='none'");
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Console.Write(this.TextBox1.Text);

posted @ 2011-01-19 22:40 xlz 閱讀(674) | 評(píng)論 (1)編輯 收藏

2009年3月17日

        什么是軟交換?在詢(xún)問(wèn)這樣的問(wèn)題時(shí),我們經(jīng)常會(huì)得到一系列特征的描述:它是NGN的核心,它具有開(kāi)放的架構(gòu),它能夠?qū)崿F(xiàn)呼叫控制與媒體傳輸分離……

        思科系統(tǒng)亞太區(qū)NGN/VoIP首席技術(shù)顧問(wèn)殷康認(rèn)為,盡管“軟交換”是目前NGN討論的熱點(diǎn),但是人們對(duì)它的概念仍然有些似是而非。他說(shuō):“‘軟交換’這個(gè)術(shù)語(yǔ)可以說(shuō)是從Softswitch翻譯而得。Softswitch這一術(shù)語(yǔ)借用了傳統(tǒng)電信領(lǐng)域PSTN網(wǎng)中的‘硬’交換機(jī)‘switch’的概念,所不同的是強(qiáng)調(diào)其基于分組網(wǎng)上呼叫控制與媒體傳輸承載相分離的含義。國(guó)內(nèi)一開(kāi)始有人將Softswitch譯為‘軟交換’。但是‘軟交換’這個(gè)翻譯術(shù)語(yǔ)含義不夠十分明晰,單從字面上看很難使人理解它究竟是設(shè)備系統(tǒng)概念還是體系概念。”

        殷康指出,我國(guó)電信業(yè)歷來(lái)將名詞屬性的、設(shè)備概念范疇的switch譯為“交換機(jī)”,而將動(dòng)名詞屬性的switching譯為“交換”。X25switch譯為X25交換機(jī),ATMswitch譯為ATM交換機(jī),L2/L3 switch 譯為二層/三層交換機(jī)。因此他建議,為學(xué)術(shù)研討的嚴(yán)肅性, 應(yīng)該將softswitch更為確切地譯為“軟交換機(jī)”。這只是翻譯概念上的問(wèn)題。不過(guò)從某一方面來(lái)說(shuō),對(duì)于軟交換概念的模糊,也反映了產(chǎn)業(yè)界對(duì)于軟交換認(rèn)識(shí)上在某些方面依舊存在偏差,存在著過(guò)分強(qiáng)調(diào)某一方面的能力,或者是過(guò)分夸大了軟交換功能的情況。甚至可以說(shuō)在很長(zhǎng)的一段時(shí)間,軟交換被人為地“神話(huà)”了,它被認(rèn)為是一種代表著通信行業(yè)的未來(lái),似乎無(wú)所不能的技術(shù)。

        軟交換是一種正在發(fā)展的概念,包含許多功能。其核心是一個(gè)采用標(biāo)準(zhǔn)化協(xié)議和應(yīng)用編程接口(API)的開(kāi)放體系結(jié)構(gòu)。這就為第三方開(kāi)發(fā)新應(yīng)用和新業(yè)務(wù)敞開(kāi)了大門(mén)。軟交換體系結(jié)構(gòu)的其它重要特性還包括應(yīng)用分離(de-couplingofapplications)、呼叫控制和承載控制。

        軟交換是一種功能實(shí)體,為下一代網(wǎng)絡(luò)NGN提供具有實(shí)時(shí)性要求的業(yè)務(wù)的呼叫控制和連接控制功能,是下一代網(wǎng)絡(luò)呼叫與控制的核心。

        簡(jiǎn)單地看,軟交換是實(shí)現(xiàn)傳統(tǒng)程控交換機(jī)的“呼叫控制”功能的實(shí)體,但傳統(tǒng)的“呼叫控制”功能是和業(yè)務(wù)結(jié)合在一起的,不同的業(yè)務(wù)所需要的呼叫控制功能不同,而軟交換是與業(yè)務(wù)無(wú)關(guān)的,這要求軟交換提供的呼叫控制功能是各種業(yè)務(wù)的基本呼叫控制。

posted @ 2009-03-17 09:58 xlz 閱讀(495) | 評(píng)論 (0)編輯 收藏

        支持大本地網(wǎng)(虛擬MSC)組網(wǎng) MSCServer集中放置在一個(gè)大區(qū)域(可以由現(xiàn)網(wǎng)的幾個(gè)地區(qū)構(gòu)成,每個(gè)地區(qū)分配一個(gè)虛擬的MSC號(hào)碼)的中心,將MGW拉遠(yuǎn),下放到各PSTN本地網(wǎng)(每個(gè)地區(qū)),采取集中控制、就近接入的方法組建一個(gè)大本地網(wǎng),但提供的業(yè)務(wù)與現(xiàn)在的多個(gè)本地網(wǎng)沒(méi)有區(qū)別,同樣支持多區(qū)號(hào)、各區(qū)間漫游及漫游限制以及區(qū)間話(huà)統(tǒng)及計(jì)費(fèi),對(duì)其它網(wǎng)元來(lái)說(shuō),完全相當(dāng)于多個(gè)傳統(tǒng)的本地網(wǎng)。可以很好地滿(mǎn)足“大容量,少局所”的運(yùn)營(yíng)要求,有利于提高運(yùn)維質(zhì)量,便于移動(dòng)新業(yè)務(wù)的開(kāi)展。   
     
        支持雙歸屬網(wǎng)絡(luò)容災(zāi) 一個(gè)或多個(gè)MGW同時(shí)連接到兩個(gè)MSCServer上,這兩個(gè)SERVER互為備份關(guān)系,正常情況下兩個(gè)MSCServer可以是負(fù)荷分擔(dān)的,也可以是完全主備方式提供業(yè)務(wù)。當(dāng)其中一個(gè)MSCServer故障時(shí),另一個(gè)MSCServer能夠立即接管故障MSCServer上的話(huà)務(wù),能完成人工或自動(dòng)倒換。從而極大地提高大容量系統(tǒng)容災(zāi)的能力。這種雙歸屬網(wǎng)絡(luò)容災(zāi)方案在中國(guó)移動(dòng)T1局獲得應(yīng)用。

posted @ 2009-03-17 09:54 xlz 閱讀(557) | 評(píng)論 (0)編輯 收藏

2009年3月13日

 

優(yōu)先級(jí)

運(yùn)算符

名稱(chēng)或含義

使用形式

結(jié)合方向

說(shuō)明

1

[]

數(shù)組下標(biāo)

數(shù)組名[常量表達(dá)式]

左到右


()

圓括號(hào)

(表達(dá)式)/函數(shù)名(形參表)


.

成員選擇(對(duì)象)

對(duì)象.成員名


->

成員選擇(指針)

對(duì)象指針->成員名


2

-

負(fù)號(hào)運(yùn)算符

-表達(dá)式

右到左

單目運(yùn)算符

(類(lèi)型)

強(qiáng)制類(lèi)型轉(zhuǎn)換

(數(shù)據(jù)類(lèi)型)表達(dá)式


++

自增運(yùn)算符

++變量名/變量名++

單目運(yùn)算符

--

自減運(yùn)算符

--變量名/變量名--

單目運(yùn)算符

*

取值運(yùn)算符

*指針變量

單目運(yùn)算符

&

取地址運(yùn)算符

&變量名

單目運(yùn)算符

!

邏輯非運(yùn)算符

!表達(dá)式

單目運(yùn)算符

~

按位取反運(yùn)算符

~表達(dá)式

單目運(yùn)算符

sizeof

長(zhǎng)度運(yùn)算符

sizeof(表達(dá)式)


3

/

表達(dá)式/表達(dá)式

左到右

雙目運(yùn)算符

*

表達(dá)式*表達(dá)式

雙目運(yùn)算符

%

余數(shù)(取模)

整型表達(dá)式/整型表達(dá)式

雙目運(yùn)算符

4

+

表達(dá)式+表達(dá)式

左到右

雙目運(yùn)算符

-

表達(dá)式-表達(dá)式

雙目運(yùn)算符

5

<<

左移

變量<<表達(dá)式

左到右

雙目運(yùn)算符

>>

右移

變量>>表達(dá)式

雙目運(yùn)算符

6

>

大于

表達(dá)式>表達(dá)式

左到右

雙目運(yùn)算符

>=

大于等于

表達(dá)式>=表達(dá)式

雙目運(yùn)算符

<

小于

表達(dá)式<表達(dá)式

雙目運(yùn)算符

<=

小于等于

表達(dá)式<=表達(dá)式

雙目運(yùn)算符

7

==

等于

表達(dá)式==表達(dá)式

左到右

雙目運(yùn)算符

!=

不等于

表達(dá)式!= 表達(dá)式

雙目運(yùn)算符

8

&

按位與

表達(dá)式&表達(dá)式

左到右

雙目運(yùn)算符

9

^

按位異或

表達(dá)式^表達(dá)式

左到右

雙目運(yùn)算符

10

|

按位或

表達(dá)式|表達(dá)式

左到右

雙目運(yùn)算符

11

&&

邏輯與

表達(dá)式&&表達(dá)式

左到右

雙目運(yùn)算符

12

||

邏輯或

表達(dá)式||表達(dá)式

左到右

雙目運(yùn)算符

13

?:

條件運(yùn)算符

表達(dá)式1? 表達(dá)式2: 表達(dá)式3

右到左

三目運(yùn)算符

14

=

賦值運(yùn)算符

變量=表達(dá)式

右到左


/=

除后賦值

變量/=表達(dá)式


*=

乘后賦值

變量*=表達(dá)式


%=

取模后賦值

變量%=表達(dá)式


+=

加后賦值

變量+=表達(dá)式


-=

減后賦值

變量-=表達(dá)式


<<=

左移后賦值

變量<<=表達(dá)式


>>=

右移后賦值

變量>>=表達(dá)式


&=

按位與后賦值

變量&=表達(dá)式


^=

按位異或后賦值

變量^=表達(dá)式


|=

按位或后賦值

變量|=表達(dá)式


15

,

逗號(hào)運(yùn)算符

表達(dá)式,表達(dá)式,…

左到右

從左向右順序運(yùn)算

說(shuō)明:

同一優(yōu)先級(jí)的運(yùn)算符,運(yùn)算次序由結(jié)合方向所決定。

posted @ 2009-03-13 13:27 xlz 閱讀(310) | 評(píng)論 (0)編輯 收藏

2009年3月11日

 

memest原型 (please type "man memset" in your shell) 

 void *memset(void *s,  int c, size_t n); 

memset:作用是在一段內(nèi)存塊中填充某個(gè)給定的值,它對(duì)較大的結(jié)構(gòu)體或數(shù)組進(jìn)行清零操作的一種最快方法。

常見(jiàn)的三種錯(cuò)誤

第一: 搞反了c 和 n的位置. 

一定要記住 如果要把一個(gè)char a[20]清零, 一定是 memset(a, 0, 20) 
而不是 memset(a, 20,  0) 

第二: 過(guò)度使用memset, 我想這些程序員可能有某種心理陰影, 他們懼怕未經(jīng)初始化的內(nèi)存, 所以他們會(huì)寫(xiě)出這樣的代碼: 

char buffer[20]; 

memset(buffer, 0, sizeof((char)*20)); 
strcpy(buffer, "123"); 

這里的memset是多余的. 因?yàn)檫@塊內(nèi)存馬上就被覆蓋了, 清零沒(méi)有意義. 

第三: 其實(shí)這個(gè)錯(cuò)誤嚴(yán)格來(lái)講不能算用錯(cuò)memset, 但是它經(jīng)常在使用memset的場(chǎng)合出現(xiàn) 

int some_func(struct something *a){ 
 … 
 … 
 memset(a, 0, sizeof(a)); 
 … 

問(wèn):為何要用memset置零?memset( &Address, 0, sizeof(Address));經(jīng)常看到這樣的用法,其實(shí)不用的話(huà),分配數(shù)據(jù)的時(shí)候,剩余的空間也會(huì)置零的。

答:1.如果不清空,可能會(huì)在測(cè)試當(dāng)中出現(xiàn)野值。 你做下面的試驗(yàn)看看結(jié)果() 

char buf[5]; 

CString str,str1; //memset(buf,0,sizeof(buf)); for(int i = 0;i<5;i++) { str.Format(“%d “,buf[i]); str1 +=str ; } TRACE(“%s\r\n“,str1)

2.其實(shí)不然!特別是對(duì)于字符指針類(lèi)型的,剩余的部分通常是不會(huì)為0的,不妨作一個(gè)試驗(yàn),定義一個(gè)字符數(shù)組,并輸入一串字符,如果不用memset實(shí)現(xiàn)清零,使用MessageBox顯示出來(lái)就會(huì)有亂碼(0表示NULL,如果有,就默認(rèn)字符結(jié)束,不會(huì)輸出后面的亂碼)

問(wèn):

如下demo是可以的,能把數(shù)組中的元素值都設(shè)置成字符1
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char a[5];
    memset(a,'1',5);
    for(int i = 0;i < 5;i++)
      cout<<a[i]<<"  ";
    system("pause");
    return 0;
}
而,如下程序想吧數(shù)組中的元素值設(shè)置成1,卻是不可行的
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    int a[5];
    memset(a,1,5);//這里改成memset(a,1,5 *sizeof(int))也是不可以的
    for(int i = 0;i < 5;i++)
      cout<<a[i]<<"  ";
    system("pause");
    return 0;
}
問(wèn)題是:

1,第一個(gè)程序?yàn)槭裁纯梢裕诙€(gè)不行,
2,不想要用for,或是while循環(huán)來(lái)初始化int a[5];能做到嗎?(有沒(méi)有一個(gè)像memset()這樣的函數(shù)初始化)

答:

1.因?yàn)榈谝粋€(gè)程序的數(shù)組a是字符型的,字符型占據(jù)內(nèi)存大小是1Byte,而memset函數(shù)也是以字節(jié)為單位進(jìn)行賦值的,所以你輸出沒(méi)有問(wèn)題。而第二個(gè)程序a是整型的,使用memset還是按字節(jié)賦值,這樣賦值完以后,每個(gè)數(shù)組元素的值實(shí)際上是0x01010101即十進(jìn)制的16843009。你看看你輸出結(jié)果是否這樣? 

2.如果用memset(a,1,20);
就是對(duì)a指向的內(nèi)存的20個(gè)字節(jié)進(jìn)行賦值,每個(gè)都用ASCII為1的字符去填充,轉(zhuǎn)為二進(jìn)制后,1就是00000001,占一個(gè)字節(jié)。一個(gè)INT元素是4字節(jié),合一起就是1000000010000000100000001,就等于16843009,就完成了對(duì)一個(gè)INT元素的賦值了。

 

posted @ 2009-03-11 00:14 xlz 閱讀(298) | 評(píng)論 (0)編輯 收藏

2009年3月10日

     摘要: 1、   用預(yù)處理指令#define 聲明一個(gè)常數(shù),用以表明1年中有多少秒(忽略閏年問(wèn)題)     #define  SECONDS_PER_YEAR  (60 * 60 * 24 * 365)UL     1) #define 語(yǔ)法的基本知識(shí)(例如:不能以分號(hào)結(jié)束,括號(hào)的使用,等等) ...  閱讀全文

posted @ 2009-03-10 21:35 xlz 閱讀(285) | 評(píng)論 (0)編輯 收藏

2009年2月11日

#include<stdio.h>
int atoi(const char *str)
{
    int value=0;
    bool b_plus=true; //判斷符號(hào)

    switch(*str) //過(guò)濾符號(hào)

    {
    case '+':
        str++;
        break;
    case '-':
        b_plus=false;
        str++;
        break;
    default:
        break;
    }

    while('\0' != *str)
    {
        value = (value*10)+(*str-'0');
        str++;
    }
    if(!b_plus)
        value=-value;
    return value;
}

void main()
{
    char str[]="-999";
    int value=atoi(str);
    printf("The result is:%d\n",value);
}

 

(2)itoa的實(shí)現(xiàn):

#include<stdio.h>
void itoa(int value, char *str)
{
    if (value < 0) //如果是負(fù)數(shù),則str[0]='-',并把value取反(變成正整數(shù))

    {
        str[0] = '-';
        value = 0-value;
    }
    int i,j;
    for(i=1; value > 0; i++,value/=10) //從value[1]開(kāi)始存放value的數(shù)字字符,不過(guò)是逆序,等下再反序過(guò)來(lái)

        str[i] = value%10+'0'; //將數(shù)字加上0的ASCII值(即'0')就得到該數(shù)字的ASCII值

    for(j=i-1,i=1; j-i>=1; j--,i++) //將數(shù)字字符反序存放

    {
        str[i] = str[i]^str[j];
        str[j] = str[i]^str[j];
        str[i] = str[i]^str[j];
    }
    if(str[0] != '-') //如果不是負(fù)數(shù),則需要把數(shù)字字符下標(biāo)左移一位,即減1

    {
        for(i=0; str[i+1]!='\0'; i++)
            str[i] = str[i+1];
        str[i] = '\0';
    }
}

void main()
{
    int value = -1212345;
    char str[10] = {'\0'}; //記得把str全填充為'\0'

    itoa(value, str);
    printf("The result is:%s\n", str);
}

posted @ 2009-02-11 16:22 xlz 閱讀(3246) | 評(píng)論 (1)編輯 收藏

題目:
    已知strcpy函數(shù)的原型是:
        char * strcpy(char * strDest,const char * strSrc);
    1.不調(diào)用庫(kù)函數(shù),實(shí)現(xiàn)strcpy函數(shù)。
    2.解釋為什么要返回char *。

    解說(shuō):
    1.strcpy的實(shí)現(xiàn)代碼


        char * strcpy(char * strDest,const char * strSrc)
        {
                if ((strDest==NULL)||(strsrc="/=NULL")) //[1]
                        throw "Invalid argument(s)"; //[2]
                char * strDestCopy=strDest;  //[3]
                while ((*strDest++=*strSrc++)!='\0'); //[4]
                return strDestCopy;
        }

    錯(cuò)誤的做法:
    [1]
    (A)不檢查指針的有效性,說(shuō)明答題者不注重代碼的健壯性。
    (B)檢查指針的有效性時(shí)使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),說(shuō)明答題者對(duì)C語(yǔ)言中類(lèi)型的隱式轉(zhuǎn)換沒(méi)有深刻認(rèn)識(shí)。在本例中char *轉(zhuǎn)換為bool即是類(lèi)型隱式轉(zhuǎn)換,這種功能雖然靈活,但更多的是導(dǎo)致出錯(cuò)概率增大和維護(hù)成本升高。所以C++專(zhuān)門(mén)增加了bool、true、false三個(gè)關(guān)鍵字以提供更安全的條件表達(dá)式。
    (C)檢查指針的有效性時(shí)使用((strDest==0)||(strsrc="/=0")),說(shuō)明答題者不知道使用常量的好處。直接使用字面常量(如本例中的0)會(huì)減少程序的可維護(hù)性。0雖然簡(jiǎn)單,但程序中可能出現(xiàn)很多處對(duì)指針的檢查,萬(wàn)一出現(xiàn)筆誤,編譯器不能發(fā)現(xiàn),生成的程序內(nèi)含邏輯錯(cuò)誤,很難排除。而使用NULL代替0,如果出現(xiàn)拼寫(xiě)錯(cuò)誤,編譯器就會(huì)檢查出來(lái)。
    [2]
    (A)return new string("Invalid argument(s)");,說(shuō)明答題者根本不知道返回值的用途,并且他對(duì)內(nèi)存泄漏也沒(méi)有警惕心。從函數(shù)中返回函數(shù)體內(nèi)分配的內(nèi)存是十分危險(xiǎn)的做法,他把釋放內(nèi)存的義務(wù)拋給不知情的調(diào)用者,絕大多數(shù)情況下,調(diào)用者不會(huì)釋放內(nèi)存,這導(dǎo)致內(nèi)存泄漏。
    (B)return 0;,說(shuō)明答題者沒(méi)有掌握異常機(jī)制。調(diào)用者有可能忘記檢查返回值,調(diào)用者還可能無(wú)法檢查返回值(見(jiàn)后面的鏈?zhǔn)奖磉_(dá)式)。妄想讓返回值肩負(fù)返回正確值和異常值的雙重功能,其結(jié)果往往是兩種功能都失效。應(yīng)該以?huà)伋霎惓?lái)代替返回值,這樣可以減輕調(diào)用者的負(fù)擔(dān)、使錯(cuò)誤不會(huì)被忽略、增強(qiáng)程序的可維護(hù)性。
    [3]
    (A)忘記保存原始的strDest值,說(shuō)明答題者邏輯思維不嚴(yán)密。
    [4]
    (A)循環(huán)寫(xiě)成while (*strDest++=*strSrc++);,同[1](B)。
    (B)循環(huán)寫(xiě)成while (*strSrc!='\0') *strDest++=*strSrc++;,說(shuō)明答題者對(duì)邊界條件的檢查不力。循環(huán)體結(jié)束后,strDest字符串的末尾沒(méi)有正確地加上'\0'。

    2.返回strDest的原始值使函數(shù)能夠支持鏈?zhǔn)奖磉_(dá)式,增加了函數(shù)的“附加值”。同樣功能的函數(shù),如果能合理地提高的可用性,自然就更加理想。
    鏈?zhǔn)奖磉_(dá)式的形式如:
        int iLength=strlen(strcpy(strA,strB));
    又如:
        char * strA=strcpy(new char[10],strB);
    返回strSrc的原始值是錯(cuò)誤的。其一,源字符串肯定是已知的,返回它沒(méi)有意義。其二,不能支持形如第二例的表達(dá)式。其三,為了保護(hù)源字符串,形參用const限定strSrc所指的內(nèi)容,把const char *作為char *返回,類(lèi)型不符,編譯報(bào)錯(cuò)。

posted @ 2009-02-11 14:10 xlz 閱讀(8659) | 評(píng)論 (2)編輯 收藏

2009年1月4日

摘 要:本文討論了Oracle和SQL Server的在事務(wù)處理上的區(qū)別,并分析了其實(shí)現(xiàn)機(jī)制的差異。

關(guān)鍵詞:Oracle;SQL Server;事務(wù);事務(wù)隔離級(jí)別;DDL。


事務(wù)處理是所有大型數(shù)據(jù)庫(kù)產(chǎn)品的一個(gè)關(guān)鍵問(wèn)題,各數(shù)據(jù)庫(kù)廠商都在這個(gè)方面花費(fèi)了很大精力,不同的事務(wù)處理方式會(huì)導(dǎo)致數(shù)據(jù)庫(kù)性能和功能上的巨大差異。

事務(wù)處理也是數(shù)據(jù)庫(kù)管理員與數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)人員必須深刻理解的一個(gè)問(wèn)題,對(duì)這個(gè)問(wèn)題的疏忽可能會(huì)導(dǎo)致應(yīng)用程序邏輯錯(cuò)誤以及效率低下。

下面我們針對(duì)Oracle及SQL Server這兩種當(dāng)前廣泛使用的大型數(shù)據(jù)庫(kù)產(chǎn)品,探討一下它們?cè)谑聞?wù)處理方面的一些差異。如沒(méi)有特殊說(shuō)明,本文內(nèi)容適用的數(shù)據(jù)庫(kù)產(chǎn)品版本為Oracle9i及SQL Server 2000,其中的示例SQL語(yǔ)句,對(duì)于Oracle是在SQL*Plus中執(zhí)行,而對(duì)于SQL Server 2000是在osql中執(zhí)行。
一.事務(wù)的概念

事務(wù)可以看作是由對(duì)數(shù)據(jù)庫(kù)的若干操作組成的一個(gè)單元,這些操作要么都完成,要么都取消,從而保證數(shù)據(jù)滿(mǎn)足一致性的要求。事務(wù)的一個(gè)典型例子是銀行中的轉(zhuǎn)帳操作,帳戶(hù)A把一定數(shù)量的款項(xiàng)轉(zhuǎn)到帳戶(hù)B上,這個(gè)操作包括兩個(gè)步驟,一個(gè)是從帳戶(hù)A上把存款減去一定數(shù)量,二是在帳戶(hù)B上把存款加上相同的數(shù)量。這兩個(gè)步驟顯然要么都完成,要么都取消,否則銀行就會(huì)受損失。顯然,這個(gè)轉(zhuǎn)帳操作中的兩個(gè)步驟就構(gòu)成一個(gè)事務(wù)。

數(shù)據(jù)庫(kù)中的事務(wù)還有如下ACID特征。

ACID分別是四個(gè)英文單詞的首寫(xiě)字母,這四個(gè)英文單詞是Atomicity、Consistency、Isolation、Durability,分別翻譯為原子性、一致性、隔離性、持久性。

原子性:指事務(wù)中的操作,或者都完成,或者都取消。

一致性:指事務(wù)中的操作保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)不會(huì)出現(xiàn)邏輯上不一致的情況,一致性一般會(huì)隱含的包括在其他屬性之中。

隔離性:指當(dāng)前的事務(wù)與其他未完成的事務(wù)是隔離的。在不同的隔離級(jí)別下,事務(wù)的讀取操作,可以得到的結(jié)果是不同的。

持久性:指對(duì)事務(wù)發(fā)出COMMIT命令后,即使這時(shí)發(fā)生系統(tǒng)故障,事務(wù)的效果也被持久化了。與此相反的是,當(dāng)在事務(wù)執(zhí)行過(guò)程中,系統(tǒng)發(fā)生故障,則事務(wù)的操作都被回滾,即數(shù)據(jù)庫(kù)回到事務(wù)開(kāi)始之前的狀態(tài)。

對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)修改都是在內(nèi)存中完成的,這些修改的結(jié)果可能已經(jīng)寫(xiě)到硬盤(pán)也可能沒(méi)有寫(xiě)到硬盤(pán),如果在操作過(guò)程中,發(fā)生斷電或系統(tǒng)錯(cuò)誤等故障,數(shù)據(jù)庫(kù)可以保證未結(jié)束的事務(wù)對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)修改結(jié)果即使已經(jīng)寫(xiě)入磁盤(pán),在下次數(shù)據(jù)庫(kù)啟動(dòng)后也會(huì)被全部撤銷(xiāo);而對(duì)于結(jié)束的事務(wù),即使其修改的結(jié)果還未寫(xiě)入磁盤(pán),在數(shù)據(jù)庫(kù)下次啟動(dòng)后會(huì)通過(guò)事務(wù)日志中的記錄進(jìn)行“重做”,即把丟失的數(shù)據(jù)修改結(jié)果重新生成,并寫(xiě)入磁盤(pán),從而保證結(jié)束事務(wù)對(duì)數(shù)據(jù)修改的永久化。這樣也保證了事務(wù)中的操作要么全部完成,要么全部撤銷(xiāo)。

二.事務(wù)設(shè)置及類(lèi)型的區(qū)別

在SQL Server中有三種事務(wù)類(lèi)型,分別是:隱式事務(wù)、顯式事務(wù)、自動(dòng)提交事務(wù),缺省為自動(dòng)提交。

自動(dòng)提交,是指對(duì)于用戶(hù)發(fā)出的每條SQL語(yǔ)句,SQL Server都會(huì)自動(dòng)開(kāi)始一個(gè)事務(wù),并且在執(zhí)行后自動(dòng)進(jìn)行提交操作來(lái)完成這個(gè)事務(wù),也可以說(shuō)在這種事務(wù)模式下,一個(gè)SQL語(yǔ)句就是一個(gè)事務(wù)。

顯式事務(wù),是指在自動(dòng)提交模式下以Begin Transaction開(kāi)始一個(gè)事務(wù),以Commit或Rollback結(jié)束一個(gè)事務(wù),以Commit結(jié)束事務(wù)是把事務(wù)中的修改永久化,即使這時(shí)發(fā)生斷電這樣的故障。例如下面是SQL Server中的一個(gè)顯式事務(wù)的例子。

Begin Tran

Update emp Set ename=’Smith’ Where empno=7369

Insert Into dept Values(60,’HR’,’GZh’)

Commit

隱式事務(wù),是指在當(dāng)前會(huì)話(huà)中用Set Implicit_Transactions On命令設(shè)置的事務(wù)類(lèi)型,這時(shí)任何DML語(yǔ)句(Delete、Update、Insert)都會(huì)開(kāi)始一個(gè)事務(wù),而事務(wù)的結(jié)束也是用Commit或Rollback。

在Oracle中沒(méi)有SQL Server的這些事務(wù)類(lèi)型,缺省情況下任何一個(gè)DML語(yǔ)句都會(huì)開(kāi)始一個(gè)事務(wù),直到用戶(hù)發(fā)出Commit或Rollback操作,這個(gè)事務(wù)才會(huì)結(jié)束,這與SQL Server的隱式事務(wù)模式相似。

三.事務(wù)隔離級(jí)別

在SQL92標(biāo)準(zhǔn)中,事務(wù)隔離級(jí)別分為四種,分別為:Read Uncommitted、Read Committed、Read Repeatable、Serializable,其中Read Uncommitted與Read Committed為語(yǔ)句級(jí)別的,而Read Repeatable與Serializable是針對(duì)事務(wù)級(jí)別的。

在Oracle和SQL Server中設(shè)置事務(wù)隔離級(jí)別的語(yǔ)句是相同的,都使用SQL92標(biāo)準(zhǔn)語(yǔ)法,即:

Set Transaction Isolation Level Read Committed

上面示例中的Read Committed可以被替換為其他三種隔離級(jí)別中的任意一種。

1.SQL Server中的隔離級(jí)別及實(shí)現(xiàn)機(jī)制

在SQL Server中提供了所有這四種隔離級(jí)別。

下面我們討論在SQL Server中,這幾種隔離級(jí)別的含義及其實(shí)現(xiàn)方式。

Read Uncommitted:一個(gè)會(huì)話(huà)可以讀取其他事務(wù)未提交的更新結(jié)果,如果這個(gè)事務(wù)最后以回滾結(jié)束,這時(shí)的讀取結(jié)果就可能是錯(cuò)誤的,所以多數(shù)的數(shù)據(jù)庫(kù)應(yīng)用都不會(huì)使用這種隔離級(jí)別。

Read Committed:這是SQL Server的缺省隔離級(jí)別,設(shè)置為這種隔離級(jí)別的事務(wù)只能讀取其他事務(wù)已經(jīng)提交的更新結(jié)果,否則,發(fā)生等待,但是其他會(huì)話(huà)可以修改這個(gè)事務(wù)中被讀取的記錄,而不必等待事務(wù)結(jié)束,顯然,在這種隔離級(jí)別下,一個(gè)事務(wù)中的兩個(gè)相同的讀取操作,其結(jié)果可能不同。

Read Repeatable:在一個(gè)事務(wù)中,如果在兩次相同條件的讀取操作之間沒(méi)有添加記錄的操作,也沒(méi)有其他更新操作導(dǎo)致在這個(gè)查詢(xún)條件下記錄數(shù)增多,則兩次讀取結(jié)果相同。換句話(huà)說(shuō),就是在一個(gè)事務(wù)中第一次讀取的記錄保證不會(huì)在這個(gè)事務(wù)期間發(fā)生改變。SQL Server是通過(guò)在整個(gè)事務(wù)期間給讀取的記錄加鎖實(shí)現(xiàn)這種隔離級(jí)別的,這樣,在這個(gè)事務(wù)結(jié)束前,其他會(huì)話(huà)不能修改事務(wù)中讀取的記錄,而只能等待事務(wù)結(jié)束,但是SQL Server不會(huì)阻礙其他會(huì)話(huà)向表中添加記錄,也不阻礙其他會(huì)話(huà)修改其他記錄。

Serializable:在一個(gè)事務(wù)中,讀取操作的結(jié)果是在這個(gè)事務(wù)開(kāi)始之前其他事務(wù)就已經(jīng)提交的記錄,SQL Server通過(guò)在整個(gè)事務(wù)期間給表加鎖實(shí)現(xiàn)這種隔離級(jí)別。在這種隔離級(jí)別下,對(duì)這個(gè)表的所有DML操作都是不允許的,即要等待事務(wù)結(jié)束,這樣就保證了在一個(gè)事務(wù)中的兩次讀取操作的結(jié)果肯定是相同的。

2.Oracle中的隔離級(jí)別及實(shí)現(xiàn)機(jī)制

在Oracle中,沒(méi)有Read Uncommitted及Repeatable Read隔離級(jí)別,這樣在Oracle中不允許一個(gè)會(huì)話(huà)讀取其他事務(wù)未提交的數(shù)據(jù)修改結(jié)果,從而避免了由于事務(wù)回滾發(fā)生的讀取錯(cuò)誤。Oracle中的Read Committed和Serializable級(jí)別,其含義與SQL Server類(lèi)似,但是實(shí)現(xiàn)方式卻大不一樣。

在Oracle中,存在所謂的回滾段(Oracle9i之前版本)或撤銷(xiāo)段(Oracle9i版本),Oracle在修改數(shù)據(jù)記錄時(shí),會(huì)把這些記錄被修改之前的結(jié)果存入回滾段或撤銷(xiāo)段中,就是因?yàn)檫@種機(jī)制,Oracle對(duì)于事務(wù)隔離級(jí)別的實(shí)現(xiàn)與SQL Server截然不同。在Oracle中,讀取操作不會(huì)阻礙更新操作,更新操作也不會(huì)阻礙讀取操作,這樣在Oracle中的各種隔離級(jí)別下,讀取操作都不會(huì)等待更新事務(wù)結(jié)束,更新操作也不會(huì)因?yàn)榱硪粋€(gè)事務(wù)中的讀取操作而發(fā)生等待,這也是Oracle事務(wù)處理的一個(gè)優(yōu)勢(shì)所在。

Oracle缺省的設(shè)置是Read Committed隔離級(jí)別(也稱(chēng)為語(yǔ)句級(jí)別的隔離),在這種隔離級(jí)別下,如果一個(gè)事務(wù)正在對(duì)某個(gè)表進(jìn)行DML操作,而這時(shí)另外一個(gè)會(huì)話(huà)對(duì)這個(gè)表的記錄進(jìn)行讀取操作,則Oracle會(huì)去讀取回滾段或撤銷(xiāo)段中存放的更新之前的記錄,而不會(huì)象SQL Server一樣等待更新事務(wù)的結(jié)束。

在Serializable隔離級(jí)別(也稱(chēng)為事務(wù)級(jí)別的隔離),事務(wù)中的讀取操作只能讀取這個(gè)事務(wù)開(kāi)始之前已經(jīng)提交的數(shù)據(jù)結(jié)果。如果在讀取時(shí),其他事務(wù)正在對(duì)記錄進(jìn)行修改,則Oracle就會(huì)在回滾段或撤銷(xiāo)段中去尋找對(duì)應(yīng)的原來(lái)未經(jīng)更改的記錄(而且是在讀取操作所在的事務(wù)開(kāi)始之前存放于回滾段或撤銷(xiāo)段的記錄),這時(shí)讀取操作也不會(huì)因?yàn)橄鄳?yīng)記錄被更新而等待。

四.DDL語(yǔ)句對(duì)事務(wù)的影響

1.Oracle中DDL語(yǔ)句對(duì)事務(wù)的影響

在Oracle中,執(zhí)行DDL語(yǔ)句(如Create Table、Create View等)時(shí),會(huì)在執(zhí)行之前自動(dòng)發(fā)出一個(gè)Commit命令,并在隨后發(fā)出一個(gè)Commit或者Rollback命令,也就是說(shuō),DDL會(huì)象如下偽碼一樣執(zhí)行:

Commit;

DDL_Statement;

If (Error) then

Rollback;

Else

Commit;

End if;

我們通過(guò)分析下面例子來(lái)看Oracle中,DDL語(yǔ)句對(duì)事務(wù)的影響:

Insert into some_table values(‘Before’);

Creaate table T(x int);

Insert into some_table values(‘After’);

Rollback;

由于在Oracle執(zhí)行Create table語(yǔ)句之前進(jìn)行了提交,而在Create table執(zhí)行后也會(huì)自動(dòng)發(fā)出Commit命令,所以只有插入After的行被回滾,而插入Before的行不會(huì)被回滾,Create table命令的結(jié)果也不會(huì)被回滾,即使Create table語(yǔ)句失敗,所進(jìn)行的Before插入也會(huì)被提交。如果最后發(fā)出Commit命令,因?yàn)椴迦隑efore及Create table的操作結(jié)果已經(jīng)在之前提交,所以Commit命令影響的只有插入After的操作。

2.SQL Server中DDL語(yǔ)句對(duì)事務(wù)的影響

在SQL Server中,DDL語(yǔ)句對(duì)事務(wù)的影響與其他DML語(yǔ)句相同,也就是說(shuō),在DML語(yǔ)句發(fā)出之前或之后,都不會(huì)自動(dòng)發(fā)出Commit命令。

在SQL Server 2000中,對(duì)于與上面Oracle同樣的例子,最后發(fā)出Rollback后,數(shù)據(jù)庫(kù)會(huì)回滾到插入Before之前的狀態(tài),即插入Before和After的行都會(huì)被回滾,數(shù)據(jù)表T也不會(huì)被創(chuàng)建。

如果最后發(fā)出Commit操作,則會(huì)把三個(gè)操作的結(jié)果全部提交。

五.用戶(hù)斷開(kāi)數(shù)據(jù)庫(kù)連接對(duì)事務(wù)的影響

另外,對(duì)應(yīng)于Oracle的管理客戶(hù)端工具SQL*Plus,在SQL Server 2000中是osql,兩種管理工具都是命令行工具,使用方式及作用也類(lèi)似,但是在SQL*Plus中,用戶(hù)退出連接時(shí),會(huì)自動(dòng)先發(fā)出Commit命令,然后再退出,而在osql中,如果用戶(hù)退出連接,會(huì)自動(dòng)發(fā)出Rollback命令,這對(duì)于SQL Server的自動(dòng)提交模式?jīng)]有什么影響,但如果處于隱式事務(wù)模式,其影響是顯而易見(jiàn)的。對(duì)于兩種數(shù)據(jù)庫(kù)產(chǎn)品的其他客戶(hù)端管理工具也有類(lèi)似的不同之處。

posted @ 2009-01-04 01:11 xlz 閱讀(410) | 評(píng)論 (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>
            欧美日韩另类在线| 久久精品国产99| 国产精品久久久久一区二区三区共| 久久久久久久波多野高潮日日| 亚洲欧美日本国产专区一区| 亚洲午夜高清视频| 欧美一二三区精品| 国产一区在线视频| 国产午夜精品理论片a级探花| 久久久999精品| 亚洲欧美日韩综合aⅴ视频| 日韩亚洲精品视频| 亚洲男人的天堂在线| 欧美一区二区三区免费观看视频| 亚洲自拍三区| 久久久久久噜噜噜久久久精品| 久久理论片午夜琪琪电影网| 欧美国产激情二区三区| 亚洲毛片av在线| 亚洲欧美日韩国产成人精品影院| 欧美在现视频| 欧美激情二区三区| 国产欧美视频一区二区| 亚洲第一视频| 亚洲一区二区3| 蜜臀久久久99精品久久久久久| 亚洲国产视频a| 正在播放亚洲一区| 老司机午夜精品视频在线观看| 欧美三区在线观看| 伊人色综合久久天天| 日韩视频免费大全中文字幕| 亚洲午夜免费视频| 欧美成人一品| 亚洲欧美日韩在线综合| 免费不卡在线观看| 国产一区亚洲一区| 亚洲一级黄色av| 老牛影视一区二区三区| 亚洲视频第一页| 猛男gaygay欧美视频| 国产一区二区三区在线观看免费| 欧美影院视频| 一本色道久久加勒比精品| 久久9热精品视频| 欧美福利精品| 一区二区三区在线高清| 午夜精品久久久久久久男人的天堂| 欧美成人免费大片| 亚洲一区二区久久| 欧美视频中文在线看| 在线观看成人一级片| 久久性色av| 久久国产精品一区二区三区四区| 国产精品porn| 亚洲男女自偷自拍| 99re6热只有精品免费观看| 欧美国产精品| av成人免费在线| 亚洲区国产区| 欧美裸体一区二区三区| 亚洲精品视频一区| 91久久精品美女高潮| 欧美电影在线| 99国产一区二区三精品乱码| 91久久香蕉国产日韩欧美9色| 美腿丝袜亚洲色图| 99re国产精品| 99视频精品全部免费在线| 欧美色欧美亚洲高清在线视频| 亚洲视频精品在线| 中文在线资源观看视频网站免费不卡| 欧美日韩和欧美的一区二区| 宅男噜噜噜66国产日韩在线观看| 亚洲免费观看在线视频| 国产精品福利影院| 久久欧美中文字幕| 欧美国产日韩视频| 亚洲一二三区视频在线观看| 亚洲在线成人| 在线成人免费观看| 亚洲精品国产拍免费91在线| 国产精品第2页| 性欧美精品高清| 久久久999精品免费| 一区二区三区国产| 欧美一区二区三区啪啪| 亚洲欧洲中文日韩久久av乱码| 亚洲精品乱码久久久久久按摩观| 欧美天天影院| 久久综合一区二区三区| 欧美美女操人视频| 久热精品视频在线| 国产精品国产a级| 玖玖综合伊人| 国产精品a级| 亚洲电影在线播放| 国产精品久久网站| 蜜臀91精品一区二区三区| 欧美日韩喷水| 亚洲一区二区三区在线观看视频| 欧美激情精品久久久| 久久夜色精品国产亚洲aⅴ| 亚洲专区在线| 一区二区三区我不卡| 亚洲精品一区二区三区不| 国产欧美精品国产国产专区| 欧美电影免费观看大全| 国产精品成人在线观看| 亚洲国产高清自拍| 国产亚洲第一区| 日韩视频不卡| 91久久久一线二线三线品牌| 亚洲欧美综合精品久久成人 | 欧美日本不卡高清| 久久久亚洲欧洲日产国码αv | 亚洲人精品午夜| 午夜在线精品偷拍| 亚洲私人影院| 欧美jizzhd精品欧美巨大免费| 欧美制服丝袜第一页| 欧美午夜剧场| 日韩视频一区二区三区在线播放免费观看 | 亚洲国产高清自拍| 影音先锋一区| 久久精品91久久香蕉加勒比| 亚洲欧美日韩综合一区| 欧美日韩网址| 亚洲国产日韩欧美在线图片| 尤物九九久久国产精品的特点 | 在线免费日韩片| 性欧美1819性猛交| 亚洲一区在线免费| 欧美麻豆久久久久久中文| 欧美成人午夜剧场免费观看| 国产日韩久久| 一区二区三区欧美在线| 一区二区高清在线| 欧美劲爆第一页| 美女精品在线观看| 国产一区二区三区在线观看免费 | 亚洲美女毛片| 老司机亚洲精品| 欧美sm极限捆绑bd| 国产一区二区三区黄视频| 亚洲欧美制服另类日韩| 欧美在线资源| 国产日韩亚洲欧美| 午夜激情综合网| 香蕉国产精品偷在线观看不卡| 亚洲精品乱码久久久久久日本蜜臀| 欧美激情精品久久久久久黑人 | 亚洲精品久久久一区二区三区| 伊人精品成人久久综合软件| 久久9热精品视频| 性欧美大战久久久久久久免费观看 | 亚洲国产精品一区在线观看不卡| 老司机久久99久久精品播放免费| 久久综合九色99| 亚洲人在线视频| 欧美理论在线| 亚洲欧美综合精品久久成人 | 亚洲一区二区三区午夜| 久久精品国产69国产精品亚洲| 国产农村妇女精品一区二区| 欧美一级在线视频| 免费观看日韩| 亚洲国产日韩欧美在线99| 欧美日本成人| 亚洲欧美另类久久久精品2019| 欧美中文在线视频| 91久久精品久久国产性色也91| 另类图片国产| 夜夜精品视频一区二区| 欧美一区亚洲二区| 在线成人av网站| 欧美日韩在线播放一区二区| 亚洲欧美日本视频在线观看| 国产一区亚洲| 欧美人交a欧美精品| 午夜精品视频网站| 欧美国产精品va在线观看| 性欧美办公室18xxxxhd| 亚洲精品国产拍免费91在线| 国产精品久久久久一区二区三区共| 久久精品91| 亚洲在线播放电影| 免费日韩视频| 久久成人免费电影| 亚洲婷婷免费| 影音先锋久久精品| 国产嫩草一区二区三区在线观看 | 免费成人高清视频| 午夜久久资源| 最新中文字幕一区二区三区| 国产区精品视频| 欧美日本三级| 欧美一区二区日韩一区二区| 亚洲久久成人| 欧美激情一区二区三级高清视频|