Как в sql добавить столбец в таблицу: ALTER TABLE SQL Server — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite

Alter Table в SQL — Как добавить столбец или переименовать столбец в SQL

Вы создали свою базу данных и свои таблицы, и после всей этой работы вы заметили, что вам нужно добавить или переименовать столбец. Что ж, вы можете использовать для этого оператор ALTER TABLE.

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

Примечание. Если приведенный здесь синтаксис не работает, обратитесь к документации по своей СУБД. Большинство вещей работает одинаково, но есть некоторые различия для различных СУБД.

Как добавить новую колонку с помощью 

ALTER TABLE 

Чтобы добавить новый столбец, вам сначала нужно выбрать таблицу с помощью ALTER TABLE имя_таблицы, а затем написать имя нового столбца и его тип данны вместе с операторомо ADD.  В совокупности код выглядит так:


ALTER TABLE table_name
ADD column_name datatype;

 Например у нас есть база данных пользователей, как показано ниже:





idnameagestateemail
1Paul24Michiganpaul@example. com
2Molly22New Jersey[email protected]
3Robert19New York[email protected]

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

Чтобы добавить новый столбец в нашу таблицу пользователей, нам нужно выбрать таблицу с ALTER TABLE users, а затем указать имя нового столбца и его тип данных с помощью оператора ADD id_number TEXT. Все вместе выглядит так:


ALTER TABLE users
ADD id_number TEXT;

Таблица с новым столбцом будет выглядеть следующим образом:

 





idnameagestateemailid_number
1Paul24Michiganpaul@example. comNULL
2Molly22New Jersey[email protected]NULL
3Robert19New York[email protected]NULL

Вам нужно будет использовать оператор UPDATE, чтобы добавить недостающую информацию для уже существующих пользователей, как только она будет предоставлена. 

Как создать новый столбец со значением по умолчанию вместо NULL

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

Предположим, что скоро у нас появятся международные пользователи, и мы хотим добавить столбец country. Все наши существующие пользователи из США, поэтому мы можем использовать это значение по умолчанию.


ALTER TABLE users
ADD country TEXT default "United States";

 Наша таблица будет выглядеть так: 





idnameagestateemailid_numbercountry
1Paul24Michigan[email protected]NULLUnited States
2Molly22New Jersey[email protected]NULLUnited States
3Robert19New York[email protected]NULLUnited States

Будьте осторожны при добавлении новых столбцов в таблицы.


Если в вашей таблице уже много строк — например, если у вас уже много пользователей или много хранимых данных, — добавление нового столбца может потребовать значительных ресурсов. Поэтому обращайтесь с этой операцией осторожно. 

 

Как переименовать столбец с помощью ALTER TABLE

Вы можете переименовать столбец с помощью приведенного ниже кода. Вы выбираете таблицу с помощью ALTER TABLE имя_таблицы, а затем указываете, какой столбец переименовать и во что переименовать, с помощью RENAME COLUMN old_name TO new_name


ALTER TABLE table_name
RENAME COLUMN old_name TO new_name;

 Давайте посмотрим на ту же таблицу, которую мы использовали в предыдущем примере:

 





idnameagestateemailid_numbercountry
1Paul24Michigan[email protected]NULLUnited States
2Molly22New Jerseymolly@example. comNULLUnited States
3Robert19New York[email protected]NULLUnited States

Чтобы избежать путаницы между столбцами id и id_number, давайте переименуем первый в user_id.

Сначала мы укажем  таблицу с помощью ALTER TABLE users, а затем объявим имя столбца, чтобы оно изменилось на то, что мы хотим изменить, с помощью RENAME COLUMN id TO user_id.


ALTER TABLE users
RENAME COLUMN id TO user_id;

После выполения запроса таблица будет выглядеть так: 





user_idnameagestateemailid_numbercountry
1Paul24Michiganpaul@example. comNULLUnited States
2Molly22New Jersey[email protected]NULLUnited States
3Robert19New York[email protected]NULLUnited States

Будьте осторожны при переименовании столбца в таблице.


Когда вы переименовываете столбцы с помощью ALTER TABLE, вы рискуете нарушить зависимости базы данных.

Если вы используете инструмент рефакторинга базы данных для изменения имени столбца вместо использования ALTER TABLE, он будет управлять всеми зависимостями и обновлять их с новым именем столбца.

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

 

