Twibap
146
2019-03-26 13:44:15
2
1774

mysql error 1452 질문 드립니다.


mysql error 1452는 외래키 관련된 에러로 외래키 참조 테이블에 없는 값으로 삽입/수정 하려고 할 때 발생하는 에러로 알고있습니다.

그런데 저는 분명 있는 값을 넣고있는데 이 에러가 뜨고 있네요... 데이터 겨우 한 두개 넣고있는데 하루종일 씨름중입니다 ㅠㅠ


아래는 제가 사용한 쿼리입니다.

owner 가 부모 business 가 자식 테이블이며, business 테이블의 'owner_no' 컬럼이 외래키로 owner 테이블의 owner_no 컬럼을 참조합니다. 테이블 생성 쿼리는 workbench 자동완성 기능을 사용했습니다. 사용중인 DB는 5.1 버전으로 Index의 VISIBLE 기능이 없어 해당 부분만 삭제했습니다.

-- MySQL Script generated by MySQL Workbench
-- Tue Mar 26 12:51:34 2019
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema test
-- -----------------------------------------------------
DROP SCHEMA IF EXISTS `test` ;

-- -----------------------------------------------------
-- Schema test
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `test` DEFAULT CHARACTER SET utf8 ;
USE `test` ;

-- -----------------------------------------------------
-- Table `toast`.`business`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `test`.`business` (
  `business_no` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `business_id` CHAR(12) NOT NULL,
  `owner_no` INT UNSIGNED NOT NULL,
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`business_no`),
  INDEX `who_is_owner_idx` (`owner_no` ASC) ,
  UNIQUE INDEX `business_id_UNIQUE` (`business_id` ASC) ,
  CONSTRAINT `who_is_owner`
    FOREIGN KEY (`owner_no`)
    REFERENCES `test`.`owner` (`owner_no`)
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `toast`.`owner`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `test`.`owner` (
  `owner_no` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `owner_name` VARCHAR(10) NOT NULL,
  `owner_id` VARCHAR(50) NOT NULL,
  `owner_pw` CHAR(41) NOT NULL,
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`owner_no`),
  UNIQUE INDEX `owner_id_UNIQUE` (`owner_id` ASC) );


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;


다음은 데이터 삽입 쿼리입니다.


INSERT INTO owner (
    owner_name,
    owner_id,
    owner_pw
) VALUES(
    '영희',           -- owner_name
    'owner_1',         -- owner_id
    password('1234qwer')   -- owenr_pw
);

INSERT INTO business (
    business_id,
    owner_no
) VALUES (
    '234-56-78901',
    1
);


business의 owner_no 컬럼에 owner 테이블의 owner_no 값인 1을 넣었는데 에러가 발생하고 있습니다. 

어디가 원인인지 전혀 모르겠네요... 도와주세요!


0
  • 답변 2

  • 르매
    567
    2019-03-26 14:02:30

    문제가 될만한 부분은 없어보이는데.. 1452 에러가 나오다니 이상하네요.

    5.1이라고해서 다를 만한 부분은 보이지 않는데...

    일단. 5.7에서 본문의 내용을 돌려봤는데, 아무 이상 없었습니다.

    혹시 트리거가 걸려있어서.. 다른 테이블에 INSERT  되는 과정에서 난 오류라던가.. 그런건 아니시죠?

  • Twibap
    146
    2019-03-26 14:10:05 작성 2019-03-26 17:57:19 수정됨

    트리거는 아직 사용 전 단계라 제가 손 댄부분은 없습니다.

    해당 테이블만 별도로 테스트 스키마 만들어서 해봤는데도 저는 에러가 나더라구요

    좀 더 다양한 환경에서 테스트 해봐야겠네요. 감사합니다. 


    ---- 추가사항 ----

    문제 발생은 개발용 컴퓨터였는데 기본 설정값으로 사용하던 것이 원인이었습니다.

    cafe24에서 운영중인 서버의 설정을 내려받으니 잘 동작합니다.

    설정값 공부를 해야겠네요.

  • 로그인을 하시면 답변을 등록할 수 있습니다.