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

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

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

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

Добавляем колонку в таблицу в PostgreSQL

Сначала начнем разбирать пример на СУБД PostgreSQL. Допустим, у нас есть таблица «users» и в ней уже есть данные:

idNameFam
1User1Fam1
2User2Fam2
3User3Fam3

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

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

Переходим к добавлению столбца:

Теперь после того, как Вы добавили колонку, можно обновить данные, например, добавим в строку со значением user1 отчество Otch1:

После этого можете проверить данные, выполнив запрос на выборку с помощью нам уже известного оператора SELECT:

Вы получите следующий результат:

idNameFamOtch
1User1Fam1Otch1

Добавляем новую колонку в таблицу в MS SQL Server 2000

Думаю, что с PostgreSQL мы разобрались, а точнее научились добавлять колонки в существующие таблицы.

Теперь попробуем проделать то же самое в MS SQL Server 2000. Все исходные данные допустим, будут такими же.

Здесь запрос практически такой же, но все равно он немного отличается:

Здесь уже название схемы указывать необязательно (по умолчанию таблица будет определена на основе контекста подключения), а также ключевое слово column тоже нет необходимости писать. Давайте также обновим и проверим наши данные:

Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL, которую написал я, и в которой я подробно, и в то же время простым языком, рассказываю о языке SQL.

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

Источник

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

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

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

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

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

ADD COLUMN

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

DROP COLUMN

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

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

RENAME COLUMN

CLEAR COLUMN

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

COMMENT COLUMN

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

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

MODIFY COLUMN

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

Значение по умолчанию

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

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

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

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

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

MODIFY COLUMN REMOVE

Пример

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

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

MATERIALIZE COLUMN

Пример

Результат:

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

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

Источник

Как добавить новый столбец в таблицу между существующими столбцами?

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

Я говорю «наивный», поскольку по определению атрибуты отношения не упорядочены, и обращение к значениям атрибута выполняется по его имени, но не по позиции. Что же касается языка SQL, то столбцы в таблице имеют порядок, который задается в операторе CREATE TABLE. Новый же столбец, который добавляется с помощью оператора ALTER TABLE, становится последним в таблице. Т.е. стандарт языка SQL не предусматривает возможности непосредственно добавить столбец в определенную позицию в списке столбцов.

Справедливости ради следует сказать, что некоторые реализации языка SQL расширяют стандарт в этом плане. Например, в MySQL в операторе ALTER TABLE вы можете указать позицию добавляемого столбца (новый столбец может стать первым или после указанного столбца).

Другой вопрос, а зачем это нужно? Мне приходит в голову такой вариант. Скажем, в клиентском приложении для генерации отчетов используется запрос типа

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

Итак, имеется таблица Employees, которая создается следующим оператором:

Теперь нам требуется добавить столбец middle_name (отчество) между столбцами first_name и last_name.

В MySQL это можно сделать просто:

В SQL Server так поступить нельзя, но можно использовать следующий алгоритм:

» создание новой таблицы требуемой структуры;
» копирование данных из таблицы Employees в эту новую таблицу;
» удаление таблицы Employees;
» переименование новой таблицы в таблицу с именем Employees.

Ниже приводятся операторы T-SQL, которые реализуют этот алгоритм.

Обратите внимание, что столбец middle_name допускает NULL-значения. Мы не можем добавить столбец в существующую таблицу (или, как в нашем случае, не задавая значения для этого столбца при копировании данных из таблицы Employees в таблицу Emp_temp), если он не имеет значения по умолчанию. Здесь мы принимаем по умолчанию значение NULL.

Мы можем выполнить два первых шага за одно действие с помощью оператора SELECT INTO, который «на лету» создает новую таблицу:

Оператор CAST позволяет нам тут же задать требуемый тип добавляемого столбца. Остальные столбцы наследуют типы из таблицы-источника.

Если вы хотите проверить работу последнего скрипта, приведите таблицу в исходное состояние, удалив добавленный ранее столбец:

Заметим, что при использовании оператора SELECT INTO теряются ключи. Поэтому нам придется добавить ограничение PRIMARY KEY (первичный ключ) либо во временную таблицу, либо уже в переименованную, чтобы получить в точности требуемую структуру:

Аналогичный алгоритм можно применить и для перестановки уже существующих столбцов. Помимо указанной причины такая перестановка может повысить производительность, связанную с сокращением объема данных, записываемых в журнал транзакций в некоторых реализациях. Это связано со спецификой обработки строк фиксированной и переменной длины. Вот какие рекомендации по этому поводу дает Джо Селко * :

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

Источник

Команда SQL для создания и удаления таблиц, добавления данных (CREATE, INSERT, SHOW COLUMNS, TRUNCATE, DROP)

Создание таблицы

Попробуем создать таблицу с названием USERS и этими полями. Разберём пример по строчкам. В первой строке можно увидеть команду с говорящим названием CREATE TABLE. Она делает запрос на создание таблицы. После неё стоит название таблицы USERS. В названии таблицы стоит ставить только латинские буквы (строчные и заглавные) и подчёркивания, но нельзя делать пробелы и иные символы.

Итак, выполним SQL запрос из примера. Теперь необходимо убедиться действительно ли таблица создалась. Для этого сделаем следующий запрос к базе: Эту команду можно перевести дословно с английского языка: «ПОКАЖИ СТОЛБЦЫ ИЗ». После этой команды стоит название таблицы, которую мы только что создавали. Если таблица создана успешно, то в результате выполнения запроса мы увидим список столбцов: По этому результату мы видим, что все столбцы создались успешно.

Добавление данных в таблицу

