魚躍于淵

          First know how, Second know why !
          posts - 0, comments - 1, trackbacks - 0, articles - 49

          轉載:[http://growup.blog.51cto.com/229061/44252]

          Mysql中使用foreign key 并不像oracleaccess那么簡單,現把使用過程應注意的問題做以講解:
          目標:建立下面的外鍵關系
           
           
           
          第一步:建表
          首先打開命令行窗口,進入Mysql bin目錄,選擇相應數據庫后,建立T_USER表:
           
          create table t_user (id int(11) NOT NULL auto_increment PRIMARY KEY, name VARCHAR(20),group_id int(10)) type=InnoDB;
           
          建立T_PASSPORT表:
           
          create table t_passport (id int(11) NOT NULL auto_increment PRIMARY KEY, serial VARCHAR(20)) type=InnoDB;
           
          注意紅體字部分:type=InnoDB關于InnoDB的說明如下:
           
          InnoDB 是 MySQL 上第一個提供外鍵約束的引擎,除了提供事務處理外,InnoDB 還支持行鎖,提供和 Oracle 一樣的一致性的不加鎖讀取,能增加并發讀的用戶數量并提高性能,不會增加鎖的數量。也就是說如果要采用外鍵約束,表類型必須時InnoDB,mysql默認是MyISAM,這種類型不支持外鍵約束。
              
          第二步:建立外鍵關系:
           
          alter table t_user add foreign key(id) references t_passport (id) on delete cascade on update cascade;
           
          此外也可以在建表時直接指定外鍵:(以下代碼未驗證)
           
          create table temp( id int, name char(20), foreign key(id) references outTable(id) on delete cascade on update cascade);
           
          注意:如果表結構是myISAM,上面的代碼雖然能能執行,但不起任何作用。References有的文章(特別是網友的筆記中)寫成:Refrences初學者應注意。
           
          第三步,測試
          測試1:插入外鍵約束
           
          mysql> insert into t_user values(1,'zhaoyuan');
          ERROR 1216: Cannot add or update a child row: a foreign key constraint fails
          外鍵約束,因為t_passport 中尚未有id1的字段。
           
          測試2、刪除外鍵約束
           
          mysql> delete from t_passport;
          Query OK, 1 row affected (0.06 sec)
           
          mysql> select * from t_user;
          Empty set (0.00 sec)
           
           
          說明:把T_user id列設為外鍵,參照外表t_passport id, t_passport id列改變時,T_user會做相應的改變。
          注意:建立外鍵的列應該建立索引,且不能為空,引用以被引用的兩列應該是同一類型。



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


          網站導航:
           
          主站蜘蛛池模板: 梁河县| 孝昌县| 金川县| 西乌珠穆沁旗| 盐亭县| 新巴尔虎左旗| 吴忠市| 新化县| 兰州市| 武平县| 阆中市| 会同县| 比如县| 佛坪县| 黑水县| 醴陵市| 浦县| 京山县| 二连浩特市| 宜都市| 辽源市| 额敏县| 田东县| 霞浦县| 都兰县| 肥西县| 石柱| 唐河县| 区。| 东台市| 湘潭县| 壶关县| 铜山县| 广元市| 澳门| 高青县| 济南市| 温泉县| 镇赉县| 木兰县| 闽侯县|