我對SQL很陌生,我試圖定義一個2表Hospital
和Hospital_Address
,但是當我試圖在Hospital_Address
中添加外鍵時,它會拋出一個錯誤: "1215: Cannot add foreign key
「MySQL錯誤代碼1215:無法添加外鍵約束
create table Hospital (
HId Int not null,
HName varchar(40) not null,
HDept int, Hbed Int,
HAreaCd int not null,
Primary Key (HId)
);
create table Hospital_Address (
HAreaCd Int not null,
HArea varchar(40) not null,
HCity varchar(40),
HAdd1 varchar(40),
HAdd2 varchar(40),
Primary Key (HArea),
foreign key (HAreaCd) references Hospital (HAreaCd));
請幫我在這方面。在此先感謝。
謝謝Spencer,在定義Hospital_IX1之後,我能夠定義Hospital_Address表。但作爲一個noob,我很困惑爲什麼我們要定義一個新索引Hospital_IX1 ......並且當我們創建它時,Hospital_Address表怎麼知道這個索引是Hospital_IX1。那麼Hospital_Address的主鍵索引會發生什麼? – user3822147
InnoDB **要求在INDEX引用的列上定義一個INDEX。 (在封面之下,InnoDB需要該索引以便強制約束;如果沒有該索引,InnoDB將不得不做一些醜陋的併發 - 殺死整個表的鎖定;但是InnoDB甚至不會去那裏,它只需要一個合適的索引MySQL不關心索引名稱是什麼;它只是檢查一個合適的索引是否存在,在這種情況下,是任何具有'HAreaCd'作爲主要列的索引。關於表,索引,約束條件等都記錄在數據庫中 – spencer7593
向表中添加第二個索引不會影響表上的現有索引; PRIMARY KEY仍然是PRIMARY KEY,任何UNIQUE KEY仍然是唯一鍵;任何現有的索引仍然是索引,每當我們運行引用表的查詢時,MySQL都會訪問有關可用索引和唯一性,數據分佈和基數的信息,所以優化器可以選擇適當的訪問計劃 – spencer7593