魚躍于淵

          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會做相應的改變。
          注意:建立外鍵的列應該建立索引,且不能為空,引用以被引用的兩列應該是同一類型。



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


          網站導航:
           
          主站蜘蛛池模板: 新密市| 汕头市| 大渡口区| 怀化市| 肥东县| 清河县| 郑州市| 五家渠市| 巴彦县| 沛县| 宕昌县| 红桥区| 鄂温| 拉孜县| 曲麻莱县| 清苑县| 辛集市| 克拉玛依市| 资中县| 神木县| 高雄县| 龙里县| 定南县| 怀安县| 衡阳县| 景东| 红安县| 河间市| 鄂州市| 潼关县| 牡丹江市| 辉县市| 莎车县| 商丘市| 西乡县| 铜山县| 涡阳县| 临澧县| 来宾市| 大渡口区| 彭山县|