2017-04-05 1 views
0

SQL 테이블에 문제가 있습니다. 그래서 나는 Usertable을 가지고있다 :MySQL MariaDB는 외래 키로 테이블 생성을하지 않습니다.

CREATE TABLE IF NOT EXISTS `user` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `NICKNAME` varchar(50) NOT NULL, 
    `PASSWORD` varchar(255) NOT NULL, 
    `EMAIL` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`NICKNAME`), 
    UNIQUE KEY `ID` (`ID`) 
) ; 

이 테이블은 이미 존재하며 아무런 문제없이 만들어졌다. 나는이 같은 점수 표를 만들려면 :

나는이 errormassage 얻을 쿼리의 실행에
CREATE TABLE IF NOT EXISTS `scores` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `NICKNAME` varchar(50) NOT NULL, 
    `HIGHSCORE` int(11) NOT NULL, 
    PRIMARY KEY (`ID`), 
    FOREIGN KEY (NICKNAME) REFERENCES USER(Nickname) 
) 

:

**#1005 - Kann Tabelle `xxxxx`.`scores` nicht erzeugen (Fehler: 150 "Foreign key constraint is incorrectly formed") (Details…)** 

독일어 그것 및 캔트 표, 오류 150을 만들라고를 어디서 볼 수 없습니다 주요 제약 조건이 잘못되었습니다. postgreSQL에서 같은 구문을 사용했는데 제대로 작동했지만 MySQL은이를 받아들이지 않습니다. 어떤 아이디어?

답변

1

이상합니다. nickname이 실제로 기본 키인 경우 코드가 작동해야합니다.

자동 증가 된 열을 기본 키로 사용하는 것이 훨씬 더 자연 스럽습니다. 별 *을 원할 경우 조회 할 때 조인을 사용하십시오. 그래서

:

CREATE TABLE IF NOT EXISTS `scores` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    UserId int(11) NOT NULL, 
    `NICKNAME` varchar(50) NOT NULL, 
    `HIGHSCORE` int(11) NOT NULL, 
    PRIMARY KEY (`ID`), 
    FOREIGN KEY (UserId) REFERENCES USER(Id) 
); 
+0

에 추가 할 수 NOT이 NULL NOT ( 'ID' INT (11)'EXISTS user' 경우 테이블 만들기 자동 증가, 'NICKNAME'의 VARCHAR (50) NULL NOT, 'PASSWORD'의 VARCHAR (255) NOT NULL, 'EMAIL'의 VARCHAR (50) 초기 NULL, PRIMARY KEY ('NICKNAME') UNIQUE KEY'ID' (' ID'), 고유 키'NICKNAME' ('NICKNAME') ) –

+0

@AraLight. . . 기본 코드로'nickname'을 사용하여 원래 코드가 작동해야합니다. 하지만 정수 열이 기본 키가되도록 users 테이블을 변경했습니다. –

1

사용자 - 키워드입니다.

다른 테이블 이름을 사용하는 것이 좋습니다.

나는 외국에만 다음, UNIQUE를 선언 할 별명을 선언했다 : "tblUser" 또는 사용`다시 인용`

FOREIGN KEY (NICKNAME) REFERENCES `USER`(ID) 
+0

사실, tablename을 바꿀 것입니다. 감사합니다. –

0

감사합니다 씨 고든 리노 프에 내 실수를 발견 할 수 있었다 나는 그것이 작동해야 다음 쿼리 다시 사용자를 만드는 경우? KEY 제약 조건은 다른 테이블

그래서
CREATE TABLE IF NOT EXISTS `user` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `NICKNAME` varchar(50) NOT NULL, 
    `PASSWORD` varchar(255) NOT NULL, 
    `EMAIL` varchar(100) DEFAULT NULL, 
    PRIMARY KEY (`NICKNAME`), 
    UNIQUE KEY `ID` (`ID`), 
    UNIQUE KEY `NICKNAME` (`NICKNAME`) 
); 
+0

'PRIMARY KEY'는 '고유 키'입니다. 불필요한 색인을 추가했습니다. –