INNODB -> Должен ли столбец по умолчанию быть нулевым или нулевым? - PullRequest
0 голосов
/ 09 мая 2019

Мой английский немного слаб, извините

При использовании INNODB должен ли столбец быть 0 или он должен быть нулевым?

Возникает ли проблема, если объединенные столбцы определены как 0?

Наконец, что лучше с точки зрения производительности?

Спасибо.

1 Ответ

0 голосов
/ 10 мая 2019

Игнорировать проблему.Вам не нужно указывать значение DEFAULT.Вам не нужно объявлять столбец NULL (или NOT NULL).

Вместо ...

Подумайте о приложении.

Случай 1: Ваша заявка всегда будет иметь значение для этого столбца, а всегда будет указывать значение.Затем имеет смысл объявить столбец NOT NULL и не указывать DEFAULT.

Случай 2: У вас еще нет значения.Пример: таблица имеет start_date и end_date.Вы создаете строку, когда вещь «запускается», поэтому вы заполняете start_date (см. Пример 1), но оставляете end_date пустым.«Пусто» может быть закодировано как NULL и DEFAULT NULL.Позже вы UPDATE таблица, чтобы заполнить end_date с реальным значением.

Случай 3: Таблица имеет "счетчик".Когда вы изначально добавляете строку, счетчик должен начинаться с «1».Позже вы будете UPDATE ... SET counter=counter+1.Вы можете либо явно указать «1» при создании строки, либо пропустить значение при вставке, но при этом объявленный столбец NOT NULL DEFAULT '1'

NULL может представлять «еще не-заполненный "(вариант 1)," не знаю значение "," используйте значение по умолчанию "и ряд других вещей.Это выбор приложения.

Существуют и другие варианты использования NULL.Если вы не используете NULL, объявите каждый столбец NOT NULL.

Если при INSERTing вы указываете все столбцы, тогда DEFAULTs не требуется.DEFAULTs это удобство, а не необходимость.Без DEFAULT вы получите «0» для числовых NOT NULL столбцов или '' для строк.

Производительность - вероятно, не проблема.У вас есть конкретный пример, который мы должны обсудить?

JOINing - я бы не стал присоединяться к столбцу, который может содержать NULL.Это редко случается в «реальной жизни», так как каждый соединяет уникальный идентификатор для строк в одном столбце со столбцом в другой таблице:

 FROM A  JOIN B  ON B.id = A.b_id

То есть B.id, вероятно, является PRIMARY KEYB, следовательно, не может быть NULL.С другой стороны, A.b_id может быть NULL, чтобы указать, что в B нет строки, соответствующей строке в A.Нет проблем.

...