久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      mysql中如何設(shè)置外鍵約束?

      mysql中設(shè)置外鍵約束的方法:可以通過FOREIGN KEY關(guān)鍵字來指定外鍵,語法“ALTER TABLE 表名 ADD CONSTRAINT 外鍵名 FOREIGN KEY(列名) REFERENCES 主表名 (列名);”。

      mysql中如何設(shè)置外鍵約束?

      (推薦教程:mysql視頻教程)

      (1) 外鍵的使用:

      外鍵的作用,主要有兩個:
      一個是讓數(shù)據(jù)庫自己通過外鍵來保證數(shù)據(jù)的完整性和一致性
      一個就是能夠增加ER圖的可讀性
      有些人認為外鍵的建立會給開發(fā)時操作數(shù)據(jù)庫帶來很大的麻煩.因為數(shù)據(jù)庫有時候會由于沒有通過外鍵的檢測而使得開發(fā)人員刪除,插入操作失敗.他們覺得這樣很麻煩
      其實這正式外鍵在強制你保證數(shù)據(jù)的完整性和一致性.這是好事兒.
      例如:
      有一個基礎(chǔ)數(shù)據(jù)表,用來記錄商品的所有信息。其他表都保存商品ID。查詢時需要連表來查詢商品的名稱。單據(jù)1的商品表中有商品ID字段,單據(jù)2的商品表中也有商品ID字段
      。如果不使用外鍵的話,當單據(jù)1,2都使用了商品ID=3的商品時,如果刪除商品表中ID=3的對應(yīng)記錄后,再查看單據(jù)1,2的時候就會查不到商品的名稱。
      當表很少的時候,有人認為可以在程序?qū)崿F(xiàn)的時候來通過寫腳本來保證數(shù)據(jù)的完整性和一致性。也就是在刪除商品的操作的時候去檢測單據(jù)1,2中是否已經(jīng)使用了商品ID為3的商
      品。但是當你寫完腳本之后系統(tǒng)有增加了一個單據(jù)3 ,他也保存商品ID找個字段。如果不用外鍵,你還是會出現(xiàn)查不到商品名稱的情況。你總不能每增加一個使用商品ID的字段的單據(jù)時就回去修改你檢測商品是否被使用的腳本吧,同時,引入外鍵會使速度和性能下降。

      (2) 添加外鍵的格式:
      ALTER TABLE yourtablename
      ADD [CONSTRAINT 外鍵名] FOREIGN KEY [id] (index_col_name, …)
      REFERENCES tbl_name (index_col_name, …)
      [ON DELETE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
      [ON UPDATE {CASCADE | SET NULL | NO ACTION | RESTRICT}]
      說明:
      on delete/on update,用于定義delete,update操作.以下是update,delete操作的各種約束類型:
      CASCADE:
      外鍵表中外鍵字段值會被更新,或所在的列會被刪除.
      RESTRICT:
      RESTRICT也相當于no action,即不進行任何操作.即,拒絕父表update外鍵關(guān)聯(lián)列,delete記錄.
      set null:
      被父面的外鍵關(guān)聯(lián)字段被update ,delete時,子表的外鍵列被設(shè)置為null.
      而對于insert,子表的外鍵列輸入的值,只能是父表外鍵關(guān)聯(lián)列已有的值.否則出錯.

      外鍵定義服從下列情況:(前提條件)
      1)
      所有tables必須是InnoDB型,它們不能是臨時表.因為在MySQL中只有InnoDB類型的表才支持外鍵.
      2)
      所有要建立外鍵的字段必須建立索引.
      3)
      對于非InnoDB表,F(xiàn)OREIGN KEY子句會被忽略掉。
      注意:
      創(chuàng)建外鍵時,定義外鍵名時,不能加引號.
      如: constraint 'fk_1' 或 constraint "fk_1"是錯誤的
      (3) 查看外鍵:
      SHOW CREATE TABLE ***;可以查看到新建的表的代碼以及其存儲引擎.也就可以看到外鍵的設(shè)置.
      刪除外鍵:
      alter table drop foreign key '外鍵名'.
      注意:
      只有在定義外鍵時,用constraint 外鍵名 foreign key …. 方便進行外鍵的刪除.
      若不定義,則可以:
      先輸入:alter table drop foreign key –>會提示出錯.此時出錯信息中,會顯示foreign key的系統(tǒng)默認外鍵名.—>
      用它去刪除外鍵.

      (4) 舉例

      實例一:
      4.1
      CREATE TABLE parent(id INT NOT NULL,
      PRIMARY KEY (id)
      ) TYPE=INNODB; — type=innodb 相當于 engine=innodb
      CREATE TABLE child(id INT, parent_id INT,
      INDEX par_ind (parent_id),
      FOREIGN KEY (parent_id) REFERENCES parent(id)
      ON DELETE CASCADE
      ) TYPE=INNODB;
      向parent插入數(shù)據(jù)后,向child插入數(shù)據(jù),插入時,child中的parent_id的值只能是parent中有的數(shù)據(jù),否則插入不成功;
      刪除parent記錄時,child中的相應(yīng)記錄也會被刪除;–>因為: on delete cascade
      更新parent記錄時,不給更新;–>因為沒定義,默認采用restrict.
      4.2
      若child如下:
      mysql>
      create table child(id int not null primary key auto_increment,parent_id int,
      index par_ind (parent_id),
      constraint fk_1 foreign key (parent_id) references
      parent(id) on update cascade on delete restrict)
      type=innodb;
      用上面的:
      1).
      則可以更新parent記錄時,child中的相應(yīng)記錄也會被更新;–>因為: on update cascade
      2).
      不能是子表操作,影響父表.只能是父表影響子表.
      3).
      刪除外鍵:
      alter table child drop foreign key fk_1;
      添加外鍵:
      alter table child add constraint fk_1 foreign key (parent_id) references
      parent(id) on update restrict on delete set null;

      (5) 多個外鍵存在:

      product_order表對其它兩個表有外鍵。
      一個外鍵引用一個product表中的雙列索引。另一個引用在customer表中的單行索引:
      CREATE TABLE product (category INT NOT NULL, id INT NOT NULL,
      price DECIMAL,
      PRIMARY KEY(category, id)) TYPE=INNODB;
      CREATE TABLE customer (id INT NOT NULL,
      PRIMARY KEY (id)) TYPE=INNODB;

      CREATE TABLE product_order (no INT NOT NULL AUTO_INCREMENT,
      product_category INT NOT NULL,
      product_id INT NOT NULL,
      customer_id INT NOT NULL,
      PRIMARY KEY(no),
      — 雙外鍵
      INDEX (product_category, product_id),
      FOREIGN KEY (product_category, product_id)
      REFERENCES product(category, id)
      ON UPDATE CASCADE ON DELETE RESTRICT,
      — 單外鍵
      INDEX (customer_id),
      FOREIGN KEY (customer_id)

      REFERENCES customer(id)) TYPE=INNODB;

      (6) 說明:

      1.若不聲明on update/delete,則默認是采用restrict方式.
      2.對于外鍵約束,最好是采用: ON UPDATE CASCADE ON DELETE RESTRICT 的方式.

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號