MYSQL, При определении таблицы необходимо использовать ограничение UNIQUE в сочетании с INTEGER или это может быть какой-либо тип данных? - PullRequest
1 голос
/ 21 мая 2011

Я хочу иметь столбец метки (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 голосов
/ 21 мая 2011

Единственный способ, которым я могу получить эту ошибку, если первая таблица создается с 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 ;
...