ここではカレンダーのテーブル定義を以下に示します。
CREATE TABLE IF NOT EXISTS `calendars` (
`calendar_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
`name` varchar(255) NOT NULL,
`color` varchar(8) NOT NULL,
`showalarms` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY(`calendar_id`),
INDEX `user_name_idx` (`user_id`, `name`),
CONSTRAINT `fk_calendars_user_id` FOREIGN KEY (`user_id`)
REFERENCES `users`(`user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
私はサンドボックス内でこれをテストし、文が細かいです。それには何も問題はありません。
ただし、リンクされたコードサンプルにusers
テーブルは表示されません。外部キーを使用してテーブルを作成する前に、次の条件が満たされている必要があります。
- 参照テーブル(あなたの場合は
users
)が存在する必要があります。
- 参照先のテーブルは、InnoDBストレージエンジンを使用する必要があります。
- 参照先の列(
user_id
)がテーブルに存在している必要があります。
- 参照される列は、それを参照する外部キー列とまったく同じデータ型を持たなければなりません。あなたの場合、これは
INT UNSIGNED
です(整数の長さの引数(10)はオプションであり、2つのテーブルで異なる場合があります)。
- 参照する列は、KEYの左端の列でなければなりません。理想的には、標準SQLと互換性があるように、PRIMARY KEYまたはUNIQUE KEY全体である必要があります。技術的にも、InnoDBでは、外部キーが非固有キーを参照することもできますが、これはお勧めできません。
だから、少なくとも、すでにデータベース内の既存の以下のようなテーブルを持っている必要があります。
CREATE TABLE `users` (
`user_id` int(10) UNSIGNED NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;
私はあなたのカレンダーのテーブル定義がうまくいく前に、私のサンドボックス内でこのテーブルを作成する必要がありました。
外部リンクに送信する代わりに、ここでコードを共有してください – Mureinik