隨筆-28  評論-15  文章-81  trackbacks-0
           

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

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

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

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

          首先我們來創(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)中,相對應(yīng)的兩個字段必須都設(shè)置索引(index)

          parts表:

          ALTER TABLE parts ADD INDEX idx_model (model);

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

          pc表也類似:

          ALTER TABLE pc ADD INDEX idx_cpumodel (cpumodel);

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

          定義外鍵

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

          ALTER TABLE pc ADD CONSTRAINT fk_cpu_model

          FOREIGN KEY (cpumodel)

          REFERENCES parts(model);

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

          這樣,我們的外鍵就搞好了!如果我們試著CREATE一臺pc,它所使用的CPU的型號是parts 表中不存在的,那么MySQL會禁止這臺PCCREATE出來。

          級聯(lián)操作

          考慮以下這種情況:

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

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

          ON UPDATE CASCADE;

          即在主表更新時,子表(們)產(chǎn)生連鎖更新動作,似乎有些人喜歡把這個叫級聯(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 譚明 閱讀(338) 評論(0)  編輯  收藏 所屬分類: MySQL

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 洛川县| 普兰店市| 和林格尔县| 梅州市| 区。| 邹城市| 仪征市| 仲巴县| 饶河县| 丰城市| 开平市| 东乡族自治县| 临桂县| 尼玛县| 江城| 怀安县| 黑龙江省| 遵化市| 通化县| 南京市| 海城市| 榆树市| 南开区| 宜宾市| 安义县| 根河市| 旺苍县| 泰宁县| 尉犁县| 成武县| 武安市| 米易县| 多伦县| 江安县| 怀柔区| 松滋市| 噶尔县| 开封市| 井研县| 桃园市| 佛学|