나는 # 150 오류가 있습니다.
다른 포럼을 찾고 있었지만 외래 키에 대해 동일한 유형이 있어야합니다.MYSQL, error 150
USE `dbask`;
set names utf8;
/*users*/
CREATE TABLE IF NOT EXISTS `users` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(30) NOT NULL,
`password` VARCHAR(255) NOT NULL,
`permission` VARCHAR(10) NULL,
`firstname` VARCHAR(40) NULL,
`lastname` VARCHAR(40) NULL,
`birthdate` VARCHAR(255) NULL,
`picture_link` VARCHAR(255) NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;
/*questions*/
CREATE TABLE IF NOT EXISTS `questions` (
`id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(30) NOT NULL,
`asked_username` VARCHAR(30) NULL,
`question` VARCHAR(255) NOT NULL,
`answer` VARCHAR(255) NULL,
`time_asked` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `fk_questions_to_users`
FOREIGN KEY (`username`)
REFERENCES `users`(`username`)
ON DELETE CASCADE
ON UPDATE CASCADE
)
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_unicode_ci;
두 가지 유형이 VARCHAR(30)
그래서 난 문제가 무엇인지 알 수 있습니다
그리고 여기 내 코드입니다.
사용자 이름 대신 사용자 ID를 참조하지 않는 이유가 있습니까? –
쿠키로 인코딩 된 사용자 이름으로 저장하므로 DB에 대한 쿼리가 적을 것이라고 생각했습니다. – Ivan
귀하의 가정이 잘못되었다고 생각합니다. int 인덱스는 mysql에서 사용할 수있는 가장 빠른 인덱스이다. 사용자 이름은 정확하게 "변경 불가능한"값이 아니며 ID보다 더 자주 변경할 수 있습니다. – Xnoise