Error Note

[Error note] 31. MySQL 참조 테이블 데이터 삽입 오류 : Cannot add or update a child row: a foriegn key constraint fails

Song hyun 2024. 5. 29. 10:38
728x90
반응형

[Error note] 31. MySQL 참조 테이블 데이터 삽입 오류 : Cannot add or update a child row: a foriegn key constraint fails


 

물건을 구매한 고객의 정보가 저장되는 usertbl, 그리고 고객이 구매한 물건의 정보가 저장되는 buytbl.

buytbl에 '홍길동','운동화',30,2라는 값을 입력하던 도중, 에러가 발생했다.

 

 

작성한 코드와 에러 메세지를 읽어보자. 

Error Code: 1452. Cannot add or update a child row: a foriegn key constraint fails

-- 데이터 입력하기

insert into usertbl(userName,birthYear,addr,mobile) 
values('이승기',1987,'서울','011-1111-111'),
	  ('김경호',1987,'전남','019-333-333'),
      ('윤종신',1987,'경남',''),
      ('임재범',1987,'서울','011-222-222'),
      ('은지원',1987,'경북','011-444-444'),
      ('조관우',1987,'경기','011-555-555'),
      ('김범수',1987,'경남','011-1111-111'),
      ('조용필',1987,'경기','011-1111-111'),
      ('바비킴',1987,'서울','011-1111-111'),
      ('성시경',1987,'경남',null);

-- buyTBL 데이터 한번에 입력 
insert into buytbl(userName, prodName, price, amount)
values  ('김범수', '운동화', 30, 2),
	      ('김범수', '노트북', 1000, 1),
        ('조용필', '모니터', 200, 1),
        ('바비킴', '모니터', 200, 5),
        ('김범수', '청바지', 50, 3),
        ('바비킴', '메모리', 80, 10),
        ('성시경', '책', 15, 5),
        ('은지원', '책', 15, 2),
        ('은지원', '청바지', 50, 1),
        ('바비킴', '운동화', 30, 2),
        ('은지원', '책', 15, 1),
        ('바비킴', '운동화', 30, 2);

select*from buytbl;

insert into buytbl(userName,prodName,price,amount)
values('홍길동','운동화',30,2);

desc usertbl;
select * from usertbl;
delete from usertbl;

 

 

buytbl은 usertbl에서 userName이라는 외래키(Foriegn Key)를 받아와 작성되는 테이블이다.

즉, usertbl에 해당 데이터(이름)이 존재하지 않으면, 외래키로 받아올 수 없는 것이다.

 

위에서 작성한 데이터는 '홍길동'이지만,

usertbl에 입력한 코드들을 살펴보면 '홍길동'이라는 userName을 가진 데이터는 usertbl에 없다는 걸 알 수 있다.

 

이번에는 usertbl에 존재하는 '바비킴'을 사용해 데이터를 입력해보았다.

아까와는 달리 성공적으로 입력되었음을 알 수 있다.

 

RDBMS의 개념, 외래키-기본키의 관계에 대해 다시 한 번 생각하게 된 오류였다!

728x90
반응형