Sql добавить колонку в таблицу: ALTER TABLE — изменение таблицы в SQL и работа со столбцами (add delete rename column)

НОУ ИНТУИТ | Лекция | Создание и использование умолчаний, ограничений и правил

< Дополнительный материал 4 || Лекция 16: 12345678910

Аннотация: При использовании базы данных всегда существует проблема, связанная с безопасностью доступа к данным. Определить уровень безопасности и степень возможных утечек информации можно с помощью умолчаний, ограничений и правил. Вы познакомитесь с новыми системными хранимыми процедурами, такими как sp_bindefault и sp_unbindefault. На конкретных примерах увидите, как происходит взаимодействие объектов в базе данных с различными параметрами конфигурирования. Создание Rule-объекта позволяет создавать ограничения на значения, не связанные с конкретной таблицей, что является новым шагом на пути к масштабируемости и легкости управления базой данных.

Ключевые слова: базы данных, ALTER TABLE, тип ограничения, SQL, server, Enterprise Manager, TIMESTAMP, удаление таблиц, sql query, определенные пользователем типы данных, оператор ALTER TABLE, UDT, user-defined data type, foreign, кластеризованные индексы, SSN, некластеризованные индексы, уникальный индекс, изменение таблицы, потенциальный ключ, inventory, SMALLINT, условия поиска, fill factor, recompute, создание индекса, использование базы данных, имя связи, cascading delete, conflict, привязка данных

intuit.ru/2010/edi»>Умолчания, ограничения и правила – это необязательные атрибуты, которые можно определять по колонкам и таблицам базы данных. В
«Управление таблицами с помощью T-SQL и Enterprise Manager»
вы ознакомились с умолчаниями, когда описывалось добавление к таблице колонки со значением по умолчанию с помощью оператора ALTER TABLE. В этой лекции вы узнаете о двух методах создания и модифицирования умолчаний. Напоминаем, что умолчания (значения по умолчанию *) – это значения, которые заносятся в определенную колонку, когда не указано явно никакого значения. Ограничения (constraints)** используются как способ идентифицирования допустимых значений для колонки (чтобы отклонять недопустимые значения) а также как средство обеспечения целостности данных в таблицах базы данных и между связанными таблицами. Мы рассмотрим в этой лекции пять типов ограничений; вы также узнаете, как создавать и модифицировать умолчания и ограничения с помощью Transact-SQL (T-SQL) и Microsoft SQL Server
Enterprise Manager, хотя использование Enterprise Manager часто оказывается проще.

Умолчания

Сначала рассмотрим причину, по которой вам может потребоваться использование умолчаний для определенных колонок таблицы; для этого мы посмотрим, что происходит, если вы не задали значение по умолчанию. Если в таблицу вводится строка, содержащая колонки без значений по умолчанию, и не во все колонки, допускающие null -значения, введены конкретные данные, то этим колонкам присваивается значение NULL. Но если колонка определена с атрибутом NOT NULL и вы не ввели какое-либо значение в эту колонку при вводе строки, то будет возвращено сообщение об ошибке, информирующее, что в эту колонку нельзя поместить значение NULL. Именно в этом случае удобно применять умолчания. Умолчания можно использовать, чтобы указывать определенное значение, которое будет помещено вместо значения NULL, и тогда вы не получите сообщения об ошибке. Вам следует использовать умолчания для колонок таблицы вместо разрешения использовать null -значения, поскольку операции по таким колонкам создают более высокую дополнительную нагрузку на систему, чем операции по колонкам, в которых не допускаются null -значения.

