MYSQL,在定义表时,UNIQUE约束必须与INTEGER一起使用,还是可以是任何数据类型?

时间:2011-05-21 00:42:12

标签: mysql sql unique-constraint mysql-error-1005

我想要一个标签列(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)
);

1 个答案:

答案 0 :(得分:0)

如果第一个表是使用MyISAM引擎创建的,第二个表(尝试创建的)使用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 ;