최근 외래 키를 사용하여 데이터베이스 관리를 더 쉽게하기 시작했습니다. 나는 그들이 실제로 어떻게 작동하는지 알아 내려고 노력하는 끔찍한 시간을 보내고 있으며, 대부분의 시간 동안 문제없이 테이블간에 작업 할 수 있습니다. 하지만 현재 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 테이블을 비워서 신선한 것으로 시작하기 전까지 일찍 작업하고있었습니다.
저는 정말로 이것을 이해할 수 없으며 어떤 조언도 좋아할 것입니다. 감사!
안녕. rc_logs 테이블에 rc_teammates 테이블에없는 user_id 항목이있는 데이터가있을 수 있습니까? (나는 당신이 이미 auto_increment 오프셋 때문에 데이터를 가지고 있다고 가정한다) – Ossip
외래 키를 위반하는 항목을 찾으려면 다음과 같이 시도해 보라.'rc_logs.userid에 rc_logs를 남겨둔 채로 rc_logs에서 rc_logs.user_id, rc_teammates.uid를 선택한다. = rc_teammates.uid가 rc_teammates.uid가 null 인 경우, ' – Ossip
@Ossip 데이터가 잘못 비워 졌다고 생각합니다. 나는 지금 내 컴퓨터에 연결할 수 없기 때문에 곧이 문제를 조사 할 것이다. – GrumpyCrouton