そのように作成されたMySQL InnoDBにテーブルがあります:
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`type` enum('MANUAL','FACEBOOK') NOT NULL DEFAULT 'MANUAL',
`role` enum('COOK','HOST','ALL') NOT NULL DEFAULT 'ALL',
`about_me` varchar(1000) DEFAULT NULL,
`food_preferences` varchar(1000) DEFAULT NULL,
`cooking_experience` varchar(1000) DEFAULT NULL,
`with_friend` bit(1) DEFAULT b'0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
次に、そのようなステートメントでテーブルを追加しようとしました(テーブルの作成中に問題があったため、外部キーは追加されませんでした):
CREATE TABLE `messages` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`from` bigint(20) NOT NULL,
`to` bigint(20) NOT NULL,
`content` varchar(10000) NOT NULL,
`timestamp_sent` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`timestamp_read` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
テーブルを作成したら、最後に外部キーを追加し'from'
、'to'
フィールドを参照する'users'.'id'
フィールドを追加する必要があります。
ALTER TABLE `messages`
ADD CONSTRAINT `messages_users_fk`
FOREIGN KEY (`from` , `to` )
REFERENCES `users` (`id` , `id` )
ON DELETE SET NULL
ON UPDATE CASCADE
, ADD INDEX `messages_users_fk_idx` (`from` ASC, `to` ASC)
私が得るエラーは次のとおりです。
エラー: エラー 1822: 外部キー制約の追加に失敗しました。参照テーブル 'users' に制約 'messages_users_fk' のインデックスがありません。
しかし、「users」テーブルにはPRIMARY
インデックスがあり'id'
ます...
また、より小さなステップを作成して、フィールドだけに外部キーを追加しようとしました'from'
:
ALTER TABLE `messages`
ADD CONSTRAINT `messages_users_fk`
FOREIGN KEY (`from` )
REFERENCES `users` (`id` )
ON DELETE SET NULL
ON UPDATE CASCADE
, ADD INDEX `messages_users_fk_idx` (`from` ASC) ;
エラーはわずかに異なります。
エラー: エラー 1825: テーブル 'messages' に外部キー制約を追加できませんでした。FOREIGN KEY 制約 'cook4food/messages_users_fk' のオプションが正しくありません。
フィールドの型は、bigint(20) NOT NULL
他の StackOverflow スレッドで問題の原因として示唆されたものと同じ ( ) です。私のテーブルはパーティション化されていません (MySQL のマニュアルでは、これは InnoDB で外部キー制約を使用するための制限として述べられています)。現在'messages'
、テーブルには行が保存されていないため、保存されたデータが問題になることはありません。困っています、助けてください。