私は正規化されたデータベースに取り組んでいます。安全のために、外部キーを使用したかったのです。
私のデータベース:
CREATE TABLE `names` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(250) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `name_2` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `name_id` (`name_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
コマンド:
ALTER TABLE `names` ADD FOREIGN KEY ( `name` ) REFERENCES `temp`.`users` (
`name_id`
) ON DELETE SET NULL ON UPDATE CASCADE ;
応答(エラー):
名前に外部キーを作成中にエラーが発生しました(データ型を確認してください)
だから、これを修正する方法は?
エラーは自明です。 Name
テーブルのnames
はタイプvarchar(250)
ですが、users
テーブルの_name_id
_はタイプint(11)
です。
しかし、users
テーブルを参照するnames
テーブルにFKを配置するつもりだったと思います。
_ALTER TABLE users
ADD FOREIGN KEY (name_id) REFERENCES names (id)
ON DELETE SET NULL ON UPDATE CASCADE;
_
これがSQLFiddleデモです
両方のキーは同じタイプと長さである必要があり、varcharとintがあります。
これがあなたが望むものです:
ALTER TABLE `names` ADD FOREIGN KEY ( `id` ) REFERENCES `users` (
`name_id`)