web-dev-qa-db-ja.com

MySQL外部キーONDELETE SETNULLデータ型チェックエラー

私は正規化されたデータベースに取り組んでいます。安全のために、外部キーを使用したかったのです。

私のデータベース:

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 ;

応答(エラー):
名前に外部キーを作成中にエラーが発生しました(データ型を確認してください)

だから、これを修正する方法は?

11

エラーは自明です。 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デモです

17
peterm

両方のキーは同じタイプと長さである必要があり、varcharとintがあります。

これがあなたが望むものです:

ALTER TABLE  `names` ADD FOREIGN KEY (  `id` ) REFERENCES  `users` (
`name_id`)
0
Mihai