Как добавить столбец в таблицу sql
Перейти к содержимому

Как добавить столбец в таблицу sql

  • автор:

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

В SQL-сервере для добавления столбца со значением по умолчанию в существующую таблицу используйте ALTER Таблица ADD имя столбца с ограничением NULL/NOT NULL со значением DEFAULT .

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

            Давайте рассмотрим пример, чтобы лучше понять это.

Добавление не нулевого столбца со значением по умолчанию для существующих записей #

Рассмотрим таблицу Employee в SQL-сервере, и если мы хотим добавить столбец минимальной заработной платы со значением по умолчанию 1000USD , используйте следующий запрос.

       Приведенный выше запрос добавит новый столбец MINIMUM_WAGE в таблицу Employee и заполнит столбец в существующих строках значением по умолчанию, т.е. 1000 .

Поскольку мы добавили ограничение NOT NULL .

Если вы не добавите ограничение NOT NULL , все существующие строки будут NULL , а значение DEFAULT не будет иметь никакого влияния.

     Все значения столбца MINIMUM_WAGE будут NULL .

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

Например, если таблица Employee не пуста, и если вы добавите новый столбец с ограничением NOT NULL , это приведет к ошибке.

      Приведенный выше запрос sql server выдаст следующую ошибку при добавлении нового столбца в существующую таблицу.

Если таблица Employee пуста.

Приведенный выше запрос sql server добавит новый столбец без каких-либо проблем.

Добавление нулевого столбца со значением по умолчанию для существующих записей #

Если вы хотите добавить нулевой столбец со значением по умолчанию для существующих записей, вам необходимо использовать WITH VALUES в sql-запросе.

         Приведенный выше запрос добавит в таблицу sql server nullable столбец со значением по умолчанию для существующих записей.

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

Don’t be a Stranger. Connect me at Social Networking Sites.

�� Stay in the loop

Get a short & sweet tutorials delivered to your inbox every couple of days. No spam ever. Unsubscribe any time.

Манипуляции со столбцами

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

ALTER [TEMPORARY] TABLE [db].name [ON CLUSTER cluster] ADD|DROP|RENAME|CLEAR|COMMENT|MODIFY|ALTER>|MATERIALIZE COLUMN ... 

В запросе можно указать сразу несколько действий над одной таблицей через запятую. Каждое действие — это манипуляция над столбцом.

Существуют следующие действия:

  • ADD COLUMN — добавляет столбец в таблицу;
  • DROP COLUMN — удаляет столбец;
  • RENAME COLUMN — переименовывает существующий столбец;
  • CLEAR COLUMN — сбрасывает все значения в столбце для заданной партиции;
  • COMMENT COLUMN — добавляет комментарий к столбцу;
  • MODIFY COLUMN — изменяет тип столбца, выражение для значения по умолчанию и TTL;
  • MODIFY COLUMN REMOVE — удаляет какое-либо из свойств столбца;
  • MATERIALIZE COLUMN — делает столбец материализованным ( MATERIALIZED ) в кусках, в которых отсутствуют значения.

Подробное описание для каждого действия приведено ниже.

ADD COLUMN​

ADD COLUMN [IF NOT EXISTS] name [type] [default_expr] [codec] [AFTER name_after | FIRST] 

Добавляет в таблицу новый столбец с именем name , типом type , кодеком codec и выражением для умолчания default_expr (смотрите раздел Значения по умолчанию).

Если указано IF NOT EXISTS , запрос не будет возвращать ошибку, если столбец уже существует. Если указано AFTER name_after (имя другого столбца), то столбец добавляется (в список столбцов таблицы) после указанного. Если вы хотите добавить столбец в начало таблицы, используйте FIRST . Иначе столбец добавляется в конец таблицы. Для цепочки действий name_after может быть именем столбца, который добавляется в одном из предыдущих действий.

Добавление столбца всего лишь меняет структуру таблицы, и не производит никаких действий с данными — соответствующие данные не появляются на диске после ALTER-а. При чтении из таблицы, если для какого-либо столбца отсутствуют данные, то он заполняется значениями по умолчанию (выполняя выражение по умолчанию, если такое есть, или нулями, пустыми строками). Также, столбец появляется на диске при слиянии кусков данных (см. MergeTree).

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

