MYSQL, При определении таблицы необходимо использовать ограничение UNIQUE в сочетании с INTEGER или это может быть какой-либо тип данных?
Я хочу иметь метку столбца (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 ответ
Решение
Единственный способ, которым я могу иметь эту ошибку, если первая таблица создана с 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 ;