Игнорировать проблему.Вам не нужно указывать значение 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 KEY
B, следовательно, не может быть NULL
.С другой стороны, A.b_id
может быть NULL
, чтобы указать, что в B
нет строки, соответствующей строке в A
.Нет проблем.