sql server автоинкрементное поле
CREATE TABLE (Transact-SQL) IDENTITY (Свойство)
Создает в таблице столбец идентификаторов. Это свойство указывается в инструкциях языка Transact-SQL CREATE TABLE и ALTER TABLE.
Свойство IDENTITY отличается от свойства Identity распределенных управляющих объектов SQL (SQL-DMO), обеспечивающего доступ к свойству идентификаторов строк в столбцах.
Синтаксические обозначения в Transact-SQL
Синтаксис
Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
seed
Значение, присваиваемое самой первой строке, загружаемой в таблицу.
increment
Значение приращения, которое прибавляется к значению идентификатора предыдущей загруженной строки.
В Azure Synapse Analytics значения для удостоверения не являются добавочными из-за распределенной архитектуры хранилища данных. Дополнительные сведения см. в статье Использование свойства IDENTITY для создания суррогатных ключей в пуле Synapse SQL.
Необходимо указывать либо оба аргумента (и seed, и increment), либо не указывать ни одного из них. Если ничего не указано, применяется значение по умолчанию (1,1).
Remarks
Столбцы идентификаторов можно использовать для формирования значений ключей. Свойство идентификаторов столбца гарантирует следующее.
Каждое новое значение будет сформировано на основе текущих аргументов seed и increment.
Каждое новое значение для определенной транзакции будет отлично от других параллельных транзакций для таблицы.
Свойство идентификаторов столбца не гарантирует следующее.
Azure Synapse Analytics не поддерживает ограничения PRIMARY KEY или UNIQUE либо индекс UNIQUE. Дополнительные сведения см. в статье Использование свойства IDENTITY для создания суррогатных ключей в пуле Synapse SQL.
Последовательные значения в пределах транзакции ― при вставке транзакцией нескольких строк не гарантируется, что для них будут назначены последовательные значения. Это связано с тем, что в таблице могут выполняться другие параллельные операции вставки. Если значения должны быть последовательными, то транзакция должна использовать монопольную блокировку для таблицы или уровень изоляции SERIALIZABLE.
Повторное использование значений — свойства идентификаторов, созданные конкретным свойством идентификатора с заданными аргументами seed и increment, не используются повторно подсистемой. Если определенная инструкция вставки завершается с ошибкой или производится ее откат, использованные значения идентификаторов не будут созданы повторно. Это может привести к появлению пропусков при создании последующих значений идентификаторов.
Эти ограничения были созданы намеренно и предназначены для повышения производительности, поскольку они являются допустимыми во многих типичных ситуациях. Если из-за этих ограничений невозможно использовать значения идентификаторов, рекомендуется создать отдельную таблицу, содержащую текущее значение, управление доступом к которой и назначение чисел будет выполняться приложением.
Если таблица со столбцом идентификаторов опубликована для репликации, этот столбец должен обслуживаться в соответствии с типом репликации. Дополнительные сведения см. в статье Репликация столбцов идентификаторов.
Для каждой таблицы можно создать только один столбец идентификаторов.
В таблицах, оптимизированных для памяти, в качестве начального значения и значения приращения должно быть задано 1,1. Установка для параметров seed или increment значения, отличного от 1, приводит к следующей ошибке: «Использование для параметров seed и increment значений, отличных от 1, не поддерживается в таблицах, оптимизированных для памяти».
Примеры
A. Свойство IDENTITY в инструкции CREATE TABLE
В следующем примере производится создание новой таблицы со свойством IDENTITY для получения автоматически увеличивающегося идентификационного номера.
Б. Базовый синтаксис для поиска промежутков в нумерации идентификаторов
Следующий пример демонстрирует базовый синтаксис для поиска разрывов в нумерации идентификаторов, возникающих при удалении данных.
SQL AUTO INCREMENT Поле
Поле автоматического приращения
Автоматическое приращение позволяет автоматически генерировать уникальный номер при вставке новой записи в таблицу.
Часто это поле первичного ключа, которое мы хотели бы создать автоматически каждый раз при вставке новой записи.
Синтаксис для MySQL
Следующая инструкция SQL определяет столбец «ID», который будет автоматически увеличивать поле первичного ключа в таблице «лица»:
MySQL использует ключевое слово ауто_инкремент для выполнения функции автоматического приращения.
По умолчанию начальное значение для ауто_инкремент равно 1, и оно будет увеличиваться на 1 для каждой новой записи.
Чтобы позволить ауто_инкремент последовательности начать с другого значения, используйте следующую инструкцию SQL:
Чтобы вставить новую запись в таблицу «персоны», нам не нужно будет указывать значение для «ID» столбец (уникальное значение будет добавлено автоматически):
Вышеприведенная инструкция SQL вставит новую запись в таблицу «персоны». Столбцу «ID» присваивается уникальное значение. В столбце «имя» будет установлено значение «Ларс», а в столбце «Фамилия» будет установлено значение «Монсен Сотрудник IIP».
Синтаксис для SQL Server
Следующая инструкция SQL определяет столбец «ID», который будет автоматически увеличивать поле первичного ключа в таблице «лица»:
Сервер MS SQL использует ключевое слово Identity для выполнения функции автоматического приращения.
В приведенном выше примере начальное значение Identity равно 1, и оно будет увеличиваться на 1 для каждой новой записи.
Совет: Чтобы указать, что столбец «ID» должен начинаться со значения 10 и увеличиваться на 5, измените его на Identity (10, 5).
Чтобы вставить новую запись в таблицу «персоны», нам не нужно будет указывать значение для столбца «ID» (уникальное значение будет добавлено автоматически):
The SQL statement above would insert a new record into the «Persons» table. The «ID» column would be assigned a unique value. The «FirstName» column would be set to «Lars» and the «LastName» column would be set to «Monsen».
Синтаксис для доступа
Следующая инструкция SQL определяет столбец «ID», который будет автоматически увеличивать поле первичного ключа в таблице «лица»:
Для выполнения функции автоматического приращения используется ключевое слово автоприращение.
По умолчанию начальное значение для автоприращения равно 1, и оно будет увеличиваться на 1 для каждой новой записи.
Совет: Чтобы указать, что столбец «ID» должен начинаться со значения 10 и увеличиваться на 5, измените автоприращение на автоприращение (10, 5).
Чтобы вставить новую запись в таблицу «персоны», нам не нужно будет указывать значение для столбца «ID» (уникальное значение будет добавлено автоматически):
Вышеприведенная инструкция SQL вставит новую запись в таблицу «персоны». Столбцу «п_ид» присваивается уникальное значение. В столбце «имя» будет установлено значение «Ларс», а в столбце «Фамилия» будет установлено значение «Монсен Сотрудник IIP».
Синтаксис для Oracle
В Oracle код немного сложнее.
Вам придется создать поле с автоматическим приращением с помощью объекта Sequence (этот объект генерирует номерную серию).
Используйте следующий синтаксис создания последовательности:
Приведенный выше код создает объект Sequence с именем сек_персон, начинающийся с 1 и увеличивающийся на 1. Он также будет кэшировать до 10 значений для производительности. Параметр cache указывает, сколько значений последовательности будет сохранено в памяти для более быстрого доступа.
Чтобы вставить новую запись в таблицу «персоны», мы должны будем использовать функцию NEXTVAL (Эта функция извлекает следующее значение из последовательности сек_персон):
Вышеприведенная инструкция SQL вставит новую запись в таблицу «персоны». Столбцу «ID» присваивается следующий номер из последовательности сек_персон. В столбце «имя» будет установлено значение «Ларс», а в столбце «Фамилия» будет установлено значение «Монсен Сотрудник IIP».
поле SQL AUTO ИНКРЕМЕНТ
Автоинкрементная в новой записи будет генерировать уникальный номер в таблицу во.
Поле AUTO ИНКРЕМЕНТ
Как правило, мы хотим, чтобы вставить новую запись каждый раз, автоматически создает значение поля первичного ключа.
Мы можем создать поле Автоинкрементная в таблице.
Синтаксис для MySQL
Следующий SQL заявление «Лица» таблицы в столбце «ИД» определяется как поля первичного ключа автоинкрементируемого:
MySQL использует ключевое слово AUTO_INCREMENT для выполнения автоинкрементным.
По умолчанию начальное значение AUTO_INCREMENT равно 1, и увеличивается на 1 для каждой новой записи.
Пусть последовательность AUTO_INCREMENT начать с другого значения, используйте следующий синтаксис SQL:
Для того, чтобы вставить новую запись в таблице «Лица», мы не должны «ID» столбец заранее заданное значение (автоматически добавляет уникальное значение):
SQL выше утверждение будет вставить новую запись в таблице «Лица». колонка «ID» присваивается уникальное значение. Колонка «FirstName» будет установлен в положение «Ларс», колонка «LastName» будет установлен в положение «MONSEN».
Синтаксис для SQL Server
Следующий SQL заявление «Лица» таблицы в столбце «ИД» определяется как поля первичного ключа автоинкрементируемого:
MS SQL Server, используя ключевое слово IDENTITY выполнить Автоинкрементная.
В приведенном выше примере, начало значение тождественности равно 1, и увеличивается на 1 для каждой новой записи.
Совет: Чтобы указать столбец «ID» к исходным шагом 10 и 5, пожалуйста идентичность персонами (10,5).
Для того, чтобы вставить новую запись в таблице «Лица», мы не должны «ID» столбец заранее заданное значение (автоматически добавляет уникальное значение):
SQL выше утверждение будет вставить новую запись в таблице «Лица». колонка «ID» присваивается уникальное значение. Колонка «FirstName» будет установлен в положение «Ларс», колонка «LastName» будет установлен в положение «MONSEN».
Синтаксис для доступа
Следующий SQL заявление «Лица» таблицы в столбце «ИД» определяется как поля первичного ключа автоинкрементируемого:
MS Access, используя ключевое слово AUTOINCREMENT выполнить Автоинкрементная.
По умолчанию начальное значение AUTOINCREMENT равно 1, и увеличивается на 1 для каждой новой записи.
Для того, чтобы вставить новую запись в таблице «Лица», мы не должны «ID» столбец заранее заданное значение (автоматически добавляет уникальное значение):
SQL выше утверждение будет вставить новую запись в таблице «Лица». колонка «ID» присваивается уникальное значение. Колонка «FirstName» будет установлен в положение «Ларс», колонка «LastName» будет установлен в положение «MONSEN».
Синтаксис для Oracle
В Oracle, код немного сложнее.
Необходимо создать Автоинкрементная поля от объекта последовательности (который генерирует последовательность цифр).
Пожалуйста, используйте следующий синтаксис CREATE SEQUENCE:
Приведенный выше код создает объект последовательности под названием seq_person, который, начиная с 1 и увеличивается на 1. Значения кэша объектов 10 для повышения производительности. Кэш опция обеспечивает быстрый доступ к числу значений последовательности, которые будут сохранены.
Для того, чтобы вставить новую запись в таблице «Лица», мы должны использовать NEXTVAL функцию (эта функция возвращает следующее значение из последовательности seq_person):
SQL выше утверждение будет вставить новую запись в таблице «Лица». столбец «ID» присвоен следующий номер в последовательности из seq_person. Колонка «FirstName» будет установлен в положение «Ларс», колонка «LastName» будет установлен в положение «MONSEN».
BestProg
Данная тема базируется на предыдущих темах:
Поиск на других ресурсах:
Содержание
Условие задачи
В задаче нужно сделать поле ID_Source уникальным счетчиком. При добавлении новой записи в таблицу, значение поля должно увеличиваться на 1 (автоинкрементное поле), то есть быть уникальным.
Выполнение
После подключения базы данных в окне Server Explorer будет отображена база данных «MyDataBase.mdf» (рисунок 1).
База данных содержит одну таблицу Source (рисунок 2), которая содержит поля в соответствии с условием задачи.
Рис. 1. База данных MyDataBase.mdf в окне Server Explorer
Рис. 2. Таблица Source
2. Настройка поля ID_Source как счетчика. Свойство «Identity Column»
В соответствии с условием задачи поле ID_Source может быть уникальным. Современные базы данных поддерживают уникальность полей. Это означает, что при добавлении новой записи в базу данных автоматически формируется новое уникальное значение. Как правило, при добавлении новой записи для целого типа новое уникальное значение увеличивается на 1 относительно предшествующего уникального значения (необязательно). Невозможно изменить вручную или программно значение записей поля, которое есть счетчиком (уникальным значением). Всю эту работу берет на себя система управления базами данных.
Чтобы установить поле ID_Source уникальным, нужно выполнить следующие действия:
Рис. 3. Команда «Open Table Definition»
Рис. 4. Установление свойства Identity Column в значение ID_Source
После выполненных действий поле ID_Source будет автоматически генерировать уникальное целочисленное значение.
Теперь эту таблицу можно использовать в своих проектах.
3. Заполнение таблицы данными
После установлки в таблице поля ID_Source как уникального счетчика можно программно или вручную заполнять таблицу данными (записями).
Чтобы заполнить таблицу данными (записями) нужно выполнить следующие действия:
Рис. 5. Команда «Show Table Data»
Рис. 6. Ввод данных в таблицу Source
SQL Server, как установить автоинкремент после создания таблицы без потери данных?
У меня есть таблица table1 в SQL Server 2008, и в нем есть записи.
Я хочу, чтобы столбец первичного ключа table1_Sno был автоинкрементным столбцом. Можно ли это сделать без передачи данных или клонирования таблицы?
Я знаю, что могу использовать ALTER TABLE для добавления столбца с автоинкрементом, но могу ли я просто добавить параметр AUTO_INCREMENT в существующий столбец, который является первичным ключом?
Пример кода.
Измените его на столбец identity (более или менее мгновенный).
Проверьте результат.
Убирать
SQL Server: как установить автоинкремент для таблицы со строками в ней:
Эта стратегия физически копирует строки дважды, что может занять гораздо больше времени, если копируемая таблица очень большая.
Вы можете сохранить свои данные, удалить и перестроить таблицу с автоинкрементом и первичным ключом, а затем загрузить данные обратно.
Я расскажу вам пример:
Шаг 1, создайте таблицу foobar (без первичного ключа или автоинкремента):
Шаг 2, вставьте несколько строк
Шаг 3, скопируйте данные foobar во временную таблицу:
Шаг 4, удалить таблицу foobar:
Шаг 5, воссоздайте вашу таблицу с первичным ключом и свойствами автоинкремента:
Шаг 6, вставьте ваши данные из временной таблицы обратно в foobar
Шаг 7, удалите временную таблицу и проверьте, работает ли она:
Вы должны получить это, и когда вы проверяете таблицу foobar, столбец id имеет автоинкремент 1, а id является первичным ключом: