MYSQL, при определении таблицы обязательно ли использовать ограничение UNIQUE в сочетании с ЦЕЛЫМ числом или это может быть любой тип данных?

#mysql #sql #unique-constraint #mysql-error-1005

#mysql #sql #unique-ограничение #mysql-ошибка-1005

Вопрос:

Я хочу иметь столбец label ( VARCHAR ), и я хочу, чтобы он был уникальным, но когда я пытаюсь создать таблицу, кажется, что она выдает ошибку. Может ли ограничение unique использоваться только в сочетании с ЦЕЛЫМ числом или оно будет работать и с другими типами данных. Ошибка, которую я получаю, является ( 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. @OMG: За исключением TEXT и BLOB , верно?

2. Я опубликовал SQL-запрос. Это только вторая таблица, которая будет создана, если необходимо, я мог бы предоставить вам SQL для предыдущей.

3. @ypercube: Не знаю, почему TEXT это не поддерживается — нет упоминания о каких-либо требованиях к типу данных для уникальных ограничений в MySQL здесь или here

4. 1: Для обновления добавить инструкцию CREATE TABLE. Проверка информации в теге на наличие ошибки MySQL 1005 указывает на внешние ключи — опубликуйте другие инструкции CREATE TABLE. Очень вероятно, что проблема в порядке — таблицы, на которые element ссылается, вероятно, не были созданы при выполнении инструкции.

5. Вы уже создали таблицу user ?

Ответ №1:

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