2015-11-11 32 views
0

我創建了一個名爲「Payments」的表,後來才意識到我需要更改它的兩列中的名稱和數據類型。我放棄了,並想重新創建它 - 但現在我得到的錯誤消息:「無法創建表‘dev_datenbank.payment’(錯誤:150)」在MySql-DB上重新創建errno 150中的表結果

CREATE TABLE Payment(
payment_id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, 
payment_gemeindeid INTEGER NOT NULL, 
payment_initiator TIMESTAMP, 
payment_zyklus INTEGER, 
payment_received BOOLEAN DEFAULT false 
); 
ALTER TABLE Payment ADD FOREIGN KEY(payment_gemeindeid) REFERENCES Gemeinde(gemeinde_id); 

我看着類似的問題在這裏,但我還沒有找到解決方案。大多數時候,當其他人遇到這個問題時,它必須處理FK列上具有不同數據類型的表。但在我的情況下,都是INTEGER。 另外,所有列的數據庫類型都是'InnoDB'。

我假定外鍵約束沒有正確地從MySQL中刪除。我檢查了information_schema中的表KEY_COLUMN_USAGE,但在這裏我看不到任何遺蹟。

CREATE TABLE Gemeinde 
(gemeinde_id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, 
gemeinde_name VARCHAR(50) NOT NULL, 
gemeinde_amt INTEGER, 
gemeinde_status INTEGER NOT NULL DEFAULT 1, 
gemeinde_info VARCHAR(512) 
); 
+0

同時顯示創建表Gemeinde的表聲明。 – fancyPants

+0

感謝您的回覆。我在主要描述中添加了create語句。 – Tongamann

+0

兩個表都需要在同一個引擎上運行,並且字段必須具有相同的類型和長度 –

回答

0

使用它作爲一個外鍵之前創建的payment_gemeindeid索引:

其他表如下創建。

+0

我不能,因爲我什至不能創建表。爲什麼這會有所幫助?據我所知,索引有助於性能方面 - 尤其是對於大型表格 - 但是這對我的創建表/外鍵問題有什麼影響? – Tongamann

+0

嘗試添加索引和外鍵約束作爲create table命令的一部分。如果索引(和表是InnoDB),MySQL將只對外鍵列執行引用完整性約束。 –

+1

fancyPants,實際上MySQL需要外鍵和引用鍵上的索引。更高版本將自動在外鍵上創建索引,但早期版本要求顯式創建索引。 –

0

我將XAMPP從舊版本(5.0.x)更新到新版本(5.5.30)後,我所遇到的問題消失了。現在我可以像預期的那樣刪除重新創建的表。

無論如何索引我的外鍵的提示是非常有用的,我從現在開始做這件事。因爲我的數據庫相當小,所以我從未對此重視過。謝謝你的幫助。

也可以通過下面的討論閱讀幫助我得到更多的理解這個:Does a foreign key automatically create an index?

相關問題