• <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>

            Prayer

            在一般中尋求卓越
            posts - 1256, comments - 190, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            信息約束

            Posted on 2010-05-18 23:16 Prayer 閱讀(451) 評論(0)  編輯 收藏 引用 所屬分類: DB2

            如果一個應(yīng)用程序在將記錄插入到 DB2 中之前已驗證了信息,那么使用信息約束 要比普通約束更有效。信息約束告訴 DB2 數(shù)據(jù)應(yīng)采取的格式,而不是在插入或更新處理過程中強制實施。但這一信息可被 DB2 優(yōu)化器利用,并提高 SQL 查詢的性能。考慮以下 CREATE TABLE 語句:

            CREATE TABLE EMPDATA
            (
            EMPNO INT NOT NULL,
            SEX CHAR(1) NOT NULL
            CONSTRAINT SEXOK
            CHECK (SEX IN ('M','F'))
            NOT ENFORCED
            ENABLE QUERY OPTIMIZATION,
            SALARY INT NOT NULL,
            CONSTRAINT SALARYOK
            CHECK (SALARY BETWEEN 0 AND 100000)
            NOT ENFORCED
            ENABLE QUERY OPTIMIZATION
            )

            本例包含兩個更改列約束行為的語句。第一個選項是 NOT ENFORCED,它建議 DB2 在插入或更新數(shù)據(jù)時不強制檢查本列。第二個選項是 ENABLE QUERY OPTIMIZATION,DB2 在對該表運行 SELECT 語句時使用它。指定該值時,DB2 將在優(yōu)化 SQL 時使用約束中的信息。

            NOT ENFORCED 選項

            若表包含 NOT ENFORCED 選項,INSERT 語句的行為可能會變得很古怪。對 EMPDATA 表運行以下 SQL 語句時,不會產(chǎn)生任何錯誤:

            INSERT INTO EMPDATA VALUES
            (1, 'M', 54200),
            (2, 'F', 28000),
            (3, 'M', 21240),
            (4, 'F', 89222),
            (5, 'Q', 34444),
            (6, 'K',132333)

            編號是 5 的員工的性別顯然有問題(Q),編號 6 的員工不但性別有問題,同時工資也超出了 SALARY 列的限制。在這兩種情況下,DB2 依然允許插入,因為約束是 NOT ENFORCED。這指出了信息約束的一個薄弱之處。您必須確定所插入或載入的數(shù)據(jù)符合在 DB2 中放置的定義。

            ENABLE QUERY OPTIMIZATION 選項

            在上一屏運行的插入之后,如果再對 EMPDATA 表執(zhí)行 SELECT 語句,其結(jié)果很可能會令您更加迷惑:

            SELECT * FROM EMPDATA
            WHERE SEX = 'Q';

            EMPNO SEX SALARY
            ----------- --- -----------

            0 record(s) selected.

            DB2 向查詢返回了錯誤的答案。表中發(fā)現(xiàn)了 “Q” 值,但該列上的約束告訴 DB2 有效值僅包括 “M” 和 “F”。ENABLE QUERY OPTIMIZATION 關(guān)鍵字還允許 DB2 在優(yōu)化 SQL 語句時使用這一約束信息。若這并非您所希望的行為,那么您就需要使用 ALTER 命令來更改約束:

            ALTER TABLE EMPDATA
            ALTER CHECK SEXOK DISABLE QUERY OPTIMIZATION

            現(xiàn)在,再重新執(zhí)行之前的查詢。結(jié)果如下所示:

            SELECT * FROM EMPDATA
            WHERE SEX = 'Q';

            EMPNO SEX SALARY
            ----------- --- -----------
            5 Q 34444

            1 record(s) selected.

            久久大香香蕉国产| 久久亚洲精品视频| 一本色道久久综合狠狠躁| 99999久久久久久亚洲| 九九久久精品国产| 久久这里只有精品首页| jizzjizz国产精品久久| 一本久久综合亚洲鲁鲁五月天| 欧美日韩精品久久久免费观看 | 久久久久亚洲av无码专区喷水| 成人久久久观看免费毛片| 久久夜色精品国产亚洲av| 九九久久自然熟的香蕉图片| 日韩亚洲国产综合久久久| 精品久久久久久久| 日韩精品久久久肉伦网站| 午夜精品久久久久成人| 国产日韩久久久精品影院首页 | 久久中文字幕视频、最近更新| 国产精品久久久久AV福利动漫| 伊人久久大香线焦AV综合影院 | 日韩十八禁一区二区久久| 久久综合九色综合久99| 99久久99这里只有免费费精品| 久久无码精品一区二区三区| 久久精品国产亚洲麻豆| 99精品久久精品一区二区| 国内精品久久久久久久久电影网 | 一本色道久久综合亚洲精品| 欧美性大战久久久久久| 国产精品成人久久久久久久| 国产精品久久久久9999高清| 狠狠色噜噜狠狠狠狠狠色综合久久| 无码人妻久久一区二区三区免费| 人妻无码αv中文字幕久久琪琪布| 亚洲人成无码网站久久99热国产| 成人精品一区二区久久久| 久久精品亚洲精品国产欧美| 久久久久久亚洲精品无码| 日韩va亚洲va欧美va久久| 久久久久久久91精品免费观看|