2014-07-07 2 views
0

나는 3 개의 테이블 : company, casereport을 가지고 있습니다.화합물 외래 키 INSERT

기업 :

CREATE TABLE IF NOT EXISTS `db`.`company` (
    `name` VARCHAR(50) NOT NULL, 
    `password` VARCHAR(50) NOT NULL, 
    PRIMARY KEY (`name`)) 
ENGINE = InnoDB; 

경우 :

CREATE TABLE IF NOT EXISTS `db`.`case` (
    `id` VARCHAR(50) NOT NULL, 
    `image` VARCHAR(255) NULL, 
    `title` VARCHAR(100) NULL, 
    `description` VARCHAR(255) NULL, 
    `address` VARCHAR(255) NULL, 
    `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `company_name` VARCHAR(50) NOT NULL, 
    PRIMARY KEY (`company_name`, `id`), 
    CONSTRAINT `fk_case_company` 
    FOREIGN KEY (`company_name`) 
    REFERENCES `db`.`company` (`name`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

보고서 :

CREATE TABLE IF NOT EXISTS `db`.`report` (
    `type` VARCHAR(50) NULL, 
    `image` VARCHAR(255) NULL, 
    `description` VARCHAR(255) NULL, 
    `approval` BINARY NULL DEFAULT 0, 
    `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `id` INT NOT NULL AUTO_INCREMENT, 
    `case_company_name` VARCHAR(50) NOT NULL, 
    `case_id` VARCHAR(50) NOT NULL, 
    PRIMARY KEY (`id`, `case_company_name`, `case_id`), 
    INDEX `fk_report_case1_idx` (`case_company_name` ASC, `case_id` ASC), 
    CONSTRAINT `fk_report_case1` 
    FOREIGN KEY (`case_company_name` , `case_id`) 
    REFERENCES `db`.`case` (`company_name` , `id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

나는에 행을 삽입 할 때 phpMyAdmin를 사용테이블 : 내가 상상으로

enter image description here

그래서 외부 키가 작동된다. 내가 2 열로 구성된 화합물 외래 키를 사용하는 report 테이블에 행을 삽입하려고 할 때, 그것은 다음과 같습니다

enter image description here

는 왜입니까? 내게는 두 테이블간에 연결이 이루어지지 않은 것 같고 case_company_namecase_id은 그냥 일반적인 열일뿐입니다.

답변

0

대부분의 경우 phpmyadmin이 이런 식으로 복합 참조와 작동하지 않는다는 것을 의미합니다. SHOW CREATE TABLE report

을 사용하면 쉽게 기존 제약 조건을 확인할 수 있습니다.