程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql建立外鍵出現的問題

mysql建立外鍵出現的問題

編輯:MySQL綜合教程

mysql建立外鍵出現的問題   mysql 建外鍵的時候出150錯誤    Mysql錯誤:error Code: 1005. Can't create table 'joblog.sc' (errno: 150)    create table sc  (      id int(10) unsigned not null auto_increment comment 'id',      Sno int(10) unsigned not null default '0' comment '學號',      Cno int(10) unsigned not null default '0' comment '課程號',      Grade int(10) unsigned default null comment '成績',      primary key (id),        constraint FK_sc_1 foreign key (Sno) references student(id) ,        constraint FK_sc_2 foreign key(Cno) references course(id)   )engine=InnoDB default charset=gb2312;    原因是message_demo表的type(外鍵)屬性和message_type表的id(主鍵)定義不同,由於我是在建立表之後再建立的外鍵關系,之前給type字段加了個unsigned,而id字段又沒加,因此報錯。    “FOREIGN KEY約束”  外鍵定義服從下列情況:    ·         所有tables必須是InnoDB型,它們不能是臨時表。    ·         在引用表中,必須有一個索引,外鍵列以同樣的順序被列在其中作為第一列。這樣一個索引如果不存在,它必須在引用表裡被自動創建。    ·         在引用表中,必須有一個索引,被引用的列以同樣的順序被列在其中作為第一列。    ·         不支持對外鍵列的索引前綴。這樣的後果之一是BLOB和TEXT列不被包括在一個外鍵中,這是因為對這些列的索引必須總是包含一個前綴長度。    ·         如果CONSTRAINTsymbol被給出,它在數據庫裡必須是唯一的。如果它沒有被給出,InnoDB自動創建這個名字。    . 外鍵    外鍵增強為數據庫開發人員提供了多項益處:    ·         假定關聯設計恰當,外鍵約束使得程序員更難將不一致性引入數據庫。    ·         數據庫服務器具有集中式約束檢查功能,因而沒有必要在應用程序一側執行這類檢查。這樣,就消除了不同應用程序使用不同方式檢查約束的可能性。    ·         使用級聯更新和刪除,簡化了應用程序代碼。    ·         設計恰當的外鍵有助於以文檔方式記錄表間的關系。    請記住,這些好處是以數據庫服務器為執行必要檢查而需的額外開銷為代價的。服務器額外檢查會影響性能,對於某些應用程序,該特性不受歡迎,應盡量避免。(出於該原因,在一些主要的商業應用程序中,在應用程序級別上實施了外鍵邏輯)。  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved