0

テーブル:

    CREATE TABLE `relation` (
     `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     `name` varchar(40) NOT NULL,
     `gender` tinyint(1) DEFAULT NULL,
     PRIMARY KEY (`id`),
     UNIQUE KEY `unique_relation` (`name`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    CREATE TABLE `invite` (
     `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     `date_sent` date NOT NULL,
     `user_id` int(10) unsigned NOT NULL,
     `relation_id` int(10) unsigned NOT NULL,
     `email` varchar(255) NOT NULL,
     `code` varchar(255) NOT NULL,
     PRIMARY KEY (`id`),
     KEY `fk_user` (`user_id`),
     CONSTRAINT `fk_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

実行された SQL ステートメントは次のとおりです。

ALTER TABLE `invite` 
ADD CONSTRAINT `fk_relation`  
FOREIGN KEY (`relation_id`) 
REFERENCES `relation` (`id`) 
ON DELETE CASCADE ON UPDATE RESTRICT

Mysql エラー:

SQLSTATE[HY000]: General error: 1005 Can't create table 'dbtest.#sql-d00_39' (errno: 121).

relationship.idおよびinvoke.relation_id列は、同じタイプのint(10) unsigned です。

更新 このキーを追加している間、テーブルの招待状は空です。テーブル リレーションには 3 つの行があります。

4

2 に答える 2

0

外部キー作成用の DDL には、「削除」および「更新」のアクションを指定するステートメントが自動的に含まれるようになりました。ただし、「削除」の場合、「ON DELETE RESTRICT」ステートメントが含まれており、有効な T-SQL ステートメントではないようです。

これを試して :

ALTER TABLE 招待 WITH CHECK ADD CONSTRAINT fk_relation FOREIGN KEY (relation_id) REFERENCES 関係 (id)

于 2013-07-04T14:41:40.530 に答える