1

エラー#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)そうなので、何が問題なのかわかりません。

4

2 に答える 2

1

ユーザーテーブルでPRIMARYKEYとしてユーザー名を作成する必要があります。その後、質問テーブルでFOREIGNKEYを作成できます。または、以下に示すように、 UNIQUEKEYを使用してFOREIGNKEYを作成できます。

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;
于 2012-12-31T13:13:51.100 に答える
0

私のSQLドキュメント

SQL標準からの逸脱:非UNIQUEキーを参照するFOREIGN KEY制約は、標準SQLではありません。これは、標準SQLのInnoDB拡張機能です。

于 2012-12-31T13:18:35.143 に答える