Нужен ли NULL?

Требуется ли NULL или NOT NULL для добавления столбца в SQL Server? (Если вы собираетесь запустить инструкцию UPDATE после)

Я тестировал без него локально, и он отлично работает как в SQL, так и на веб-сайте; но я хотел убедиться перед запуском выпуска/производства.

Я просмотрел некоторые другие статьи, включая веб-сайт Microsoft. Некоторые показывают это с, некоторые без. В статьях SO говорится о некоторых преимуществах NULL, например, если у вас есть информация, которая может быть добавлена ​​позже. Но если я собираюсь запустить UPDATE для добавления значений после этого, будет ли это иметь значение?

Я предполагаю, что это не имеет значения из того, что я тестировал и читал.

ALTER TABLE [dbo].[MyTable] ADD NewColumn varchar(150);
UPDATE [dbo].[MyTable] SET NewColumn ='Math' WHERE ID = 1
UPDATE [dbo].[MyTable] SET NewColumn ='Science' WHERE ID = 2

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

sticky bit 28.05.2019 22:23

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

angleUr 28.05.2019 22:27

Ах, точно, моя ошибка!

sticky bit 28.05.2019 22:29
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
68
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вам не нужно его записывать, если вы его пропустите, столбец будет создан как «NULL».
Следующие операторы равны:

ALTER TABLE [dbo].[MyTable] ADD NewColumn varchar(150);
ALTER TABLE [dbo].[MyTable] ADD NewColumn varchar(150) NULL;

Если вы хотите добавить столбец, и механизм БД должен гарантировать, что этот новый столбец всегда будет заполнен, вы можете добавить столбец NOT NULL со значением по умолчанию. Другим вариантом будет изменение столбца на NOT NULL после обновления.

Я бы удостоверился, что у вас есть что-то декларативное. И если вы устанавливаете значение «не нуль», убедитесь, что у вас есть значение по умолчанию, иначе использование может привести к БОЛЬШИМ потерям данных, если данные ранее существовали. Это заставляет меня нервничать, потому что это ALTER против CREATE.

Ответ принят как подходящий

Вы можете пропустить его, и по умолчанию столбец будет создан как NULL. Однако это более разборчиво, если вы укажете это явно.

Имейте в виду, что если в вашей таблице уже есть данные, вы НЕ МОЖЕТЕ добавить столбец как NOT NULL. Для этого вы должны сначала добавить столбец как NULL, затем ОБНОВИТЬ значения с ненулевыми действительными данными, а затем изменить столбец на NOT NULL.

Обновлено: предполагается поведение сервера sql по умолчанию при добавлении столбцов.

Не думайте — этим управляет параметр ANSI_NULL_DFLT_ON.

SMor 28.05.2019 22:33

Вы можете добавить столбец как NOT NULL, если одновременно установите значение DEFAULT (но это значение по умолчанию будет применяться к каждой строке и, в зависимости от версии SQL Server, будет блокирующей операцией по размеру данных).

Aaron Bertrand 28.05.2019 22:40

@SMor Вы правы. Мой ответ относится только к поведению сервера sql по умолчанию.

nunoq 28.05.2019 22:41

Другие вопросы по теме