Microsoft SQL Server 2000 позволяет вам определять значение по умолчанию для каждой колонки таблицы. Вы не можете задать умолчание для колонок, имеющих тип данных timestamp или обладающих свойством IDENTITY или ROWGUIDCOL, поскольку эти колонки должны иметь уникальные значения. Колонки этого типа несовместимы со значениями по умолчанию, поскольку применение такого значения к колонке более одного раза приводило бы к тому, что колонка уже не имела бы уникальных значений. Вы можете присваивать только одно значение по умолчанию, и оно будет автоматически использоваться каждый раз, когда это требуется. И еще одно важное замечание относительно умолчаний: значение, задаваемое по умолчанию, должно быть совместимо с типом данных соответствующей колонки.

Значение по умолчанию можно создавать и модифицировать несколькими способами. В этом разделе мы рассмотрим, как определять значение по умолчанию при создании таблицы и как модифицировать колонку, чтобы добавлять или изменять умолчание, сначала – с помощью T-SQL и затем – с помощью Enterprise Manager. Напомним, что в
«Управление таблицами с помощью T-SQL и Enterprise Manager»
мы рассматривали добавление колонок со значением по умолчанию и влияние этого значения на существующие строки. Вы увидите здесь менее подробный пример такой вставки. Мы также рассмотрим возможности и влияние вставки значения по умолчанию в существующую колонку таблицы.

Определение и модифицирование умолчаний с помощью T-SQL

Вы можете определять значение по умолчанию для колонки посредством одного из трех операторов T-SQL: CREATE TABLE, ALTER TABLE или CREATE DEFAULT. Оператор CREATE DEFAULT, который используется в SQL Server 2000 для совместимости с предыдущими версиями, создает объект типа Default (Default-объект). Если вы используете данный метод, SQL Server сохраняет этот объект отдельно от таблицы, поэтому вы должны выполнять привязку этого объекта к колонке или колонкам с помощью системной хранимой процедуры sp_bindefault. Если вы удаляете таблицу, определение DEFAULT автоматически теряет связь с этой таблицей, но сам Default -объект остается. Но если вы используете метод CREATE TABLE или ALTER TABLE, то SQL Server сохраняет определение DEFAULT вместе с таблицей и при удалении таблицы происходит автоматическое удаление этого умолчания без необходимости выполнения дополнительных шагов. По этой причине обычно рекомендуют не использовать оператор CREATE DEFAULT. Однако использование Default -объекта может оказаться полезным, если одно значение по умолчанию будет использоваться для нескольких колонок.

Для запуска ваших операторов T-SQL вам следует использовать анализатор запросов SQL Query Analyzer, поскольку результаты будут появляться в виде графического пользовательского интерфейса (GUI), что проще для чтения, чем при запуске операторов в окне командной строки.

Оператор CREATE TABLE с атрибутом DEFAULT

Создание умолчания для колонки с помощью оператора CREATE TABLE является предпочтительным, стандартным методом. Следующий оператор создает в базе данных MyDB таблицу, содержащую умолчания для обеих колонок, – columnA (типа char) и columnB (типа int):

USE MyDB
CREATE TABLE MyTable 
( 
columnA  		char(15) 		NULL DEFAULT 'n/a', 
columnB  		int      		NULL DEFAULT 0 
) 
GO

intuit.ru/2010/edi»>Значение по умолчанию n/a (сокращение от not applicable – неприменимо) для колонки columnA совместимо с типом данных char этой колонки, и значение по умолчанию 0 для колонки columnB совместимо с типом данных int . Если при вставке новой строки в таблицу не указывается конкретное значение для одной или обеих колонок, то используется соответствующее значение по умолчанию. Поэтому единственным способом присваивания этим колонкам значения NULL является явная вставка NULL. Null -значения допустимы, поскольку для обеих колонок указан атрибут NULL. Если бы колонки были определены как NOT NULL, то вы не могли бы выполнять явную вставку значения NULL.

Дальше >>

< Дополнительный материал 4 || Лекция 16: 12345678910

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

