mysql主外來鍵

2021-05-23 18:00:07 字數 2043 閱讀 6604

自己的**總提示「error 1005 : can't create table (errno: 150 )」 的錯誤鬱悶了好幾天,看了下面的文章終於成功了,犯了下面提到的三情況中的第三種,太不細心了,居然忽略了「unsigned 」 ,大家也要多留意呀!!

參照完整性(referentialintegrity) 是資料庫設計中乙個重要的概念。在系統不同的列表中,當資料庫所有參照合法或非合法關聯時都會涉及到參照完整性。當參照完整性存在時,任何與不存在記錄的關聯將變得無效化,由此可防止使用者出現各種錯誤,從而提供更為準確和實用的資料庫。

參照完整性通常通過外來鍵(foreign key) 的使用而被廣泛應用。長久以來,流行工具開源rdbmsmysql 並沒有支援外來鍵,原因是這種支援將會降低rdbms 的速度和效能。然而,由於很多使用者對參照完整性的優點倍感興趣,最近mysql 的不同版本都通過新innodb 列表引擎支援外來鍵。由此,在資料庫組成的列表中保持參照完整性將變得非常簡單。

為了建立兩個mysql 表之間的乙個外來鍵關係,必須滿足以下三種情況: * 

兩個表必須是innodb 表型別。 * 

使用在外鍵關係的域必須為索引型(index) 。 * 

使用在外鍵關係的域必須與資料型別相似。

例子是理解以上要點的最好方法,新建乙個parts 的表,cpu 字段用來存放所有的cpu 配件型號,再新建乙個pc 的表,其中的cpumodel 字段用來存放pc 機中的cpu 型號,顯然,cpumodel 欄位中的所有記錄應該存在於parts 表中。

mysql> create table parts(    

-> cpu char(20 ) not null,    

-> index(cpu)    

-> )engine=innodb;    

query ok, 0  rows affected (0.01  sec)    

mysql> create table pc(    

-> cpumodel char(20 ) not null,    

-> index(cpumodel),    

-> foreign key(cpumodel) references parts(cpu)    

-> )engine=innodb;    

query ok, 0  rows affected (0.01  sec)    

注意: 對於非innodb 表,foreign key  語句將被忽略。對parts 表新增資料1 ,2 ,3 ,接著對pc 表進行測試,滿足條件的1

可以順利insert 進去,而不符合條件的字元5

在insert 表的時候,出現外來鍵約束性錯誤,這正是我們想要的結果

mysql> insert into parts values('1'),('2'),('3');    

query ok, 3  rows affected (0.00  sec)    

records: 3   duplicates: 0   warnings: 0

mysql> insert into pc values('1');    

query ok, 1  row affected (0.01  sec)    

mysql> insert into pc values('5');    

error 1452  (23000 ): cannot add or update a child row: a foreign    

key constraint fails (`orange/pc`, constraint `pc_ibfk_1` foreign key    

(`cpumodel`) references `parts` (`cpu`))    

如以上例子解釋的,外來鍵在捉摸資料入口錯誤上起著重要的作用,由此可建立更為強健更加整合的資料庫。另一方面值得提到的是,執行外來鍵核實是內部資料處理的過程,且不同表之間指定複雜的內部關係可以導致資料庫的效能下降。所以,在參照完整性與效能考慮之間找到平衡點相當重要,而使用外來鍵就是能夠確保效能與穩健之間的最優結合。  我期望本期的有關外來鍵的介紹對你有所好處,你將會在下回的mysql 資料庫設計中感受到外來鍵的好處。程式設計快樂!

mysql建立主外來鍵關聯 mysql主外來鍵建立心得

mysql主主外來鍵建立 1 確保參照的表和字段是存在的 2 關聯表必須是innodb儲存型別 3 必須設定主關聯表主鍵 4 主鍵與外來鍵資料型別和字元編碼 unsigned 必須一致 5 確保以上宣告的句法是正確的 附 mysql建立表預設型別為 myisam 如果要改變預設表型別可在my.inf...

mysql查詢主外來鍵

查詢資料庫的所有主外來鍵 select table name 表名 constraint name 主 外來鍵名稱 column name 欄位名 referenced table name 主表名稱 referenced column name 主表字段 from information sche...

mysql 主外來鍵例題

內部資料是錯的,主要為了mysql的主外來鍵設定方法 建立學生表 create table student sno varchar 20 not null comment 學號 sname varchar 20 not null comment 學生姓名 s varchar 20 not null ...