2017-11-27 14 views
1

私は2つのテーブル:UIDがプライマリキーで自動インクリメントで、tbl_login_infoLoginID(プライマリ)など、タイムスタンプのようないくつかの他の情報と一緒にUIDMySQL:子行を追加または更新できません:UIDを参照するときに外部キー制約が失敗する

私はこのSQL文

CONSTRAINT `uid-info/login` FOREIGN KEY (`UID`) REFERENCES `tbl_usr_info` (`UID`) 

を実行することにより、tbl_usr_infoにUIDとtbl_login_infoからUIDを参照しようとしているが、私はこのエラーを取得してい

Cannot add or update a child row: a foreign key constraint fails (CONSTRAINT uid-info/login FOREIGN KEY (UID) REFERENCES tbl_usr_info (UID))

tbl_usr_info table

CREATE TABLE `tbl_usr_info` (
    `UID` int(50) NOT NULL AUTO_INCREMENT, 
    `username` varchar(50) NOT NULL DEFAULT '', 
    `password` varchar(50) NOT NULL DEFAULT '', 
    `email` varchar(50) NOT NULL DEFAULT '', 
    PRIMARY KEY (`UID`), 
    UNIQUE KEY `username` (`username`), 
    UNIQUE KEY `email` (`email`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

tbl_usr_login table

CREATE TABLE `tbl_usr_login` (
     `LoginID` int(11) NOT NULL AUTO_INCREMENT, 
     `UID` int(50) NOT NULL, 
     `ip_address` varchar(55) DEFAULT NULL, 
     `device` varchar(100) DEFAULT NULL, 
     `time_stamp` datetime DEFAULT NULL, 
     PRIMARY KEY (`LoginID`) 
    )ENGINE=InnoDB DEFAULT CHARSET=latin1; 

それは私が間違っていること、それを参照していた順番ですか?

答えて

1

私はあなたの外部キー制約をテストし、それは私のために、エラーなしで動作します。しかし、私のテーブルは空でした。

外部キー制約の最も一般的なタイプの失敗の1つは、制約を作成すると、親テーブルに存在しない値が子テーブルに含まれていることです。その場合、外部キー制約を満たすことができないため、制約の作成は失敗します。

あなたは比類のないUID値をチェックすることができます

SELECT COUNT(*) 
FROM tbl_usr_login AS l 
LEFT OUTER JOIN tbl_usr_info AS i 
    ON l.UID = i.UID 
WHERE i.UID is NULL; 

P.S:これは、あなたの質問に接線方向であるが、私はあなたがINT(50)を使用している気づきます。 INTへの議論はあなたが何を意味するのかを意味するものではありません。 INT(50)は50桁を格納できるわけではありません。 Types in MySQL: BigInt(20) vs Int(20)

+0

自分のtbl_usr_infoに「UID = 0」のユーザーがいませんでした。それが問題でした。どうもありがとう –

0

foreign keyを有効にするには、子列と親列の定義が他の条件と一致する必要があります。

あなたの問題の場合は

、次の手順では、それを解決する必要があります

  1. は、ユーザーテーブルを作成します。
  2. ログイン情報テーブルを作成します。
  3. ログインテーブルのUIDカラムにインデックス/キーを追加します。
  4. 今、参照制約を追加します。

を参照してください:
のMySQL:外部キー制約を使用する:

https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html

関連する問題