Хотя потенциальные изменения, вносимые в схему таблицы в Google BigQuery, довольно ограничены, по существу есть два типа изменений, которые вам разрешено выполнять. Вы можете добавить новый столбец NULLABLEили REPEATEDстолбец или изменить существующий столбец mode(с REQUIREDна NULLABLE).  Помимо этого, BigQuery не допускает многих других изменений, таких как удаление или переименование столбцов (хотя это можно выполнить косвенно, скопировав столбцы, которые вы хотите сохранить, в новую таблицу, уничтожив исходную, а затем создав таблицу замены с новыми данными. ).

А пока мы рассмотрим методы добавления нового столбца в таблицу в этом руководстве.

Добавление столбца через веб-интерфейс

Добавление столбца через BigQuery WebUI – очень простой процесс:

  • Откройте BigQuery WebUI .
  • Выберите projectdataset и наконец , table вы хотите изменить.
  • Щелкните Add New Fields кнопку.
  • Для каждого поля, которое вы хотите добавить, введите name, выберите type и измените mode (при необходимости).
  • По завершении нажмите Add to Table кнопку, чтобы завершить обновления.

Добавление вложенных записей

Для добавления более сложных схем, таких как вложенные поля в Record поле типа, щелкните +символ рядом с Record полем выбора типа.  Теперь новое поле поля, которое было добавлено, будет вложено в Record поле выше.

Добавление столбца через API

Чтобы обновить таблицу и добавить новый столбец с помощью API BigQuery, у вас есть два варианта выбора метода: Tables.patch или Tables.updateTables.patch обновляет только те поля, которые добавляются / изменяются, тогда как Tables.updateзаменяет весь ресурс таблицы на новую предоставленную вами схему. Поэтому почти во всех случаях Tables.patch это предпочтительный метод.

Как и во всех вызовах API в BigQuery, ключом является правильное форматирование строки конфигурации перед ее отправкой в ​​метод API. В этом случае, вызов Tables.patch требует полной таблицы schema будет поставляться, который только содержит fields список, который представляет собой список полей , содержащих namemode и type значения.

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

Например, мы имеем простую melville таблицу с несколькими существующими полями: BookMeta_TitleBookMeta_DateBookMeta_CreatorBookMeta_Language, и BookMeta_Publisher. Мы хотим добавить last_updated поле TIMESTAMP type, чтобы весь наш сценарий конфигурации для API выглядел так:

{
  "schema": {
    "fields": [
      {
        "mode": "NULLABLE",
        "name": "BookMeta_Title",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "BookMeta_Date",
        "type": "TIMESTAMP"
      },
      {
        "mode": "NULLABLE",
        "name": "BookMeta_Creator",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "BookMeta_Language",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "BookMeta_Publisher",
        "type": "STRING"
      },
      {
        "mode": "NULLABLE",
        "name": "last_updated",
        "type": "TIMESTAMP"
      }
    ]
  }
}

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

{
 "kind": "bigquery#table",
 "etag": "\"T7tifokHjXTVbjJPVpstHNnQ7nk/MTQ2OTMyMzMyOTIxMQ\"",
 "id": "bookstore-1382:exports.melville",
 "selfLink": "https://www.googleapis.com/bigquery/v2/projects/bookstore-1382/datasets/exports/tables/melville",
 "tableReference": {
  "projectId": "bookstore-1382",
  "datasetId": "exports",
  "tableId": "melville"
 },
 "schema": {
  "fields": [
   {
    "name": "BookMeta_Title",
    "type": "STRING",
    "mode": "NULLABLE"
   },
   {
    "name": "BookMeta_Date",
    "type": "TIMESTAMP",
    "mode": "NULLABLE"
   },
   {
    "name": "BookMeta_Creator",
    "type": "STRING",
    "mode": "NULLABLE"
   },
   {
    "name": "BookMeta_Language",
    "type": "STRING",
    "mode": "NULLABLE"
   },
   {
    "name": "BookMeta_Publisher",
    "type": "STRING",
    "mode": "NULLABLE"
   },
   {
    "name": "last_updated",
    "type": "TIMESTAMP",
    "mode": "NULLABLE"
   }
  ]
 },
 "numBytes": "1344",
 "numLongTermBytes": "0",
 "numRows": "12",
 "creationTime": "1469323329211",
 "lastModifiedTime": "1469323329211",
 "type": "TABLE"
}