ALTER TABLE alter_test ADD COLUMN Added1 UInt32 FIRST; ALTER TABLE alter_test ADD COLUMN Added2 UInt32 AFTER NestedColumn; ALTER TABLE alter_test ADD COLUMN Added3 UInt32 AFTER ToDrop; DESC alter_test FORMAT TSV; 
Added1 UInt32 CounterID UInt32 StartDate Date UserID UInt32 VisitID UInt32 NestedColumn.A Array(UInt8) NestedColumn.S Array(String) Added2 UInt32 ToDrop UInt32 Added3 UInt32 

DROP COLUMN​

DROP COLUMN [IF EXISTS] name 

Удаляет столбец с именем name . Если указано IF EXISTS , запрос не будет возвращать ошибку, если столбца не существует.

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

Предупреждение

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

ALTER TABLE visits DROP COLUMN browser 

RENAME COLUMN​

RENAME COLUMN [IF EXISTS] name to new_name 

Переименовывает столбец name в new_name . Если указано выражение IF EXISTS , то запрос не будет возвращать ошибку при условии, что столбец name не существует. Поскольку переименование не затрагивает физические данные колонки, запрос выполняется практически мгновенно.

ЗАМЕЧЕНИЕ: Столбцы, являющиеся частью основного ключа или ключа сортировки (заданные с помощью ORDER BY или PRIMARY KEY ), не могут быть переименованы. Попытка переименовать эти слобцы приведет к SQL Error [524] .

ALTER TABLE visits RENAME COLUMN webBrowser TO browser 

CLEAR COLUMN​

CLEAR COLUMN [IF EXISTS] name IN PARTITION partition_name 

Сбрасывает все значения в столбце для заданной партиции. Если указано IF EXISTS , запрос не будет возвращать ошибку, если столбца не существует.

Как корректно задать имя партиции, см. в разделе Как задавать имя партиции в запросах ALTER.

ALTER TABLE visits CLEAR COLUMN browser IN PARTITION tuple() 

COMMENT COLUMN​

COMMENT COLUMN [IF EXISTS] name 'Text comment' 

Добавляет комментарий к таблице. Если указано IF EXISTS , запрос не будет возвращать ошибку, если столбца не существует.

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

Посмотреть комментарии можно в столбце comment_expression из запроса DESCRIBE TABLE.

ALTER TABLE visits COMMENT COLUMN browser 'Столбец показывает, из каких браузеров пользователи заходили на сайт.' 

MODIFY COLUMN​

MODIFY COLUMN [IF EXISTS] name [type] [default_expr] [codec] [TTL] [AFTER name_after | FIRST] ALTER COLUMN [IF EXISTS] name TYPE [type] [default_expr] [codec] [TTL] [AFTER name_after | FIRST] 

Запрос изменяет следующие свойства столбца name :

  • Тип
  • Значение по умолчанию
  • Кодеки сжатия
  • TTL

Примеры изменения кодеков сжатия смотрите в разделе Кодеки сжатия столбцов.

Примеры изменения TTL столбца смотрите в разделе TTL столбца.

Если указано IF EXISTS , запрос не возвращает ошибку при условии, что столбец не существует.

Запрос также может изменять порядок столбцов при помощи FIRST | AFTER , смотрите описание ADD COLUMN.

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

ALTER TABLE visits MODIFY COLUMN browser Array(String) 

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

Выполнение запроса ALTER атомарно.

Запрос ALTER на изменение столбцов реплицируется. Соответствующие инструкции сохраняются в ZooKeeper, и затем каждая реплика их применяет. Все запросы ALTER выполняются в одном и том же порядке. Запрос ждёт выполнения соответствующих действий на всех репликах. Но при этом, запрос на изменение столбцов в реплицируемой таблице можно прервать, и все действия будут осуществлены асинхронно.

MODIFY COLUMN REMOVE​

Удаляет какое-либо из свойств столбца: DEFAULT , ALIAS , MATERIALIZED , CODEC , COMMENT , TTL .

ALTER TABLE table_name MODIFY COLUMN column_name REMOVE property; 

Пример

Удаление свойства TTL:

ALTER TABLE table_with_ttl MODIFY COLUMN column_ttl REMOVE TTL; 

Смотрите также

MATERIALIZE COLUMN​

