私は最近、外部キーを使用して自分でデータベース管理を簡単にし始めました。私は彼らが実際に働く方法を理解しようとしているひどい時を過ごしています、そして、私はそれを問題なしでテーブル間で働かせることがほとんどです。しかし、私は現在2つのテーブルに問題があります。私はそれを理解できません。外部キー整合性制約違反:1452
私はエラーになっています:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (
REDACTED
.rc_logs
, CONSTRAINTrc_logs_ibfk_1
FOREIGN KEY (user_id
) REFERENCESrc_teammates
(uid
) ON DELETE CASCADE ON UPDATE CASCADE) [/home5/redacted/public_html/redacted/rc/public/assets/php/connection.php:25]
を私のテーブルが適切に設定されているようだ、と私はそれが働いていない理由については本当に困惑しています。ここに私のテーブル構造である:私は、エラーをルックアップするために試した
CREATE TABLE `rc_teammates` (
`uid` int(11) NOT NULL,
`name` text NOT NULL,
`primary_line` int(11) NOT NULL,
`hireStatus` text NOT NULL,
`created_on` date NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1'
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `rc_teammates`
ADD PRIMARY KEY (`uid`), ADD UNIQUE KEY `uid` (`uid`), ADD KEY `primary_line` (`primary_line`), ADD KEY `primary_line_2` (`primary_line`);
ALTER TABLE `rc_teammates`
MODIFY `uid` int(11) NOT NULL AUTO_INCREMENT;
ALTER TABLE `rc_teammates`
ADD CONSTRAINT `rc_teammates_ibfk_1` FOREIGN KEY (`primary_line`) REFERENCES `rc_lines` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE;
rc_logs
CREATE TABLE IF NOT EXISTS `rc_logs` (
`uid` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`line` int(11) NOT NULL,
`date` date NOT NULL,
`type` varchar(15) NOT NULL,
`timein` time NOT NULL,
`timeout` time NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=latin1;
ALTER TABLE `rc_logs`
ADD PRIMARY KEY (`uid`), ADD KEY `user_id` (`user_id`), ADD KEY `line` (`line`), ADD KEY `user_id_2` (`user_id`);
ALTER TABLE `rc_logs`
MODIFY `uid` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=53;
ALTER TABLE `rc_logs`
ADD CONSTRAINT `rc_logs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `rc_teammates` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `rc_logs_ibfk_2` FOREIGN KEY (`line`) REFERENCES `rc_lines` (`uid`) ON DELETE CASCADE ON UPDATE CASCADE;
rc_teammates、と私は私が、前にこの問題を持っていました私がそれをどのように解決したか覚えていない。悪い点は、rc_teammatesテーブルを空にして新鮮なものにするまで、これは早くから働いていたことです。
私は本当にこれを理解することができず、どんな指針も愛するでしょう。ありがとう!
hi。 rc_logsテーブルに、rc_teammatesテーブルに存在しないuser_idエントリを持つデータがあるとしますか? (私はすでにauto_incrementオフセットのためにデータを持っていると仮定します) – Ossip
外部キーに違反するエントリを見つけるために、次のようなものを試してください: 'rc_logs.useridでrc_logs.uid、rc_logs.user_id、rc_teammates.uidを残してください。 = rc_teammates.uidがrc_teammates.uidがnullの場合、 ' – Ossip
@Ossip私はデータを間違って空にしたと思います。私はすぐに私のコンピュータにアクセスすることができませんので、すぐにこれを調べます – GrumpyCrouton