2013-06-19 2 views
2

У меня есть таблица, содержащая поле video_id, которое устанавливается как уникальное, принимает значения NULL. Однако он не примет два нулевых значения. Тип таблицы InnoDB или MYISAM не будет работать.Уникальное поле Mysql не принимает несколько нулей

Это создает дубликат ключа ошибки на видео _id (значение Null):

INSERT INTO dances (name, video_id, level) VALUES ('abc', '', 'beg'); 

Если я прочитал правила Mysql правильно он должен сделать это. Может ли кто-нибудь предложить, куда идти дальше?

+1

показать свое создать таблицу заявление –

+0

Показать небольшой пример ('CREATE TABLE',' INSERT' несколько строк), где это происходит. Вы можете использовать ** [sqlfiddle.com/] (http://sqlfiddle.com/) ** –

+0

Вы случайно добавили атрибут 'DEFAULT x' в столбец? –

ответ

0

И зачем вам нужно несколько строк таблицы, чтобы иметь нулевое видео_ид?

С точки зрения дизайна БД это похоже на то, что объект, который вы моделируете, с таблицей слишком «большой» и должен быть разбит на главные таблицы и таблицы подробностей.

Ваши варианты (A) удалить UNIQUE ограничение, или (B) создать отдельную таблицу, содержащую object_id, video_id пары (where object_id это независимо от первичный ключ на вашем main table).

+0

Стол очень простой: - id, название танца, Video-id, уровень танца. Идентификатор относится к видео youtube танца, но у некоторых их нет. В практическом плане я мог бы покончить с уникальным ограничением, но я не понимаю, почему Nulls производят Duplicate Key failure. Согласно информации Mysql, все должно быть хорошо. Спасибо за комментарии. –

+0

@TerryWright С точки зрения моделирования данных каждая строка таблицы танцев описывает свойства танца. Когда у танца есть 0 или более чем-то еще, это не действительно свойство танца, но «имеет» отношения, которые часто получают отдельный стол. Возможно, в разрабатываемой системе есть только 0 или 1 видео на танец, и может быть желательно, чтобы все было просто, но модератор данных мог бы сказать, эй, у танца может быть много видео, а длинное видео может также показать несколько танцев, возможно, потребовав таблицу пар (dance_id, video_id), как описано. – Paul

1

Вы можете попробовать BDB (о котором я ничего не знаю); см. here для более.

+0

Не знал, что изменение базовых движков позволило сделать это ... – Paul

+0

Эта ссылка, похоже, подтверждает мое понимание того, что в InnoDB должно работать несколько Nulls. Спасибо за рефери в любом случае. –

2

Да, MySQL допускает несколько NULL в столбце с уникальным ограничением. См. this Stack Overflow question.

Пустая строка '' - это не то же самое, что и NULL.

Используйте вместо этого:

INSERT INTO dances (name, video_id, level) VALUES ('abc', NULL, 'beg'); 
+0

INSERT INTO 'dances' (' name', 'video_id',' level') VALUES ('abc', '', 'beg') вызывает дублируемую ключевую ошибку в видео _id (значение Null) –

+3

@TerryWright Пустое string '' '' не то же самое, что 'NULL'. –

+0

@TerryWright: Используйте это: INSERT INTO танцы (имя, видео_ид, уровень) VALUES ('abc', null, 'beg') –

Смежные вопросы