Материализует или обновляет столбец таблицы с выражением для значения по умолчанию ( DEFAULT или MATERIALIZED ). Используется, если необходимо добавить или обновить столбец со сложным выражением, потому как вычисление такого выражения прямо во время выполнения запроса SELECT оказывается ощутимо затратным.

ALTER TABLE table MATERIALIZE COLUMN col; 

Пример

DROP TABLE IF EXISTS tmp; SET mutations_sync = 2; CREATE TABLE tmp (x Int64) ENGINE = MergeTree() ORDER BY tuple() PARTITION BY tuple(); INSERT INTO tmp SELECT * FROM system.numbers LIMIT 5; ALTER TABLE tmp ADD COLUMN s String MATERIALIZED toString(x);  ALTER TABLE tmp MATERIALIZE COLUMN s;  SELECT groupArray(x), groupArray(s) FROM (select x,s from tmp order by x); ┌─groupArray(x)─┬─groupArray(s)─────────┐  [0,1,2,3,4]  ['0','1','2','3','4']  └───────────────┴───────────────────────┘  ALTER TABLE tmp MODIFY COLUMN s String MATERIALIZED toString(round(100/x));  INSERT INTO tmp SELECT * FROM system.numbers LIMIT 5,5;  SELECT groupArray(x), groupArray(s) FROM tmp; ┌─groupArray(x)─────────┬─groupArray(s)──────────────────────────────────┐  [0,1,2,3,4,5,6,7,8,9]  ['0','1','2','3','4','20','17','14','12','11']  └───────────────────────┴────────────────────────────────────────────────┘  ALTER TABLE tmp MATERIALIZE COLUMN s;  SELECT groupArray(x), groupArray(s) FROM tmp; ┌─groupArray(x)─────────┬─groupArray(s)─────────────────────────────────────────┐  [0,1,2,3,4,5,6,7,8,9]  ['inf','100','50','33','25','20','17','14','12','11']  └───────────────────────┴───────────────────────────────────────────────────────┘ 

Смотрите также

Ограничения запроса ALTER​

Запрос ALTER позволяет создавать и удалять отдельные элементы (столбцы) вложенных структур данных, но не вложенные структуры данных целиком. Для добавления вложенной структуры данных, вы можете добавить столбцы с именем вида name.nested_name и типом Array(T) — вложенная структура данных полностью эквивалентна нескольким столбцам-массивам с именем, имеющим одинаковый префикс до точки.

Отсутствует возможность удалять столбцы, входящие в первичный ключ или ключ для сэмплирования (в общем, входящие в выражение ENGINE ). Изменение типа у столбцов, входящих в первичный ключ возможно только в том случае, если это изменение не приводит к изменению данных (например, разрешено добавление значения в Enum или изменение типа с DateTime на UInt32 ).

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

Запрос ALTER блокирует все чтения и записи для таблицы. То есть если на момент запроса ALTER выполнялся долгий SELECT , то запрос ALTER сначала дождётся его выполнения. И в это время все новые запросы к той же таблице будут ждать, пока завершится этот ALTER .

Для таблиц, которые не хранят данные самостоятельно (типа Merge и Distributed), ALTER всего лишь меняет структуру таблицы, но не меняет структуру подчинённых таблиц. Для примера, при ALTER-е таблицы типа Distributed , вам также потребуется выполнить запрос ALTER для таблиц на всех удалённых серверах.

SQL ALTER TABLE

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

ALTER TABLE — ADD column

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

ALTER TABLE table_name
ADD column_name datatype;

Следующий SQL — добавляет колонку «Email» для таблицы «Customers»:

Пример
ALTER TABLE Customers
ADD Email varchar(255);

ALTER TABLE — DROP COLUMN

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

ALTER TABLE table_name
DROP COLUMN column_name;

Следующий SQL удаляет столбец «Email» из таблицы «Customers»:

Пример
ALTER TABLE Customers
DROP COLUMN Email;

ALTER TABLE — ALTER/MODIFY COLUMN

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

SQL Сервер / MS Доступ:

ALTER TABLE table_name
ALTER COLUMN column_name datatype;

My SQL / Оракул (предыдущая версия 10G):

ALTER TABLE table_name
MODIFY COLUMN column_name datatype;

Оракул 10G и более поздние версии:

ALTER TABLE table_name
MODIFY column_name datatype;

Пример ALTER TABLE

Посмотрите на таблицу «Persons»:

ID LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

