0

SQLスクリプトを使用してMySQLでテーブルを作成しようとしていますが、MySQLデータベースでエラー150が発生し続けます。NavicatとMySQL Workbenchの両方で次のコードを試しましたが、どちらも150エラーが発生します。

これは外部キーの問題のようですが、コードの問題が実際に何であるかがわかりません。経験豊富なDBユーザーが問題に関与するのではないかと考えていました。

SET FOREIGN_KEY_CHECKS=0;
CREATE TABLE `network_invites` (
`invite_ID` int(11) NOT NULL AUTO_INCREMENT,
`invite_From` int(11) NOT NULL,
`invite_Network` int(11) NOT NULL,
`invite_NetCreator` int(11) NOT NULL,
`invite_Message` varchar(256) NOT NULL,
`invite_Date` date DEFAULT NULL,
PRIMARY KEY (`invite_ID`),
KEY `invite_From` (`invite_From`),
KEY `invite_Network` (`invite_Network`),
KEY `invite_NetCreator` (`invite_NetCreator`),
CONSTRAINT `network_invites_ibfk_1` FOREIGN KEY (`invite_From`) REFERENCES `users`     (`user_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `network_invites_ibfk_2` FOREIGN KEY (`invite_Network`) REFERENCES `networks` (`network_ID`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `network_invites_ibfk_3` FOREIGN KEY (`invite_NetCreator`) REFERENCES `networks` (`network_Creator`) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=latin1;

FKの問題が何であるかわかりません。これらのフィールドは、DBに存在し、同じデータ型です。

助けてくれてありがとう。

4

4 に答える 4

0

回避策は次のとおりだと思います:

  1. 制約なしでテーブルを作成する

  2. ALTER TABLE を使用して制約を追加する

繰り返しますが、これは回避策であり、people@mysql またはより経験豊富な人からの連絡をお待ちしています。

于 2012-05-07T15:02:00.897 に答える
0

2 つのテーブル タイプが両方とも InnoDB であることを確認します。また、主キーと外部キーがすべて署名されていないことを確認してください。

これらの設定はすべて、「デザイン テーブル」オプションを使用して NaviCat で変更できます。

私はこの問題に何度も遭遇しましたが、これは 99% の確率でうまくいきます。

于 2012-05-07T15:02:43.857 に答える
0

問題はタイプミスです:

CONSTRAINT `network_invites_ibfk_2` 
  FOREIGN KEY (`invite_Network`) 
  REFERENCES `networks` (`network_ID`)       ---<--- either here
  ON DELETE CASCADE ON UPDATE CASCADE,

CONSTRAINT `network_invites_ibfk_3` 
  FOREIGN KEY (`invite_NetCreator`) 
  REFERENCES `networks` (`network_Creator`)  ---<--- or here (more probable)
  ON DELETE CASCADE ON UPDATE CASCADE

あなたのnetworksテーブルの主キーはおそらくそうではnetwork_IDありませんnetwork_Creator

于 2012-05-07T15:19:34.397 に答える
0

にインデックスをusers.user_ID付ける必要がnetworks.network_IDありnetworks.network_Creator、列のタイプはテーブルとまったく同じである必要がありnetwork_invitesます。

于 2012-05-07T15:04:58.380 に答える