После успешного создания таблицы можно попробовать добавить первые данные. Не будем мелочиться и добавим сразу две строки данных: Команда «INSERT INTO» (можно перевести с английского как «ВСТАВИТЬ В») вставляет данные в таблицу, название которой идёт после неё. В нашем случае это «USERS». Затем идёт слово «SET» (переводится как «ЗАДАТЬ»), после которого через запятую перечисляются названия столбцов в таблице и их значения, который надо вставить.

В нашем примере первый столбец ID принимает максимальное уникальное значение, поэтому нет большого смысла передавать его при добавлении данных. Для разнообразия во втором добавлении передано не только значение NAME, но и значение DATE, хотя это необязательно, потому что при создании столбца DATE было сказано, что он принимает значение равное текущей дате и времени, если не передать ему что-то другое.

Базы данных могут быть настроены по-разному. Формат даты может отличаться, из-за чего значение DATETIME может несохраниться, если не угадать с форматом. Поэтому вместо строки, содержащей дату в формате «ГГГГ-ММ-ДД ЧЧ:ММ:СС» можно написать «NOW()» (переводится «сейчас»), тогда в таблицу будет вставлено значение текущей даты в нужном формате.

Существует несколько способов записи команды INSERT. Приведём ещё один пример без «SET», который подходит для добавления небольшого количества данных, когда столбцов мало: После названия таблицы в скобках идёт название полей, в которых будут вставлены данные. Затем идёт «VALUES» и в скобках через запятую значения, которые будут вставлены. Обратите внимание, что важен порядок названий столбцов и значений, которые находятся в круглых скобках.

Давайте проверим, что было записано в нашу таблицу. Для этого выполним запрос: Команда «SELECT» возвращает строки из таблицы. После команды стоит звёздочка *, она означает, что необходимо выбрать все столбы таблицы. В нашем случае звёздочку можно заменить на перечисление трёх столбцов через запятую: «ID, NAME, DATE». После звёздочки стоит слово «FROM», которое можно перевести как «из». И в конце стоит название таблицы в базе данных «USERS», из которых будут выводиться данные.

В результате выполнения этого запроса мы увидим такой результат: Всё добавилось как нужно.

Источник

Добавление нового столбца таблицы в определенную порядковую позицию в Microsoft SQL Server

можно ли добавить столбец в таблицу в определенной порядковой позиции в Microsoft SQL Server?

например, наши таблицы всегда имеют столбцы CreatedOn, CreatedBy, LastModifiedOn, LastModifiedBy в «конце» каждого определения таблицы? Я бы хотел, чтобы новый столбец отображался в SSMS над этими столбцами.

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

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

9 ответов

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

Это то, что SQL Management Studio делает за кулисами.

с помощью инструмента синхронизации схемы можно автоматически создавать эти сценарии.

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

Один: Создать/Копировать/Падение / Переименовать

это на самом деле то, что SQL Server делает в графическом интерфейсе: вот пример сценария, который он генерирует и выполняет, когда вы нажимаете кнопку «Сохранить» после добавления нового столбца в начало таблицы.

два: добавить СТОЛБЕЦ / ОБНОВИТЬ / УДАЛИТЬ СТОЛБЕЦ / ПЕРЕИМЕНОВАТЬ

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

три: жить с этим

перейдите в SQL Server management Studio и» создайте » существующую таблицу. Вставить столбец в центре, щелкните правой кнопкой мыши в пустой области и выберите Создать Сценарий Изменения.

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

Как вставить столбец в sql. Смотреть фото Как вставить столбец в sql. Смотреть картинку Как вставить столбец в sql. Картинка про Как вставить столбец в sql. Фото Как вставить столбец в sql

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

Как вставить столбец в sql. Смотреть фото Как вставить столбец в sql. Смотреть картинку Как вставить столбец в sql. Картинка про Как вставить столбец в sql. Фото Как вставить столбец в sql

насколько мне известно, нет известного метода изменения порядка столбца. За кулисами SQL Management Studio делает то, что сказал Хосе Базилио. И если у вас есть большая таблица, то непрактично изменять порядок столбцов таким образом.

вы можете использовать «просмотр». С представлениями SQL вы можете использовать любой порядок, который вам нравится, без влияния изменений столбца таблицы.

TFS 2013 сделает это за вас автоматически.

добавьте новые столбцы в таблицу в любом случае, а затем зафиксируйте изменения в TFS. Оттуда вы можете открыть файл sql таблицы в Visual Studio и вручную переместить порядок столбцов в скрипте создания T-SQL. Затем вы можете обновить целевую базу данных с помощью инструмента сравнения схем VS, найденного в разделе Инструменты > SQL Server > новое сравнение схем. Выберите проект базы данных с изменением в качестве источник и база данных, которую вы хотите обновить в качестве цели. Сравните, выберите сценарий таблицы и обновите его. VS упадет и добавит автоматически. Все ваши данные будут в безопасности, и индексы тоже.

грязный и простой.
Экспорт таблицы в CSV.
Вставить новые данные в нужное положение.
Откидной стол.
Создайте новую таблицу с требуемыми спецификациями столбцов.
Загрузите столбцы из csv в новую таблицу.

Я не уверен, что поток все еще активен. У меня был тот же запрос с базой данных MySQL. Щелкните правой кнопкой мыши таблицу и выберите «ALTER» автоматически сгенерированный код ниже. Образец предоставлен из sakila db, и он работал. Просто узнайте столбец, после которого вы хотите разместить свой новый столбец и использовать ключевое слово «AFTER»

нет Команды SQL DDL для создания столбца в определенном месте или для» переупорядочивания » столбцов. Это действительно не нужно.

Источник

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

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