Теперь мы хотим добавить столбец с именем «DateOfBirth» в таблицу «Persons».

Мы используем следующую инструкцию SQL:

ALTER TABLE Persons
ADD DateOfBirth date;

Обратите внимание, что новый столбец «DateOfBirth» имеет тип date и будет содержать дату. Тип данных указывает, какой тип данных может содержать столбец. Для получения полного описания всех типов данных, доступных в MS Access, MySQL и SQL Server, перейдите к нашему полному Справочнику типов данных.

Таблица «Persons» теперь будет выглядеть так:

ID LastName FirstName Address City DateOfBirth
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

Пример изменения типа данных

Теперь мы хотим изменить тип данных столбца с именем «DateOfBirth» в таблице «Persons».

Мы используем следующую инструкцию SQL:

ALTER TABLE Persons
ALTER COLUMN DateOfBirth year;

Обратите внимание, что столбец «DateOfBirth» теперь имеет тип year и будет содержать year в двух или четырехзначном формате.

Пример DROP COLUMN

В первую очередь, мы хотим удалить столбец с именем «DateOfBirth» в таблице «Persons».

Мы используем следующую инструкцию SQL:

ALTER TABLE Persons
DROP COLUMN DateOfBirth;

Таблица «Persons» теперь будет выглядеть так:

ID LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

Мы только что запустили
SchoolsW3 видео

курс сегодня!

Сообщить об ошибке

Если вы хотите сообщить об ошибке или заказать перевод страницы, не стесняйтесь отправлять на электронное письмо:

Ваше предложение:

Спасибо Вам за то, что помогаете!

Ваше сообщение было отправлено в SchoolsW3.

Schoolsw3 оптимизирован для бесплатного обучения, проверки и подготовки знаний. Примеры в редакторе упрощают и улучшают чтение и базовое понимание. Учебники, ссылки, примеры постоянно пересматриваются, чтобы избежать ошибок, но не возможно гарантировать полную правильность всего содержания. Некоторые страницы сайта могут быть не переведены на РУССКИЙ язык, можно отправить страницу как ошибку, так же можете самостоятельно заняться переводом. Используя данный сайт, вы соглашаетесь прочитать и принять Условия к использованию, Cookies и политика конфиденциальности.

Как добавить столбец в таблицу SQL

В SQL (Structured Query Language) столбцы представляют собой основные структурные элементы таблиц. Они определяют тип данных, хранящийся в каждой ячейке таблицы. Иногда возникает необходимость добавить новый столбец в существующую таблицу. Это может понадобиться, например, для хранения новой информации или изменения структуры таблицы. В этой статье мы рассмотрим несколько способов добавить столбец в таблицу SQL.

1. Использование оператора ALTER TABLE

Наиболее распространенным способом добавления столбца в таблицу является использование оператора ALTER TABLE.

  ALTER TABLE table_name ADD column_name data_type; 
  • table_name — имя таблицы, в которую будет добавлен столбец
  • column_name — имя нового столбца
  • data_type — тип данных, который будет храниться в столбце

Пример:

  ALTER TABLE employees ADD email VARCHAR(50); 

Этот пример добавляет новый столбец «email» типа VARCHAR(50) в таблицу «employees».

2. Использование оператора CREATE TABLE AS

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

  CREATE TABLE new_table AS SELECT old_col1, old_col2, . new_col FROM old_table; 
  • new_table — новая таблица с добавленным столбцом
  • old_col1, old_col2, . — существующие столбцы из старой таблицы
  • new_col — новый столбец, который нужно добавить
  • old_table — старая таблица

Пример:

  CREATE TABLE employees_new AS SELECT id, name, email FROM employees; 

Этот пример создает новую таблицу «employees_new» и добавляет столбец «email», скопировав данные из столбца «email» в старой таблице «employees».

3. Использование оператора UPDATE

Третий способ добавления столбца в таблицу SQL состоит в обновлении таблицы, добавляя новый столбец для каждой строки.

  UPDATE table_name SET new_column = default_value; 
  • table_name — имя таблицы, в которую будет добавлен столбец
  • new_column — имя нового столбца
  • default_value — значение по умолчанию для нового столбца

Пример:

Этот пример добавляет новый столбец «email» в таблицу «employees» и устанавливает значение по умолчанию для всех строк «[email protected]».

Заключение

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *