2012-03-01 106 views
3

我有一個具有表集合的mysql數據庫一個表具有作爲主鍵和單個外鍵的組合鍵。以下是表格定義。更改在MySQL中具有外鍵約束的表主鍵

CREATE TABLE IF NOT EXISTS `ohrm_emp_education` (
    `emp_number` int(11) NOT NULL, 
    `education_id` int(11) NOT NULL, 
    `institute` varchar(100) DEFAULT NULL, 
    `major` varchar(100) DEFAULT NULL, 
    `year` decimal(4,0) DEFAULT NULL, 
    `score` varchar(25) DEFAULT NULL, 
    `start_date` date DEFAULT NULL, 
    `end_date` date DEFAULT NULL, 
    PRIMARY KEY (`emp_number`,`education_id`), 
    KEY `education_id` (`education_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 



ALTER TABLE `ohrm_emp_education` 
ADD CONSTRAINT `ohrm_emp_education_ibfk_1` FOREIGN KEY (`emp_number`) REFERENCES `hs_hr_employee` (`emp_number`) ON DELETE CASCADE, 
ADD CONSTRAINT `ohrm_emp_education_ibfk_2` FOREIGN KEY (`education_id`) REFERENCES `ohrm_education` (`id`) ON DELETE CASCADE; 

但現在我需要添加一個新的列到這個現有的表,並將其作爲主鍵。我試着用下面的查詢。

ALTER TABLE ohrm_emp_education 
ADD column id int not null AUTO_INCREMENT, 
DROP PRIMARY KEY, 
ADD primary key (id) 

但它顯示了以下錯誤

#1025 - Error on rename of './test/#sql-4f6_19b' to './test/ohrm_emp_education' (errno: 150) 

我這是在互聯網上找到,但不能妥善解決這幾個答案嘗試。有人可以幫助我做到這一點。提前致謝。

回答

3

嘗試先刪除外鍵,這樣的事情:

ALTER TABLE `ohrm_emp_education` DROP FOREIGN KEY `emp_number`; 
ALTER TABLE `ohrm_emp_education` DROP FOREIGN KEY `education_id`; 

然後改變表。

+0

它與我合作。謝謝您的幫助。 – Thilanka 2012-03-01 08:37:24

1

如果您的表使用InnoDB引擎,則通常會出現此錯誤。在這種情況下,您必須刪除外鍵,然後執行alter table並刪除該列。

+0

謝謝。這個對我有用。 – Thilanka 2012-03-01 08:59:07

1

刪除/禁用外鍵約束。刪除主鍵,添加新的PK,啓用/添加fk。

3

如果您正在使用SQL Server Management Studio。
然後右鍵單擊表格並單擊設計。 然後右鍵單擊包含複合鍵 的行,然後單擊刪除主鍵 ,然後添加新列 並將數據插入該列 並檢查該列是否沒有空數據。

然後再去設計所要求的列視圖 ,然後右擊並作爲主鍵

大功告成點擊設置!

+0

感謝您的快速回復。我正在尋找一種方法,我們可以使用純sql命令,而不是使用ui。我通過首先刪除外鍵來獲得答案。 – Thilanka 2012-03-01 08:35:48