MYSQL,错误150

时间:2012-12-31 13:09:53

标签: mysql foreign-keys constraints

我有错误#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),所以我不知道问题是什么。

2 个答案:

答案 0 :(得分:1)

您必须在用户表格中将用户名创建为 PRIMARY KEY ,然后才能在上创建 FOREIGN KEY 强>问题表。或者您可以使用 UNIQUE KEY 创建 FOREIGN KEY ,如下所示

偏离SQL标准:引用非UNIQUE键的FOREIGN KEY约束不是标准SQL。它是标准SQL的InnoDB扩展。

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`), UNIQUE KEY (username))
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;

答案 1 :(得分:0)

My SQL Documentation

  

与SQL标准的偏差:引用的FOREIGN KEY约束   非UNIQUE键不是标准SQL。它是InnoDB的扩展   标准SQL。