<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-28  評(píng)論-15  文章-81  trackbacks-0
     

    定義數(shù)據(jù)表

    假如某個(gè)電腦生產(chǎn)商,它的數(shù)據(jù)庫(kù)中保存著整機(jī)和配件的產(chǎn)品信息。用來保存整機(jī)產(chǎn)品信息的表叫做pc;用來保存配件供貨信息的表叫做parts

    pc表中有一個(gè)字段,用來描述這款電腦所使用的CPU型號(hào);在parts表中相應(yīng)有一個(gè)字段,描述的正是CPU的型號(hào),我們可以把它想成是全部CPU的型號(hào)列表。

    很顯然,這個(gè)廠家生產(chǎn)的電腦,其使用的CPU一定是供貨信息表(parts)中存在的型號(hào)。這時(shí),兩個(gè)表中就存在一種約束關(guān)系(constraint)——pc表中的CPU型號(hào)受到parts表中型號(hào)的約束。

    首先我們來創(chuàng)建parts表:

    CREATE TABLE parts (

    ...
    字段定義 ...,

    model VARCHAR(20) NOT NULL,

    ... 字段定義 ...

    );

    接下來是PC表:

    CREATE TABLE pc (

    ...
    字段定義 ...,

    cpumodel VARCHAR(20) NOT NULL,

    ... 字段定義 ...

    };

    設(shè)置索引

    若要設(shè)置外鍵,在參照表 (referencing table,即pc) 和被參照表(referenced table,即parts)中,相對(duì)應(yīng)的兩個(gè)字段必須都設(shè)置索引(index)

    對(duì)parts表:

    ALTER TABLE parts ADD INDEX idx_model (model);

    這句話的意思是,為parts表增加一個(gè)索引,索引建立在model字段上,給這個(gè)索引起個(gè)名字叫idx_model

    對(duì)pc表也類似:

    ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);

    事實(shí)上這兩個(gè)索引可以在創(chuàng)建表的時(shí)候就設(shè)置。這里只是為了突出其必要性。

    定義外鍵

    下面為兩張表之間建立前面所述的那種約束。因?yàn)?/span>pcCPU型號(hào)必須參照parts表中的相應(yīng)型號(hào),所以我們將pc表的cpumodel字段設(shè)置為外鍵”(FOREIGN KEY),即這個(gè)鍵的參照值來自于其他表。

    ALTER TABLE pc ADD CONSTRAINT fk_cpu_model

    FOREIGN KEY (cpumodel)

    REFERENCES parts(model);

    第一行是說要為pc表設(shè)置外鍵,給這個(gè)外鍵起一個(gè)名字叫做fk_cpu_model;第二行是說將本表的cpumodel字段設(shè)置為外鍵;第三行是說這個(gè)外鍵受到的約束來自于parts表的model字段。

    這樣,我們的外鍵就搞好了!如果我們?cè)囍?/span>CREATE一臺(tái)pc,它所使用的CPU的型號(hào)是parts 表中不存在的,那么MySQL會(huì)禁止這臺(tái)PCCREATE出來。

    級(jí)聯(lián)操作

    考慮以下這種情況:

    技術(shù)人員發(fā)現(xiàn),一個(gè)月之前輸入到parts表中的某個(gè)系列的cpu(可能有很多款)的型號(hào)全都輸錯(cuò)了一個(gè)字母,現(xiàn)在需要改正。我們希望的是,當(dāng)parts表中那些 Referenced Column 有所變化時(shí),相應(yīng)表中的 Referencing Column 也能自動(dòng)更正。

    可以在定義外鍵的時(shí)候,在最后加入這樣的關(guān)鍵字:

    ON UPDATE CASCADE;

    即在主表更新時(shí),子表(們)產(chǎn)生連鎖更新動(dòng)作,似乎有些人喜歡把這個(gè)叫級(jí)聯(lián)操作。

    如果把這語句完整的寫出來,就是:

    ALTER TABLE pc ADD CONSTRAINT fk_cpu_model

    FOREIGN KEY (cpumodel)

    REFERENCES parts(model)

    ON UPDATE CASCADE;

    除了CASCADE外,還有RESTRICT(禁止主表變更)SET NULL

    posted on 2007-10-18 03:21 譚明 閱讀(331) 評(píng)論(0)  編輯  收藏 所屬分類: MySQL

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产成人久久精品动漫 | 亚洲人成网站在线观看青青| 日韩亚洲精品福利| 亚洲愉拍99热成人精品热久久| 九九视频高清视频免费观看| 免费无码一区二区三区蜜桃| 亚洲AV无码一区东京热久久| 污网站在线免费观看| 亚洲今日精彩视频| 色吊丝最新永久免费观看网站 | 在人线av无码免费高潮喷水| 男女超爽视频免费播放| 亚洲国产天堂久久综合网站| 国产精品成人免费综合| 国产日产成人免费视频在线观看| 女人裸身j部免费视频无遮挡| 亚洲情综合五月天| 日韩在线免费电影| 亚洲精品久久无码| 亚洲人成无码网站在线观看| 98精品全国免费观看视频| 99久久精品国产亚洲| 青春禁区视频在线观看直播免费| 久久亚洲精品无码av| 亚洲人成无码网站| 中国在线观看免费高清完整版| 国产亚洲美女精品久久久2020| 美女被免费视频网站| 久久久无码精品亚洲日韩蜜桃| 天黑黑影院在线观看视频高清免费| 久久精品国产亚洲一区二区三区| 在线免费观看中文字幕| 国产一精品一AV一免费孕妇| 久久久久一级精品亚洲国产成人综合AV区| 国产高潮久久免费观看| 人人鲁免费播放视频人人香蕉| 亚洲一级特黄特黄的大片| 亚洲国产成人久久综合碰碰动漫3d| 亚洲无线观看国产精品| 国产婷婷高清在线观看免费| 成人免费毛片内射美女APP|