И, конечно же, теперь в схему таблицы добавлено наше новое поле!

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

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

Энди

30 января 2014 г.

3202 просмотров

0 комментариев

В этом руководстве вы узнаете, как добавлять новые столбцы в таблицу в SQL Server. Допустим, у нас есть таблица с именем table_product, и мы хотим добавить два столбца с именами ProductCode и Description.

Что вам нужно сделать, это просто запустить следующий скрипт sql. Новые два столбца должны быть добавлены в таблицу table_product.

 ИЗМЕНИТЬ ТАБЛИЦУ table_product
ДОБАВИТЬ ProductCode nvarchar (100),
Описание nvarchar(2000)
 

Комментарии

Статьи по Теме

TSQL

06 апреля 2021 г.

Если вам нужно обрезать содержимое таблицы в TSQL. Вы можете использовать встроенную функцию TRUNCATE.

TSQL

26 февраля 2021 г.

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

TSQL

26 февраля 2021 г.

Если у вас есть файл резервной копии базы данных с расширением bak и вы хотите восстановить его с помощью SQL-запроса, вы можете использовать встроенную функцию ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ. Помните, что для успешного восстановления базы данных вам необходимо …

TSQL

26 февраля 2021 г.

Если вам нужно создать резервную копию базы данных с помощью SQL-запроса в SQL Server. Вы можете использовать встроенную функцию «РЕЗЕРВНОЕ КОПИРОВАНИЕ БАЗЫ ДАННЫХ».

TSQL

20 февраля 2021 г.

Чтобы получить информацию о том, сколько места или размера используется таблицами, вы можете получить информацию о размере, связав несколько таблиц в таблицах sys. Есть две таблицы, которые содержат эту информацию. Первая — это таблица sys …

Добавить столбец в временную таблицу

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

  • Часть 1. Введение во временные таблицы и операции DML с временной таблицей
  • , часть 2. Запрос временной таблицы с системной версией
  • Часть 3. Включение управления версиями системы для существующей обычной таблицы
  • Часть 4. Операции DDL для временной таблицы с системным управлением версиями

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

--Создать демонстрационную базу данных, если ее нет
ЕСЛИ DB_ID('SqlhintsTemporalDemoDB') IS NULL
НАЧИНАТЬ
    СОЗДАТЬ БАЗУ ДАННЫХ
КОНЕЦ
ИДТИ
ИСПОЛЬЗОВАТЬ SqlhintsTemporalDemoDB
ИДТИ
--Создать временную таблицу с системной версией
СОЗДАТЬ ТАБЛИЦУ dbo.Customer
(
  Id INT NOT NULL PRIMARY KEY CLUSTERED,
  Имя NVARCHAR(100) НЕ NULL,
  StartTime DATETIME2 ВСЕГДА СОЗДАЕТСЯ КАК НАЧАЛО СТРОКИ
            СКРЫТЫЙ НЕ NULL,
  EndTime DATETIME2 ВСЕГДА СОЗДАЕТСЯ КАК КОНЕЦ СТРОКИ
            СКРЫТЫЙ НЕ NULL,
  ПЕРИОД ДЛЯ SYSTEM_TIME (время начала, время окончания)
)
С (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.CustomerHistory))
 

Приведенный выше сценарий создаст временную таблицу dbo.Customer и соответствующую таблицу истории dbo. CustomerHistory, как показано на следующем рисунке.
ИЗМЕНИТЬ ТАБЛИЦУ dbo.Customer ДОБАВИТЬ Город NVARCHAR(50)

