Могу ли я использовать ноль в столбце, который имеет атрибут AUTO_INCREMENT - PullRequest
5 голосов
/ 18 февраля 2010

Я использую сервер MySQL 5.0.Мое требование состоит в том, чтобы добавить одну специальную строку в существующую таблицу, которая имеет первичный ключ с автоинкрементом.

Это было бы очень полезно для будущего обслуживания и управления проектом, если бы мы могли сделать идентификатор этогострока 0 (потому что это легко запомнить и легко заметить в ручных наблюдениях).

Теперь я знаю, что у MySQL нет проблем с использованием вашего собственного значения для столбца автоинкремента, и мои тесты показали, что яможно установить первичный ключ автоинкремента строки в 0 с помощью запроса UPDATE.Однако были высказаны некоторые опасения по поводу того, как это может повлиять на функциональность автоинкремента столбца в будущих INSERT.

Мои (ограниченные) эксперименты не показали ничего странного, и я не могу найти ничего конкретного предупреждения против этогов документах MySQL.То есть, кроме этого (выделено мое): http://dev.mysql.com/doc/refman/5.0/en/create-table.html

В таблице может быть только один столбец AUTO_INCREMENT, он должен быть проиндексирован и не может иметь значение DEFAULT.Столбец AUTO_INCREMENT работает правильно, только если он содержит только положительные значения.Вставка отрицательного числа считается вставкой очень большого положительного числа. Это сделано для того, чтобы избежать проблем с точностью, когда числа «переворачиваются» с положительных на отрицательные, а также для того, чтобы случайно не получить столбец AUTO_INCREMENT, содержащий 0.

Iя не могу найти объяснение того, что не так с наличием нулевого значения в столбце AUTO_INCREMENT, поэтому кто-нибудь может мне сказать, является ли плохо иметь столбец AUTO_INCREMENT, который содержит 0?

Ответы [ 2 ]

2 голосов
/ 18 февраля 2010

Как вы уже обнаружили, невозможно присвоить 0 для поля автоинкремента с помощью INSERT, вам нужно использовать UPDATE. AFAIK нет ничего плохого в наличии 0 в строке, кроме случаев, когда вы пытаетесь выполнить дамп и импорт. Но этого можно избежать, сначала вставив данные, а затем пометив их как поле автоматического приращения.

1 голос
/ 15 июля 2013

Хранение 0 не рекомендуется. Например, если вы выгружаете таблицу с mysqldump, а затем перезагружаете ее, MySQL обычно генерирует новые порядковые номера, когда встречает значения 0, в результате чего получается таблица с содержимым, отличным от того, который был выгружен. Включение NO_AUTO_VALUE_ON_ZERO перед перезагрузкой файла дампа решает эту проблему. mysqldump теперь автоматически включает в свой вывод оператор, который позволяет NO_AUTO_VALUE_ON_ZERO, чтобы избежать этой проблемы.

...