SQL ALTER TABLE — изменение таблицы базы данных

Оглавление

  • ALTER TABLE для добавления и удаления столбца, значения по умолчанию
  • ALTER TABLE для добавления ключей
  • ALTER TABLE для добавления и удаления ограничений

Связанные темы

  • Создание базы данных
  • Основы проектирования баз данных
НазадЛистатьВперёд>>>

Команда языка SQL ALTER TABLE предназначена для изменения структуры столбца таблицы базы данных, если
таблица уже существует.

Запрос с командой ALTER TABLE на добавление нового столбца в таблицу имеет следующий синтаксис:

ALTER TABLE ИМЯ_ТАБЛИЦЫ
ADD ИМЯ_НОВОГО_СТОЛБЦА ТИП_ДАННЫХ

Пример 1. Есть база данных фирмы — Company. В ней есть таблица
Employee (Сотрудник). Требуется добавить в эту таблицу новый столбец — SEX (Пол). Соответствующий запрос
выглядит следующим образом:

ALTER TABLE EMPLOYEE
ADD SEX CHAR(1)

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

Пусть теперь требуется установить значение записей в таблице по умолчанию. Запрос с командой ALTER TABLE
для этой цели содержит ещё одну команду — ALTER COLUMN — и имеет следующий синтаксис:

ALTER TABLE ИМЯ_ТАБЛИЦЫ
ALTER COLUMN ИМЯ_СТОЛБЦА
SET DEFAULT ‘ЗНАЧЕНИЕ_ПО_УМОЛЧАНИЮ’

Пример 2. Пусть в фирме, база данных которой имеет название Company,
трудятся в основном женщины. Администратор базы данных решил сократить процесс заполнения данными столбца
SEX (Пол) и установить его значение по умолчанию — ‘F’ (что означает женский пол). Соответствующий запрос
выглядит следующим образом:

ALTER TABLE EMPLOYEE
ALTER COLUMN SEX
SET DEFAULT ‘F’

Теперь только если новый сотрудник — мужчина, потребуется вписывать в столбец SEX
значение ‘M’, а в большинстве случаев значение установится по умолчанию — ‘F’.

При помощи запроса с командой ALTER TABLE можно и удалить столбец из таблицы. Синтаксис команды будет
следующим:

ALTER TABLE ИМЯ_ТАБЛИЦЫ
DROP COLUMN ИМЯ_СТОЛБЦА

Пример 3. Пусть в той же базе данных Company из
таблицы Employee требуется удалить столбец SEX (Пол). Соответствующий запрос
выглядит следующим образом:

ALTER TABLE EMPLOYEE
DROP COLUMN SEX

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

О ключах в таблицах базы данных — на уроке Реляционная модель данных.
Если при создании таблицы базы данных не был определён первичный ключ (PRIMARY KEY), то это может быть
сделано при помощи команды ALTER TABLE. Синтаксис команды в случае простого первичного ключа следующий:

ALTER TABLE ИМЯ_ТАБЛИЦЫ
ADD PRIMARY KEY (ИМЯ_ИДЕНТИФИКАТОРА)

Синтаксис команды в случае составного первичного ключа:

ALTER TABLE ИМЯ_ТАБЛИЦЫ
ADD PRIMARY KEY (ИМЯ_ИДЕНТИФИКАТОРА_1, ИМЯ_ИДЕНТИФИКАТОРА_2)

Пример 4. Работаем всё с той же базой данных Company,
со столбцом EMPLOYEE. Мы можем добавить простой первичный ключ этого столбца в виде идентификатора
сотрудника и сделать это так:

ALTER TABLE EMPLOYEE
ADD PRIMARY KEY (EMP_ID)

Если решено использовать составной ключ, состоящий из идентификатора сотрудника и
идентификатора отдела, в котором сотрудник работает, то используем следующий запрос:

ALTER TABLE EMPLOYEE
ADD PRIMARY KEY (EMP_ID, DEPT_ID)

О том, что такое ограничения целостности, говорилось на уроке Реляционная модель данных.
Если коротко — при удалении какой-либо строки из одной таблицы (1), в другой таблице (2), строка в которой
ссылается на строку таблицы (1), не должно быть ссылок, которые не содержатся в таблице (1), то есть
ссылок, ведущих в никуда.

