2

그래서 mysql workbench에서 스키마를 전달할 때 꽤 큰 오류가 발생합니다.테이블 작성 양식에 MySQL 150 오류가 발생했습니다 (외래 키 옵션이 열에 null이 아닌 일치하지 않음, FIXED)

모든 pk와 fk가 동일한 유형인지 확인했습니다. 모든 테이블은 무한 엔진입니다.

어쩌면 나는 여기 바보 같은 것을 놓치고있다. (만약 내가했다면 사과한다.) 그러나 당신의 도움은 많이 감사 할 것이다. 다음

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL'; 

SHOW WARNINGS; 
CREATE SCHEMA IF NOT EXISTS `bis` DEFAULT CHARACTER SET latin1 ; 
SHOW WARNINGS; 
USE `bis` ; 

-- ----------------------------------------------------- 
-- Table `bis`.`entities` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `bis`.`entities` ; 

SHOW WARNINGS; 
CREATE TABLE IF NOT EXISTS `bis`.`entities` (
    `entity_name` VARCHAR(64) NOT NULL , 
    `entity_description` TEXT NULL DEFAULT NULL , 
    `entity_email` TEXT NOT NULL , 
    `entity_phone` VARCHAR(11) NULL DEFAULT NULL , 
    `entity_website` VARCHAR(64) NULL DEFAULT NULL , 
    PRIMARY KEY (`entity_name`)) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = latin1; 

SHOW WARNINGS; 

-- ----------------------------------------------------- 
-- Table `bis`.`users` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `bis`.`users` ; 

SHOW WARNINGS; 
CREATE TABLE IF NOT EXISTS `bis`.`users` (
    `user_name` VARCHAR(64) NOT NULL , 
    `user_entity` VARCHAR(64) NOT NULL , 
    `user_email` TEXT NOT NULL , 
    `user_password` CHAR(64) NOT NULL , 
    `user_salt` CHAR(64) NOT NULL , 
    `user_role` VARCHAR(45) NOT NULL , 
    `user_realName` VARCHAR(64) NOT NULL , 
    `user_surname` VARCHAR(64) NOT NULL , 
    `user_IDnumber` VARCHAR(13) NOT NULL , 
    `user_cellNumber` VARCHAR(11) NOT NULL , 
    PRIMARY KEY (`user_name`) , 
    INDEX `entity_id` (`user_entity` ASC) , 
    CONSTRAINT `entity_id` 
    FOREIGN KEY (`user_entity`) 
    REFERENCES `bis`.`entities` (`entity_name`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = latin1; 

SHOW WARNINGS; 

-- ----------------------------------------------------- 
-- Table `bis`.`reports` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `bis`.`reports` ; 

SHOW WARNINGS; 
CREATE TABLE IF NOT EXISTS `bis`.`reports` (
    `report_id` INT NOT NULL AUTO_INCREMENT , 
    `user_name` VARCHAR(64) NOT NULL , 
    `investigator_name` VARCHAR(64) NOT NULL , 
    `report_entity` VARCHAR(64) NOT NULL , 
    `report_finished` TINYINT(1) NULL DEFAULT false , 
    `submit_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP , 
    `finished_date` TIMESTAMP NULL , 
    `report_PDFFile` LONGBLOB NULL , 
    PRIMARY KEY (`report_id`) , 
    INDEX `user_id` (`user_name` ASC) , 
    INDEX `investigator_id` (`investigator_name` ASC) , 
    INDEX `entity_id` (`report_entity` ASC) , 
    CONSTRAINT `user_id` 
    FOREIGN KEY (`user_name`) 
    REFERENCES `bis`.`users` (`user_name`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE, 
    CONSTRAINT `investigator_id` 
    FOREIGN KEY (`investigator_name`) 
    REFERENCES `bis`.`users` (`user_name`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE, 
    CONSTRAINT `entity_id` 
    FOREIGN KEY (`report_entity`) 
    REFERENCES `bis`.`entities` (`entity_name`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = latin1; 

SHOW WARNINGS; 


SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

및 대응 에러 :

Executing SQL script in server 

ERROR: Error 1005: Can't create table 'bis.users' (errno: 150) 

CREATE TABLE IF NOT EXISTS `bis`.`users` (
    `user_name` VARCHAR(64) NOT NULL , 
    `user_entity` VARCHAR(64) NOT NULL , 
    `user_email` TEXT NOT NULL , 
    `user_password` CHAR(64) NOT NULL , 
    `user_salt` CHAR(64) NOT NULL , 
    `user_role` VARCHAR(45) NOT NULL , 
    `user_realName` VARCHAR(64) NOT NULL , 
    `user_surname` VARCHAR(64) NOT NULL , 
    `user_IDnumber` VARCHAR(13) NOT NULL , 
    `user_cellNumber` VARCHAR(11) NOT NULL , 
    PRIMARY KEY (`user_name`) , 
    INDEX `entity_id` (`user_entity` ASC) , 
    CONSTRAINT `entity_id` 
    FOREIGN KEY (`user_entity`) 
    REFERENCES `bis`.`entities` (`entity_name`) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE) 
ENGINE = InnoDB 
DEFAULT CHARACTER SET = latin1 

SQL script execution finished: statements: 13 succeeded, 1 failed 
+1

얘들 아 나는 그것을 정리있어! 도움이 될만한 경우 i 무엇이 잘못 되었습니까? 내 FK 옵션에서 NOT NULL에 내 PK를 모두 가지고있는 동안 SET 삭제시에 삭제 옵션이 있습니다. 삭제 옵션을 NO ACTION으로 설정하면 문제가 해결되었습니다. – cmptrwizard

답변

0

usersentity_id라는 인덱스를 생성하고, 동시에 이름을 FK 여기

150 오류 실패 스크립트 제약 entity_id.

동일한 이름의 색인 및 제약 조건을 사용할 수 없다고 생각합니다.

이 시도 :

INDEX entity_id (user_entity ASC) , 
CONSTRAINT fk_user_entity   -- *** this is the change *** 
    FOREIGN KEY (user_entity) 
    REFERENCES bis.entities (entity_name) 
    ON DELETE SET NULL 
    ON UPDATE CASCADE