次のテーブル定義があります。
CREATE TABLE `async_task` (
`idasync_task` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`idasync_type` int(10) unsigned NOT NULL,
`priority` tinyint(3) NOT NULL,
`status` enum('todo','doing','failed') NOT NULL DEFAULT 'todo',
`iduser` int(11) NOT NULL,
`date_added` datetime NOT NULL,
PRIMARY KEY (`idasync_task`),
KEY `priority_id` (`priority`,`idasync_task`),
KEY `status_type` (`status`,`idasync_type`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
async_task
を指す列をnotification
テーブルに追加しました:
ALTER TABLE `notification` ADD COLUMN `async_task_id` BIGINT(20)
そして、次の外部キーを追加すると:
ALTER TABLE `notification` ADD CONSTRAINT `fk_notification_async_task`
FOREIGN KEY (`async_task_id`) REFERENCES `async_task`(`idasync_task`);
私は得ます:
ERROR 1005 (HY000): Can't create table `my_database`.`#sql-182_2d`
(errno: 150 "Foreign key constraint is incorrectly formed")
私は他の場所を調べましたが、エラーは次のようにしか見つかりません:
他に何ができるでしょうか?
参照列と参照列の両方が同じタイプである必要があります(この場合、unsigned
属性も含まれます)。
notification.async_task_id
を符号なしとして定義しなかったため、(デフォルト)signed
を使用して作成されました。これを修正すると、外部キーはエラーを発生させません。