0

ユーザーテーブルとの関係を外部キーとして定義していますが、必ずしも設定する必要はありません。つまり、関連するレコードがあってはなりません。

私の MySQL エディター (Sequel Pro) では、addressId を「null を許可」することはできません。入力を無視します。最新バージョンを使用しています。

アドレス ID なしでユーザー テーブルに新しいエントリを作成すると、「子行を追加または更新できません: 外部キー制約が失敗します...」と表示されます。しかし、アドレスなしでユーザーを追加できるようにしたい! それは可能ですか?

それとも、単に外部キーを削除する必要がありますか? その欠点は何ですか?

CREATE TABLE `User1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(200) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `password` char(32) DEFAULT NULL,
  `addressId` int(11) NULL DEFAULT '0',
  `created` datetime DEFAULT NULL,
  `activated` datetime DEFAULT NULL,
  `lastLogin` datetime DEFAULT NULL,
  PRIMARY KEY (`id`,`addressId`),
  KEY `FK_User_Locale` (`localeId`),
  KEY `FK_User_Address` (`addressId`),
  CONSTRAINT `FK_User_Address` FOREIGN KEY (`addressId`) REFERENCES `Address` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
4

1 に答える 1

1

foreign_key_checks=0 に設定して、foreign_key_checks無効にしないのはなぜですか?

DROPそれ以外の場合は、要件に合わない場合に制約を加えることができます!

1 (デフォルト) に設定すると、 InnoDB テーブルの外部キー制約がチェックされます。0 に設定すると、無視されます。外部キー チェックを無効にすると、親子関係で必要とされる順序とは異なる順序で InnoDB テーブルを再ロードする場合に役立ちます。

于 2012-07-25T04:46:12.567 に答える