簡體   English   中英

MySQL錯誤150,無法創建表

[英]MySQL error 150, cannot create table

我在創建表時遇到了麻煩,但我不明白怎么了。 phpMyAdmin在PRIMARY KEY聲明旁邊設置錯誤指示符...我不知道為什么這是錯誤的...

該表是一個子表,它與另一個表具有一對多的標識關系。

CREATE TABLE IF NOT EXISTS `ruilen`.`Voorwerpen` (
`voorwerpen_id` INT NOT NULL AUTO_INCREMENT ,
`naam` VARCHAR( 45 ) NOT NULL ,
`beschrijving` VARCHAR( 45 ) NULL ,
`Gebruikers_gebruiker_id` INT NOT NULL ,
PRIMARY KEY ( `voorwerpen_id` , `Gebruikers_gebruiker_id` ) ,
CONSTRAINT `fk_Voorwerpen_Gebruikers1` FOREIGN KEY ( `Gebruikers_gebruiker_id` ) REFERENCES `ruilen`.`Gebruikers` (
`gebruiker_id`
) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE = InnoDB;

MySQL said: Documentation
#1005 - Can't create table 'ruilen.voorwerpen' (errno: 150) 

編輯:這是我可以找到的所有關於錯誤代碼的文檔: 鏈接

EDIT2: 圖片已刪除

編輯3:

CREATE TABLE `gebruikers` (
 `gebruiker_id` int(11) NOT NULL,
 `naam` varchar(45) NOT NULL,
 `straat` varchar(45) NOT NULL,
 `gemeente` varchar(45) NOT NULL,
 `mail` varchar(45) NOT NULL,
 `beschrijving` varchar(45) DEFAULT NULL,
 PRIMARY KEY (`gebruiker_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

檢查Gebruikers_gebruiker_idGebruikers gebruiker_id具有相同的數據類型。

還要檢查Gebruikers gebruiker_id是一個PRIMARY KEYGebruikers

更新:

您已定義ON DELETE SET NULL ,而您的Gebruikers_gebruiker_id被定義為NOT NULL

對其進行修復(更改為ON DELETE CASCADE或僅刪除子句),便可以創建引用。

我的情況通常是由於數據類型不匹配。 請記住,如果這是一個int檢查,則兩者都是未簽名的

這並不是mysql的錯誤特征。 可能有兩個原因! 1)PK和FK的數據類型不匹配。 2)在您需要顯式定義索引的4.1之前的版本中,可能會出現此錯誤。

添加的另一個原因:

不同的字符集或引擎也會導致此問題

我在另一個表中有一個具有相同名稱的約束。 嘗試更改約束的名稱。

以我個人的經驗,這是MySQL的一個非常多蟲的特性-最小的麻煩是僅轉儲表結構和數據,然后刪除表並從轉儲中重新運行SQL,然后手動重新創建索引和外鍵約束在需要的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM