2

テーブルのセットを持つmysqlデータベースがあります.1つのテーブルには、主キーとしての複合キーと単一の外部キーがあります。以下は、テーブルの定義です。

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)

インターネットで見つけたいくつかの回答を試してみましたが、適切に解決できませんでした。誰かがこれについて私を助けることができますか?前もって感謝します。

4

4 に答える 4

3

最初に外部キーを削除してみてください。次のようになります。

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

そして、テーブルを変更します。

于 2012-03-01T05:19:35.527 に答える
3

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

次に、再びデザイン ビューに移動し、必要な列を右クリックして、[主キーとして設定] をクリックします。

あなたは完了です!!

于 2012-03-01T05:25:26.167 に答える
1

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

于 2012-03-01T05:22:43.377 に答える
1

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

于 2012-03-01T05:22:49.040 に答える