1

ラベル列(VARCHAR)が必要で、一意にしたいのですが、テーブルを作成しようとするとエラーが発生するようです。一意性制約はINTEGERと組み合わせてのみ使用できますか、それとも他のデータ型でも機能しますか。私が得ているエラーは(ERRNO 150)です

CREATE TABLE IF NOT EXISTS `user`(
user_id INT  NOT NULL    AUTO_INCREMENT  PRIMARY KEY,
username    VARCHAR(50) NOT NULL,
`password`  VARCHAR(255) NOT NULL
);

CREATE TABLE IF NOT EXISTS `element`(
element_id  INT NOT NULL    AUTO_INCREMENT PRIMARY KEY,
label   VARCHAR(5) NOT NULL DEFAULT '',
parent_id   INT NULL,
user_id INT NOT NULL,
created_on  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
edited_on   TIMESTAMP NOT NULL,
UNIQUE(label),
KEY element_1 (label),
CONSTRAINT FK_element_1 FOREIGN KEY (user_id) REFERENCES `user` (user_id),
CONSTRAINT FK_element_2 FOREIGN KEY (parent_id) REFERENCES `element` (element_id)
);
4

1 に答える 1

0

MyISAM最初のテーブルがエンジンで作成され、2番目のテーブル(作成しようとした)が。で作成された場合、このエラーが発生する唯一の方法ですInnoDB

user以下を使用して、作成されたテーブルの定義を確認します。

SHOW CREATE TABLE user ;

その場合は、ドロップして、次のコマンドで再作成します。

CREATE TABLE IF NOT EXISTS `user`(
user_id INT  NOT NULL    AUTO_INCREMENT  PRIMARY KEY,
username    VARCHAR(50) NOT NULL,
`password`  VARCHAR(255) NOT NULL
)
 ENGINE = InnoDB ;
于 2011-05-21T01:29:55.923 に答える