SQLServer создает таблицу с MySQL, подобную первичному ключу auto_increment
-
01-07-2019 - |
Вопрос
Я хочу создать таблицу в SQLServer, которая добавит при вставке автоматически увеличиваемый первичный ключ.Это должен быть идентификатор с автоинкрементом, аналогичный функциональности MySQL auto_increment.(Ниже)
create table foo
(
user_id int not null auto_increment,
name varchar(50)
)
Есть ли способ сделать это без создания триггера вставки?
Решение
Вот так
create table foo
(
user_id int not null identity,
name varchar(50)
)
Другие советы
OP запросил автоматически увеличиваемый первичный ключ.Ключевое слово IDENTITY само по себе не делает столбец первичным ключом.
CREATE TABLE user
(
TheKey int IDENTITY(1,1) PRIMARY KEY,
Name varchar(50)
)
Они ответили на ваш вопрос, но я хочу добавить один совет для кого-то нового по использованию столбцов идентификаторов.Бывают случаи, когда вам приходится возвращать значение только что вставленного идентификатора, чтобы вы могли вставить его в связанную таблицу.Многие источники посоветуют вам использовать @@identity для получения этого значения.Ни при каких обстоятельствах вы никогда не должны использовать @@identity, если хотите сохранить целостность данных.Это выдаст идентификатор, созданный в триггере, если один из них будет добавлен для вставки в другую таблицу.Поскольку вы не можете гарантировать, что значение @@identity всегда будет правильным, лучше никогда не использовать @@identity .Вместо этого используйте scope_identity(), чтобы получить это значение.Я знаю, что это немного не по теме, но это важно для вашего понимания того, как использовать identity с SQL Server.И поверьте мне, вы не хотели устранять проблему, связанную с тем, что связанным записям было присвоено неправильное идентификационное значение.Это то, что может незаметно пойти не так в течение нескольких месяцев, прежде чем будет обнаружено, и практически невозможно исправить данные впоследствии.
Как уже упоминали другие:добавьте атрибут IDENTITY в столбец и сделайте его первичным ключом.
Существуют, однако, различия между ИДЕНТИФИКАТОРОМ MSSQL и AUTO_INCREMENT MySQL:
- MySQL требует, чтобы для столбца
AUTO_INCREMENT было определено уникальное
ограничение (часто в форме
первичного ключа).
В MSSQL нет такого требования. - MySQL позволяет вам вручную вставлять значения в столбец AUTO_INCREMENT.
В MSSQL мешает вам вводить вручную значение в тождество колонки;при необходимости вы можете переопределить это, выполнив команду "SET IDENTITY_INSERT tablename ON" перед вставкой. - MySQL позволяет вам обновлять значения в столбце AUTO_INCREMENT.
MSSQL отказывается обновлять значения в столбце IDENTITY.
Просто установите поле в качестве поле идентификации.
объявите поле идентификатором
Как было рекомендовано выше, используйте поле ИДЕНТИФИКАЦИИ.
CREATE TABLE foo
(
user_id int IDENTITY(1,1) NOT NULL,
name varchar(50)
)
Как уже говорили другие, просто установите параметр Идентификации.