2010-04-10 2 views
1

MySQL Workbench를 사용하여 일부 테이블을 만든 다음 'forward engineer'를 전달하여이 테이블을 생성하는 스크립트를 작성했습니다. 그러나 스크립트는 여러 가지 문제로 안내합니다. 그 중 하나는 외래 키를 포함합니다. 그래서 alter table을 사용하여 별도의 외래 키 추가를 시도했지만 여전히 문제가 발생했습니다. 코드는 다음과 같습니다 (설정 문, 드롭/나는 그들이 이것에 대한 문제한다고 생각하지 않습니다하지만 난에 ... 왼쪽 문을 작성) :alter table 명령을 사용한 MySQL 외래 키 작성

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'; 

DROP SCHEMA IF EXISTS `mydb` ; 
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ; 

-- ----------------------------------------------------- 
-- Table `mydb`.`User` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mydb`.`User` ; 

CREATE TABLE IF NOT EXISTS `mydb`.`User` (
    `UserName` VARCHAR(35) NOT NULL , 
    `Num_Accts` INT NOT NULL , 
    `Password` VARCHAR(45) NULL , 
    `Email` VARCHAR(45) NULL , 
    `User_ID` INT NOT NULL AUTO_INCREMENT , 
    PRIMARY KEY (`User_ID`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `mydb`.`User_Space` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mydb`.`User_Space` ; 

CREATE TABLE IF NOT EXISTS `mydb`.`User_Space` (
    `User_UserName` VARCHAR(35) NOT NULL , 
    `User_Space_ID` INT NOT NULL AUTO_INCREMENT , 
    PRIMARY KEY (`User_Space_ID`), 
FOREIGN KEY (`User_UserName`) 
REFERENCES `mydb`.`User` (`UserName`) 
ON UPDATE CASCADE ON DELETE CASCADE) 
ENGINE = InnoDB; 

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

이 생산하는 오류는 다음과 같습니다
오류 코드 : 1005 'mydb.user_space'테이블을 만들 수 없습니다. (errno : 150)

아무도 내가 잘못하고있는 것을 아는 사람이 있습니까? 그리고 다른 누구라도 mysql workbench에서 스크립트 생성에 문제가 있습니까? 좋은 도구이지만, 저를 위해 작동하지 않는 스크립트를 펌핑하는 것을 성가 시게합니다.

[은 참고하시기 바랍니다 여기가 자동으로 생성하는 스크립트입니다 같이!

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'; 

DROP SCHEMA IF EXISTS `mydb` ; 
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ; 

-- ----------------------------------------------------- 
-- Table `mydb`.`User` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mydb`.`User` ; 

CREATE TABLE IF NOT EXISTS `mydb`.`User` (
    `UserName` VARCHAR(35) NOT NULL , 
    `Num_Accts` INT NOT NULL , 
    `Password` VARCHAR(45) NULL , 
    `Email` VARCHAR(45) NULL , 
    `User_ID` INT NOT NULL AUTO_INCREMENT , 
    PRIMARY KEY (`User_ID`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `mydb`.`User_Space` 
-- ----------------------------------------------------- 
DROP TABLE IF EXISTS `mydb`.`User_Space` ; 

CREATE TABLE IF NOT EXISTS `mydb`.`User_Space` (
    `User_Space_ID` INT NOT NULL AUTO_INCREMENT , 
    PRIMARY KEY (`User_Space_ID`) , 
    INDEX `User_ID`() , 
    CONSTRAINT `User_ID` 
    FOREIGN KEY() 
    REFERENCES `mydb`.`User`() 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 


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

** [감사합니다] 내가 스키마를 많이 생성하는 MySQL의 워크 벤치 사용하지 않은

답변

2

,하지만 난 발견 스크립트의 문제. User_Space 테이블의 외래 키 정의가 User 테이블의 인덱싱되지 않은 열에 외래 키를 만들려고합니다. 이 같은 UserName에 인덱스를 위해 User 정의를 변경하는 경우 :

CREATE TABLE IF NOT EXISTS `mydb`.`User` (
    `UserName` VARCHAR(35) NOT NULL , 
    `Num_Accts` INT NOT NULL , 
    `Password` VARCHAR(45) NULL , 
    `Email` VARCHAR(45) NULL , 
    `User_ID` INT NOT NULL AUTO_INCREMENT , 
    PRIMARY KEY (`User_ID`), 
    INDEX(`UserName`) 
) 
ENGINE = InnoDB; 

... 스크립트가 성공합니다. 그것은 MySQL Workbench가 외래 키 정의를 생성 할 때 아마도 인덱스를 고려하지 않는 것 같습니다. 스키마 다이어그램에서이 문제를 해결할 수 있는지 또는 프로그램의 더 큰 버그인지 확실하지 않지만 올바른 위치에 인덱스 정의를 추가하고 스크립트 생성을 수정하는지 확인할 수 있습니다.

관련 문제