После выполнения приведенного выше оператора проверьте столбцы в таблице Temporal и History

Мы видим, что добавление столбца в таблицу Temporal также добавляет столбец в таблицу History

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

ALTER TABLE dbo.Customer DROP COLUMN Город
 

После выполнения приведенного выше оператора проверьте столбцы в таблице Temporal и History

Мы видим, что удаление столбца из таблицы Temporal также удаляет столбец из таблицы History

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

ИЗМЕНИТЬ ТАБЛИЦУ dbo.CustomerHistory ДОБАВИТЬ Страну NVARCHAR(50) 

РЕЗУЛЬТАТ

Сообщение 13550, уровень 16, состояние 1, строка 1
Ошибка операции добавления столбца в таблице SqlhintsTemporalDemoDB. dbo.CustomerHistory, поскольку эта операция не поддерживается для темпоральных таблиц с системным управлением версиями.

Из приведенного выше результата видно, что , когда SYSTEM-VERSIONING включена, мы не можем выполнять операции DDL в таблице HISTORY, но можем добавлять индексы и ограничение по умолчанию в таблицу History .

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

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

Еще один важный момент: таблица истории по умолчанию сжата по страницам.
УДАЛИТЬ ТАБЛИЦУ dbo.Customer

РЕЗУЛЬТАТ

Сообщение 13552, уровень 16, состояние 1, строка 1
Ошибка операции удаления таблицы для таблицы SqlhintsTemporalDemoDB. dbo.Customer, поскольку эта операция не поддерживается для темпоральных таблиц с системной версией.

Из приведенного выше результата видно, что когда SYSTEM-VERSIONING включена, мы не можем удалить временную таблицу

Отключение управления версиями системы

Мы можем отключить управление версиями системы, выполнив следующую инструкцию:

ИЗМЕНИТЬ ТАБЛИЦУ dbo.Customer SET (SYSTEM_VERSIONING = OFF)
 

После выполнения приведенного выше оператора управление версиями системы будет отключено, а таблица Temporal and History станет такой же, как и любая другая обычная таблица, как показано на следующем рисунке:

Теперь попробуйте обновить столбцы Period в таблице dbo.Customer

ОБНОВЛЕНИЕ dbo.Customer
УСТАНОВИТЬ время начала = GETUTCDATE()
ГДЕ идентификатор = 1
 

РЕЗУЛЬТАТ

Сообщение 13537, уровень 16, состояние 1, строка 19
Не удается обновить столбцы GENERATED ALWAYS в таблице «SqlhintsTemporalDemoDB. dbo.Customer».

Из приведенного выше результата видно, что даже после отключения SYSTEM_VERSIONING мы не сможем обновить значения столбца PERIOD. Чтобы разрешить обновление значения столбца PERIOD, мы должны удалить определение PERIOD, выполнив следующую инструкцию 9.0005

ИЗМЕНИТЬ ТАБЛИЦУ dbo.Customer
ПЕРИОД УДАЛЕНИЯ ДЛЯ SYSTEM_TIME
 

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

ОБНОВЛЕНИЕ dbo.Customer
УСТАНОВИТЬ время начала = GETUTCDATE()
ГДЕ идентификатор = 1
 

РЕЗУЛЬТАТ

Теперь попробуйте удалить таблицы dbo.Customer и dbo.CustomerHistory, выполнив следующий скрипт:

УДАЛИТЬ ТАБЛИЦУ dbo.Customer
ИДТИ
УДАЛИТЬ ТАБЛИЦУ dbo.CustomerHistory
 

РЕЗУЛЬТАТ

Ниже приводится сценарий для удаления временных таблиц с системной версией

 -- Сначала отключите управление версиями системы
ИЗМЕНИТЬ ТАБЛИЦУ dbo.Employee
УСТАНОВИТЬ (ВЕРСИЯ_СИСТЕМЫ = ВЫКЛ.