MySQLデータベースのテーブルに外部キー制約を追加する際に問題があります。外部キーの作成
私は、次のユーザーテーブルがあります。
CREATE TABLE `user` (
`Id` varchar(128) NOT NULL,
`Email` varchar(255) NOT NULL,
`EmailConfirmed` tinyint(1) NOT NULL,
`PasswordHash` longtext,
`SecurityStamp` longtext,
`PhoneNumber` longtext,
`PhoneNumberConfirmed` tinyint(1) NOT NULL,
`TwoFactorEnabled` tinyint(1) NOT NULL,
`LockoutEndDateUtc` datetime DEFAULT NULL,
`LockoutEnabled` tinyint(1) NOT NULL,
`AccessFailedCount` int(11) NOT NULL,
`UserName` varchar(255) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
をそして、これは私は外部キーを追加しようとしている私のusernoticeテーブルです:
CREATE TABLE `usernotice` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`notifySitemap` bit(1) NOT NULL,
`notifyRobots` bit(1) NOT NULL,
`user_id` varchar(128) DEFAULT NULL,
`health_site_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `user_constraint_idx` (`user_id`),
KEY `healthSiteId_idx` (`health_site_id`),
CONSTRAINT `healthSiteId` FOREIGN KEY (`health_site_id`) REFERENCES `health_site` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8
私が参照しようとしていますusernotice.user_id列のuser.id列。これを行うには、次のSQLを使用しています。
ALTER TABLE usernotice
ADD CONSTRAINT userId
FOREIGN KEY (user_id)
REFERENCES user (Id)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
これを実行すると、1215コードでエラーが発生します。誰かが私が間違っていることを教えてもらえますか?
編集:show create table
クエリーを調べた後、私は使用された文字セットの違いに気付きました。 usernotice
テーブルを別の文字セットで再作成し、これを修正しました。
'user.id'はプライマリキーですか? 1215のコードは何を意味しますか? – jarlh
はい、 'user.id'は主キーです。エラー:1215 SQLSTATE:HY000(ER_CANNOT_ADD_FOREIGN) メッセージ:外部キー制約を追加できません。 –
この場合、 'usernotice'テーブルは空でなければなりません。 – Noman