2012-03-01 18 views
3

テーブルのセットを持つmysqlデータベースがあります。1つのテーブルには、複合キーがプライマリキーと1つの外部キーとしてあります。以下は表の定義です。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

1

テーブルがInnoDBエンジンを使用している場合は、通常このエラーが発生します。その場合は、外部キーを削除してから、alter tableを実行して列を削除する必要があります。

+0

ありがとうございます。わたしにはできる。 – Thilanka

1

外部キー制約を削除/無効にします。主キーを削除し、新しいPKを追加し、fkを有効/追加します。

3

SQL Server Management Studioを使用している場合。
次に、テーブルを右クリックしてデザインをクリックします。 複合キー を含む行を右クリックし、主キーの削除 をクリックしてから、新しい列 を追加し、その列 にデータを挿入し、その列に空のデータがないことを確認します。

は、再度必要な列に表示 、右クリックを設計し、あなたが完了している

主キーとして設定をクリックして行きます!

+0

クイック返信をありがとう。私はuiではなく、純粋なSQLコマンドを使用してそれを行う方法を探しています。私は最初に外来キーを落とすことによって答えを得るために管理しました。 – Thilanka

関連する問題