Команда с выражением ALTER TABLE может понадобиться для установки значения NULL для такой ссылки. Её
синтаксис следующий:

ALTER TABLE ИМЯ_ССЫЛАЮЩЕЙСЯ_ТАБЛИЦЫ
ADD CONSTRAINT ИМЯ_ИДЕНТИФИКАТОРА
FOREIGN KEY (ИМЯ_ИДЕНТИФИКАТОРА)
REFERENCES ИМЯ_ТАБЛИЦЫ_НА_КОТОРУЮ_ССЫЛАЮТСЯ
ON DELETE SET NULL

Пример 5. Пусть в той же базе данных Company
требуется установить ссылочное ограничение: при удалении какого-либо отдела из таблицы Dept
в таблице Employee, содержатся ссылки на эти отделы, значение ссылки (внешнего ключа) должно быть
уставлено в NULL (полностью неопределенное). Соответствующий запрос
выглядит следующим образом:

ALTER TABLE EMPLOYEE
ADD CONSTRAINT DEPT_ID
FOREIGN KEY (DEPT_ID)
REFERENCES DEPT
ON DELETE SET NULL

Таким образом, если в таблице Employee есть сотрудник, работающий в отделе, который
вдруг был ликвидирован и запись о нём удалена из таблицы Dept, то в записи об этом сотруднике значение
столбца DEPT_ID примет значение NULL.

Запросом с командой ALTER TABLE можно также установить запрет на удаление ссылающихся записей из таблицы (1), если
существует хотя бы одна запись в таблице (2), на которую ссылается запись в таблице (1). Синтаксис такого
запроса следующий:

ALTER TABLE ИМЯ_ССЫЛАЮЩЕЙСЯ_ТАБЛИЦЫ
ADD CONSTRAINT ИМЯ_ИДЕНТИФИКАТОРА
FOREIGN KEY (ИМЯ_ИДЕНТИФИКАТОРА)
REFERENCES ИМЯ_ТАБЛИЦЫ_НА_КОТОРУЮ_ССЫЛАЮТСЯ
ON DELETE RESTRICT

Пример 6. Далее работаем с базой данных сети аптек, которую мы создали на уроке Создание базы
данных SQL и таблиц базы данных
.

Следующая команда с выражением alter table устанавливает запрет на удаление группы препаратов из таблицы Group, если существует хотя бы один препарат этой группы, что определяется записью в таблице Preparation:

alter table Preparation add constraint GR_ID foreign key(GR_ID) references Group on delete restrict

Устанавливаем запрет на удаление аптеки из таблицы Pharmacy, если существует хотя бы один сотрудник этой аптеки, что определяется записью в таблице Employee:

alter table Employee add constraint PH_ID foreign key(PH_ID) references
Pharmacy on delete restrict

Запросом с командой ALTER TABLE можно также определить, что если удалить запись в таблице (2), на которую
ссылается запись в таблице (1), то должны быть удалены все соответствующие записи в таблице (1) (каскадное
удаление).
Синтаксис такого запроса следующий:

ALTER TABLE ИМЯ_ССЫЛАЮЩЕЙСЯ_ТАБЛИЦЫ
ADD CONSTRAINT ИМЯ_ИДЕНТИФИКАТОРА
FOREIGN KEY (ИМЯ_ИДЕНТИФИКАТОРА)
REFERENCES ИМЯ_ТАБЛИЦЫ_НА_КОТОРУЮ_ССЫЛАЮТСЯ
ON DELETE CASCADE

Пример 7. Продолжаем работать с базой данных сети аптек.

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

alter table AVAILABILITY add constraint PR_ID foreign key(PR_ID)
references PREPARATION on delete cascade

Теперь определим, что если удалить аптеку из таблицы PHARMACY, то должны удалиться все записи этой аптеки в таблице AVAILABILITY:

alter table AVAILABILITY add constraint PH_ID foreign key(PH_ID)
references PHARMACY on delete cascade

Следующая команда модифицирует таблицу DEFICIT и определяет, что если удалить препарат из таблицы PREPARATION, то должны удалиться все записи этого препарата в таблице DEFICIT:

alter table DEFICIT add constraint PR_ID foreign key(PR_ID) references
PREPARATION on delete cascade

iv>

