2015-02-27 5 views
2

В таблице MySQL вы можете, очевидно, установить INT как NOT NULL и AUTO_INCREMENT, но в то время как они оба работают вместе, первое действительно необходимо, когда у вас есть последнее?MySQL, AUTO_INCREMENT и NOT NULL

В стороне, есть ли производительность, память, память или бонус скорости для сброса NOT NULL?

+1

Это интересный вопрос, который вы могли бы сослаться на это: http://stackoverflow.com/questions/3503089/mysql-why-not-null-add-to-primary-key-field –

+0

А, так оно и есть первичный ключ, NOT NULL автоматически принимается? – eggbertx

ответ

2

В качестве хорошей конструкции, если для правильной работы столбца требуется значение, оно должно быть объявлено NOT NULL.

Это, как практическое дело, объявление столбца автоинкремента как обнуляемого означает, что вы можете передать ему пустое значение и все равно получить значение, генерируемое для столбца.

http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html

С точки зрения повышения эффективности и пространства, это лучше сделать столбец UNSIGNED, так как он никогда не будет принимать отрицательное значение, и использовать наименьший тип данных, который будет идти в ногу с размером стола.

По определению все ограничения столбцов налагают определенное влияние на производительность, поскольку сервер должен выделять ресурсы для хранения и проверки ограничений.

Но это мелочь, особенно для чего-то рутинного, например, для проверки нулевых значений, и опять же, это стоит того, если оно обеспечивает достоверность в ваших записях.

+0

Я предполагаю, что я должен был указать, что это был первичный ключ с именем 'id', и поэтому он явно неподписан. И в моем коде все вставки в таблицу игнорируют идентификатор. Итак, в заключение, я должен сохранить его там, на всякий случай? – eggbertx

+1

Мой лучший совет, и только в том, что если столбец должен хранить достоверные данные, он должен иметь ограничение NOT NULL, как наилучшую практику. –