2013-01-15 4 views
0

삽입 내가 가진 5 개 테이블 MySql 제약 조건 위반.

students PK : ID -> anum, first, last 
studentinfo PK/FK : ID -> why, student_commenets, finished, aidyear 
Times  PK/FK : ID -> signintime, counselor_start_time, 
          additional_time, finish_time 
counselor PK/FK : ID -> firstcounselor, secondcounselor, thirdcounselor 
Comments PK/FK : ID -> counselorcomments, additional_commenets 

나는 세 가지 다른 테이블 (학생, studentinfo, 시간)

에 작성해야 해당 페이지의

signinpage.php라는 페이지가와 데이터베이스

내 코드 휴한지과 같습니다

if (empty($errors) === true) 
{ 
include('core/queries/inserts.updates.selects/students.php'); 
include('core/queries/inserts.updates.selects/studentinfo.php'); 
include('core/queries/inserts.updates.selects/signintime.php'); 

$dbh = null;  
header('location: signedin.php'); 
exit(); 
} 

각 파일

실제 삽입 쿼리입니다. 나는 데 오류가

을 (당신의 yall이 그들을 볼 필요가 있다면이 게시물을 업데이트합니다) :

SQLSTATE [23000] : 무결성 제약 조건 위반 : 1452 추가하거나 할 수 없습니다 갱신 자식 행 : 외래 키 제약 조건이 실패

( test. times, CONSTRAINT times_ibfk_2 FOREIGN KEY ( id)는 UPDATE CASCADE ON DELETE CASCADE ON ( id students를) 참고 문헌)

이것에 추가하려면 첫 번째 쿼리 (students.php와 두 번째 쿼리 studentinfo.php) 이 제대로 삽입됩니다. 동일한 ID, 문제는 signintime을 table : times에 삽입 할 때 발생합니다.

phpmyadmin에서 학생 (또는 학생)이 세션 (PK ID)을 시작하기 때문에 두 테이블 (학생 정보와 시간)이 모두 삭제되어 캐스케이드되고 원래 테이블 (학생)로 업데이트되도록 구성됩니다.

어떻게이 오류를 해결할 수 있습니까?

편집 :

<?php 
require('core/init.php'); 

try 
{ 
    $null = NULL; 
    $query = $dbh->prepare("INSERT INTO `times` (signintime) VALUES (:signintime)"); 
    $query->bindParam(':signintime' , $null); 
    $query->execute(); 
} 

     catch (PDOException $e) 
     { 
       error_log($e->getMessage()); 
       die($e->getMessage()); 
     } 
?> 
+2

안녕하세요,이 귀하의 질문에 관련이없는,하지만 당신은이 글을 읽고 혜택을 누릴 수 있습니다 : http://support.microsoft.com/kb/283878 – user1909426

+0

그 주셔서 감사합니다. 이 비즈니스의 필요에 따라 중복 된 데이터 (anum = 학생 ID)를 저장해야합니다. 여러 명의 학생이 여러 번 들어 오기 때문입니다. 그때 나는 이것이 좋은 형태라고 느낀다. 그러나 독서 재료에 대한 tyvm! – RaGe10940

답변

0

테이블 디자인은 나에게 잘못 보인다. students 테이블의 각 행에 대해 times 테이블에 여러 항목이있을 수 있다고 가정합니다.

id - PK 
student_id - FK 
signintime 
counselor_start_time 
additional_time 
finish_time 

그런 다음 특정 학생에 대한 각 행이 같은 student_id 값을 가질 것이지만, id 값을 다른 :이 경우에는 times에 다음과 같은 열이 필요합니다.

+0

이미 anum (죄송합니다. 언급하지 않았다) 학생 ID가 있습니다. 여러 학생이 여러 번 사무실로 돌아올 것으로 예상됩니다. 따라서 기본 키/FK로 음수를 사용하면 위반이 발생합니까? 아니? – RaGe10940

+0

나는 'times' 테이블에서 외래 키로 사용되어야한다고 말하고 있는데,이 테이블에는 고유 한 기본 키가 필요합니다. –

+0

이 작업도 실패했습니다. 나는 계속 제약 조건을 얻고있다. – RaGe10940

0

다음 진술과 예제는 앞서 언급 한 테이블과 다르지만 의 생각은 여전히 ​​입니다. 그 값이 아직 부모 테이블에 존재하지 않는 한 아이 테이블에 값을 삽입하려고하기 때문에

오류가 생성 된 이유입니다. 자식 테이블은 다른 테이블 (은 부모)에 종속됨을 의미합니다.StudentListAddressList :

은 두 개의 테이블이 있습니다

CREATE TABLE StudentList 
(
    ID INT PRIMARY KEY, 
    NAme VARCHAR(50) 
); 

CREATE TABLE AddressList 
(
    StudentID INT, 
    Address VARCHAR(50), 
    CONSTRAINT tb_fk FOREIGN KEY (StudentID) 
    REFERENCES StudentList(ID) 
); 

INSERT INTO StudentList VALUES (1, 'Jon'); 
INSERT INTO StudentList VALUES (2, 'Skeet'); 

INSERT INTO AddressList VALUES (1, 'Hello'); 
INSERT INTO AddressList VALUES (2, 'World'); 
INSERT INTO AddressList VALUES (1, 'Other Address'); 

, 다음 스키마를 고려, 추가로 설명합니다. 테이블 Address은 하위 테이블이며 테이블 StudentList (은 부모 테이블이라고도 함)에 종속됩니다. 테이블 AddressList의 열 StudentID에 삽입 할 수있는 유일한 값은 이 테이블 StudentList에있는 유일한 값이기 때문에 1 and 2입니다.

당신이 테이블 Address1 and 2이 아닌 다른 ID로 레코드를 삽입하려고, 예를 들어,이 오류가 말하는 생성

INSERT INTO AddressList VALUES (1, 'Other Address'); 

:

추가 또는 자식 행을 업데이트 할 수 없습니다를하십시오 외래 키 제약 조건이 실패합니다. (db_2_ec2e8. addresslist, 제약 조건 tb_fk 외래 키 (StudentID) 참조 studentlist 1,235,))

StudentID의 값을 테이블에 삽입되기 때문에, 부모 표 (StudentList)를 사용할 수 없습니다.

그래서 저는 이것이 당신이 지금 이해하는 데 도움이되기를 바랍니다.

+0

동일한 PHP 스크립트를 사용하여 학생, studentinfo 및 시간을 동시에 삽입합니다. 현재 sessionid 나 PK : ID는 학생 테이블을 제외한 모든 테이블의 FK입니다. – RaGe10940

+0

또한 포함해야 할 한 가지는 학생 정보가있는 데이터베이스가 없다는 것입니다. 학생 자신이 학생 테이블에 레코드를 삽입합니다. 그게 내 문제 야. 학생 테이블, 학생 정보 테이블 및 시간 테이블을 한꺼번에 삽입합니다. – RaGe10940

관련 문제