Вновь модифицируем таблицу DEFICIT и определяем, что если удалить аптеку из таблицы PHARMACY, то должны удалиться все записи этой аптеки в таблице DEFICIT:

alter table DEFICIT add constraint PH_ID foreign key(PH_ID) references
PHARMACY on delete cascade

Запросом с командой ALTER TABLE можно установить проверочное ограничение.
Синтаксис такого запроса следующий:

ALTER TABLE ИМЯ_ТАБЛИЦЫ
ADD CONSTRAINT CHECK_DATA
CHECK(ПРОВЕРЯЕМОЕ_УСЛОВИЕ)

Пример 8. Продолжаем работать с базой данных сети аптек.

Нужно модифицировать таблицу AVAILABILITY и определить, что в одной и той же записи значение атрибута DateStart таблицы не должно быть меньше значения DateEnd.

ALTER TABLE AVAILABILITY ADD CONSTRAINT CHECK_DATA CHECK(DateStart

Изменяем таблицу DEFICIT и определяем, что в одной и той же записи значение атрибута DateStart таблицы не должено быть меньше значения DateEnd:

ALTER TABLE DEFICIT ADD CONSTRAINT CHECK_DATA CHECK(DateStart

Поделиться с друзьями

НазадЛистатьВперёд>>>

SQL Server ALTER TABLE ADD Обзор столбца

В этой статье мы рассмотрим операторы SQL Server ALTER TABLE ADD Column для добавления столбцов в существующую таблицу. Мы также поймем влияние добавления столбца со значением по умолчанию и добавления и обновления столбца со значением позже в больших таблицах.

Как разработчик базы данных, вам слишком часто приходится добавлять столбцы в существующие таблицы. Вы могли бы подумать, что добавление столбца в таблицу базы данных SQL Server не будет проблемой. Иногда вы можете добавить столбец из самой SQL Server Management Studio. Ну, это было бы хорошо для небольшой таблицы или таблицы, в которой нет большого количества транзакций. Давайте продолжим и посмотрим, как мы можем добавить столбцы в существующую таблицу, а также разберемся в причинах и передовых методах добавления столбца в таблицу большого размера.

Образец таблицы

Давайте создадим пример таблицы с достаточным набором данных из следующего скрипта.

1

2

3

4

5

6

7

8

9

ЕСЛИ СУЩЕСТВУЕТ (ВЫБЕРИТЕ 1 ИЗ Sys. tables, где Name = ‘SampleTable’)

DROP TABLE SampleTable

 

CREATE TABLE dbo.SampleTable (

   ID BIGINT IDENTITY (1,1) NOT NULL PRIMARY KEY CLUSTERED,

   DateTime4 DATETIME DEFAULT GETDATE(),

   Column1 CHAR(1000) DEFAULT ‘MMMMMMMMMMMMMMMMM’,

   Column2 CHAR(2000) DEFAULT ‘YYYYYYYYYYYYYYYYY’

)

Приведенный выше скрипт создаст пример таблицы с именем SampleTable . Поля данных добавляются для создания таблицы большого размера. Затем было добавлено большое количество записей путем многократного выполнения следующего запроса.

1

2

3

4

5

6

SET NOCOUNT ON

INSERT INTO SampleTable

(DateTime4, Column1, Column2)

VALUES

(GETDATE(),’XXXX’,’YYYY’)

1

0 GO

После выполнения вышеуказанного запроса 500 000 записей обновляются до SampleTable . После выполнения вышеуказанного запроса следует размер таблицы и другие параметры таблицы.

Это можно получить с помощью sp_spaceused ‘SampleTable’

Ниже приведен размер базы данных для данных и файла журнала.

Давайте быстро рассмотрим синтаксис добавления одного столбца в существующую таблицу с помощью инструкции ALTER TABLE ADD, как показано ниже.

ALTER TABLE tbl_name

ADD Col_name  data_type  col_constraint;

Вы можете использовать приведенный ниже оператор, чтобы добавить столбец NewColumn1 в нашу таблицу SampleTable.

ALTER TABLE SampleTable

ADD NewColumn1 varchar(200)

Кроме того, вы можете добавить несколько столбцов в таблицу с помощью одного оператора SQL Server ALTER TABLE, как показано ниже.

ALTER TABLE Образец таблицы

ДОБАВИТЬ NewColumn2 varchar(20),

NewColumn3 varchar(50)

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

Добавление столбца с ограничениями по умолчанию

Для достижения вышеуказанной цели проще всего добавить столбец с ограничением по умолчанию. При добавлении столбца по умолчанию значение по умолчанию будет добавлено в таблицу. В следующем сценарии используется оператор SQL Server ALTER TABLE ADD Column (Status в нашем случае) для добавления столбца с именем Status с ограничением по умолчанию.

ALTER TABLE SampleTable

ADD Status CHAR(5000)

DEFAULT ‘INC’ WITH VALUES

Когда столбец добавляется, как указано выше, столбец «Статус» будет добавлен со значением INC для всех записей.

Из профилировщика следующая статика захватывается через SQL Profiler во время добавления столбца со значениями по умолчанию.

Процессор

0

Читает

185

Пишет

0

Продолжительность Милли Секунды

65

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

Ниже приведены статистические данные блокировки во время добавления столбца с ограничением.

Тип ресурса

Подтип ресурса

Режим запроса

Количество записей

БАЗА ДАННЫХ

С

1

БАЗА ДАННЫХ

DDL

С

1

КЛЮЧ

Икс

11

МЕТАДАННЫЕ

DATA_SPACE

Щ-С

1

ОБЪЕКТ

IX

6

ОБЪЕКТ

Щ-М

2

Обратите внимание, что следующий запрос должен быть выполнен в открытой транзакции, чтобы получить приведенную выше статистику блокировок.

1

2

3

4

5

6

7

8

9

Выбрать

resource_type,

Resource_subtype,

request_mode,

Count (*) от SYS.DM_TRAN_LOCKS

, где request_session_id = @@ SPID

Group By Resource_type,

Droup_SMODE.

Это показывает, что таблица (объект) имеет предполагаемую эксклюзивную блокировку, что означает, что таблица не блокируется исключительно во время добавления столбца. Кроме того, добавление столбца со значением по умолчанию не заняло и одной минуты, хотя в нем 500 000 записей.

Давайте посмотрим на размер таблицы.

Вы увидите, что ничего не изменилось.

Давайте посмотрим размеры файлов базы данных.

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

Обновление со значением

Давайте обновим тот же столбец другим значением и получим ту же статистику.

Тип ресурса

Режим запроса

Количество записей

БАЗА ДАННЫХ

С

1

ОБЪЕКТ

Икс

1

В приведенной выше таблице показано, что таблица заблокирована исключительно, что означает, что таблица недоступна во время обновления.

Посмотрим на размер стола.

Таблица увеличилась на некоторое значение, как показано на рисунке выше.

Ниже приведены сведения о расходах на запросы, полученные с помощью SQL Profiler.

Процессор

29 781

Читает

9 188 986

Пишет

527 436

Продолжительность Милли Секунды

1 113 142

Очевидно, что при обновлении столбца для большой таблицы потребление ресурсов велико.

Ниже приведены размеры файлов базы данных при добавлении столбца и обновлении значений.

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

В чем разница этих сценариев? До SQL Server 2012 при добавлении столбца со значением по умолчанию происходило такое же поведение. В SQL Server 2012 и более поздних версиях это уже не так, столбец добавляется в таблицу в режиме онлайн, и обновление не происходит, и это только изменение метаданных.

Как это достигается

Это достигается несколько очень простым, но новым подходом. sys.system_internals_partition_columns DMV имеет два дополнительных столбца с именами has_default и default_value , как показано ниже.

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

Теперь следующий вопрос: что делать, если ограничение по умолчанию отбрасывается сразу после его создания. В этом сценарии, тем не менее, вышеуказанная настройка будет иметь преимущественную силу, поэтому будет сохранено ранее установленное значение по умолчанию.

Заключение

В этой статье мы рассмотрели базовый синтаксис SQL Server ALTER TABLE и реализовали его для добавления столбцов в существующую таблицу.

До SQL Server 2012 не было разницы между добавлением столбца со значением по умолчанию и добавлением столбца и его обновлением. Поэтому в предыдущей эпохе SQL Server 2012 вместо добавления столбца с ограничением по умолчанию лучше добавлять столбец и обновлять его пакетами, чтобы таблица не была монопольно заблокирована.

Однако, начиная с SQL Server 2012, подход изменился, и добавление столбца с ограничениями по умолчанию стало намного удобнее.

  • Автор
  • Последние сообщения

Динеш Асанка

Динеш Асанка является MVP в категории SQL Server за последние 8 лет. Работает с SQL Server более 15 лет, пишет статьи и книги в соавторстве. Он является ведущим в различных группах пользователей и университетах. Он всегда готов учиться и делиться своими знаниями.

Просмотреть все сообщения Динеша Асанки

Последние сообщения Динеша Асанки (посмотреть все)

Как добавить новые столбцы в существующую таблицу в базе данных SQL Server

Привет, ребята, добавление нового столбца в существующую таблицу с данными всегда сложно, и если вы не проявите должной осмотрительности, вы рискуете повредить или удалить существующие данные. Вам нужно знать, какие данные есть, сколько данных есть, чтобы оценить, сколько времени займет выполнение вашего запроса в рабочей среде. Кроме того, вы не можете добавить столбцы NOT NULL в существующую таблицу, если они не пусты и у вас не указано значение по умолчанию. Если вы знаете SQL, то, вероятно, знаете, что вы можете добавлять столбцы в существующую таблицу в SQL Server с помощью команды ALTER. Он позволяет не только добавлять столбцы, но и удалять столбцы.

Вы также можете добавлять или удалять ограничения с помощью команды ALTER. Кстати, вам нужно быть осторожным, делая что-либо с существующими таблицами из-за данных внутри, что создает некоторые проблемы при добавлении новых столбцов или удалении существующих.

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

Кстати, если вы новичок в мире SQL, лучше начать с комплексного курса SQL, такого как The Complete SQL Bootcamp Курс Хосе Портильи на Udemy. Это поможет вам лучше и быстрее изучить SQL, и подобные статьи также будут иметь больше смысла, если у вас есть некоторые знания SQL за плечами.

В любом случае, в этой статье вы узнаете о SQL-запросе или команде для добавления новых столбцов в существующую таблицу в SQL Server 2008, 2012 и других версиях.

SQL-запрос для добавления столбцов в существующую таблицу

Как я уже сказал, вы можете использовать предложение ALTER SQL для изменения существующей таблицы. Вы можете использовать следующий запрос SQL для добавления столбцов в существующую таблицу в SQL Server 2008:

 
 ALTER TABLE dbo.StudentRcords ДОБАВИТЬ хобби VARCHAR(50) NULL; 

Когда вы добавляете новый столбец в существующую таблицу с данными, важно указать значение по умолчанию или сделать его ОБНУЛЯЕМЫМ, так как вам нужно, чтобы некоторые значения использовались с существующими строками.

Если сделать столбец хобби НЕ NULL, то приведенный выше запрос не будет работать, как показано ниже:

 
 ALTER TABLE dbo.StudentRcords ADD hobbies VARCHAR(50) NOT NULL; 

ALTER TABLE позволяет добавлять только столбцы, которые могут содержать пустые значения или иметь указанное определение DEFAULT, или добавляемый столбец является столбцом идентификатора или временной метки, или, альтернативно, если ни одно из предыдущих условий не выполняется, таблица должна быть пустой, чтобы разрешить добавление этого столбца. Колонка «Хобби» не может быть добавлена ​​в непустую таблицу «StudentRecords», так как она не удовлетворяет этим условиям.

Если вы хотите убедиться, что он не нулевой, вы должны указать значение по умолчанию, как показано ниже:

 ALTER TABLE dbo.StudentRcords
ДОБАВИТЬ хобби VARCHAR(50) NOT NULL ПО УМОЛЧАНИЮ "Крикет"; 

Кстати, вы также можете добавить более одного столбца в существующую таблицу одним запросом ALTER. Вам просто нужно разделить их запятой, как показано ниже:

 ALTER TABLE dbo.StudentRcords
ДОБАВИТЬ хобби VARCHAR(50) NULL, acitivity_score INT NULL; 

Этот запрос добавляет два столбца: первый hobbies, второй Activity_score – в таблицу StudentRecords.

Кстати, если вы изучаете SQL или работаете с Microsoft SQL Server в качестве разработчика и учитесь в хаотичном порядке на основе необходимости знать, я предлагаю хороший курс, такой как Microsoft SQL Server для начинающих на Udemy  Расширение этих знаний будет иметь большой смысл, потому что вы уже знаете, как решить проблему.

SQL Server ALTER TABLE ADD COLUMN Пример

Теперь давайте посмотрим на живой пример, где мы попробуем добавить столбец в существующую таблицу с помощью редактора запросов SQL Server Management Studio:

У нас есть существующая таблица с именем Test.dbo.Customer, которая имеет два столбца customer_id и customer_name, и мы добавим в таблицу новый столбец с именем customer_address.

Кстати, не следуйте этому соглашению об именах, вместо customer_id вы должны просто назвать идентификатор столбца, имя и адрес. Информация о клиенте является избыточной, потому что вы знаете, что это информация о клиенте, поскольку она находится в таблице Customer.

Все прошло нормально, потому что мы выбрали ограничение как NULL, если бы мы сделали customer_address NOT NULL, вы получили бы следующую ошибку, потому что существующая таблица не пуста.

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

Вы можете видеть, что на этот раз оператор ALTER выполнен успешно, и вы также можете видеть столбец customer_address, добавленный с пустыми значениями. Чтобы узнать больше о команде ALTER, прочитайте Основы SQL Server 2012 T-SQL.

Это все о как добавить новый столбец в существующую таблицу в SQL Server . Всегда сложно, если ваша существующая таблица не пуста. Фактически, добавление нового столбца в рабочую базу данных занимает довольно много времени в зависимости от того, сколько у вас данных. У вас также есть ограничения на добавление ограничений NOT NULL, поскольку вы должны указать значение по умолчанию, которое будет использоваться для существующих строк.

Дальнейшее обучение
Введение в SQL
Полное учебное пособие по SQL
SQL для новичков: анализ данных для начинающих

Прочее по теме SQL-запросы, вопросы для интервью и статьи:

  • Как соединить несколько таблиц с помощью LEFT Join в SQL (пример)
  • В чем реальная разница между предложениями WHERE и HAVING в SQL? (ответ)
  • 5 бесплатных курсов по изучению баз данных и SQL (бесплатные курсы)
  • Как перенести SQL-запросы с Oracle на SQL Server 2008? (ответ)
  • 4 бесплатных книги для изучения базы данных Microsoft SQL Server (книги)
  • Топ-5 веб-сайтов для БЕСПЛАТНОГО изучения SQL онлайн? (веб-сайты)
  • 5 бесплатных курсов для изучения Oracle и SQL Server? (курсы)
  • Как объединить три таблицы в один запрос SQL (решение)
  • Разница между кластеризованным и некластеризованным индексом в SQL? (ответ)
  • 5 Усовершенствованные книги по SQL для повышения уровня ваших навыков работы с SQL (книги)
  • 5 Курсы для изучения баз данных Oracle и Microsoft SQL Server (курсы)
  • Разница между Self и Equi Join в SQL? (ответ)
  • 10 Часто задаваемые вопросы на собеседовании по SQL Query (решение)
  • Написать SQL Query для поиска повторяющихся писем — проблема LeetCode (решение)
  • Напишите SQL-запрос, чтобы найти все имена таблиц в базе данных в MySQL (решение)
  • 5 Курсы для изучения базы данных и SQL Better (курсы)
  • 5 лучших веб-сайтов для изучения SQL онлайн БЕСПЛАТНО? (ресурс)
  • В чем разница между UNION и UNION ALL в SQL? (ответ)
  • Напишите SQL-запрос для копирования или резервного копирования таблицы в MySQL (решение)
  • Как найти повторяющиеся строки в таблице базы данных? (раствор)
  • 5 лучших курсов для изучения баз данных MySQL для начинающих (курсы)
  • В чем разница между представлением и материализованным представлением в базе данных? (ответ)
  • Разница между первичным ключом и ключом-кандидатом в таблице? (ответ)
  • 5 бесплатных курсов по изучению T-SQL и SQL Server для начинающих (курсы)
  • Разница между уникальным и первичным ключом в таблице? (ответ)
  • 5 лучших курсов для углубленного изучения PostgreSQL (курсы)
  • 5 бесплатных курсов по изучению T-SQL и SQL Server для начинающих (курсы)
  • Разница между первичным и внешним ключом в таблице? (ответ)
  • 5 лучших курсов для углубленного изучения Microsoft SQL Server (курсы)

Спасибо за чтение этой статьи, если вам понравился этот учебник по SQL, поделитесь им с друзьями и коллегами.