SqlServer создает таблицу с MySql как первичный ключ auto_increment - PullRequest
11 голосов
/ 17 сентября 2008

Я хочу создать таблицу в SqlServer, в которую при вставке будет добавлен первичный ключ с автоинкрементом. Это должен быть автоинкрементный идентификатор, аналогичный функциональности MySql auto_increment. (Ниже)

create table foo  
(  
user_id int not null auto_increment,  
name varchar(50)  
)  

Есть ли способ сделать это без создания триггера вставки?

Ответы [ 8 ]

21 голосов
/ 17 сентября 2008

Как это

create table foo  
(  
user_id int not null identity,  
name varchar(50)  
)
9 голосов
/ 28 октября 2008

Они ответили на ваш вопрос, но я хочу добавить один совет для новичка в использовании столбцов идентификации. Бывают случаи, когда вам нужно вернуть значение идентификатора, только что вставленного, чтобы вы могли вставить его в связанную таблицу. Многие источники скажут вам использовать @@ identity, чтобы получить это значение. Ни при каких обстоятельствах вы не должны использовать @@ identity, если хотите сохранить целостность данных. Это даст идентификатор, созданный в триггере, если один из них будет добавлен для вставки в другую таблицу. Поскольку вы не можете гарантировать, что значение @@ identity всегда будет правильным, лучше никогда не использовать @@ identity. Используйте scope_identity (), чтобы получить это значение. Я знаю, что это немного не по теме, но важно, чтобы вы понимали, как использовать идентичность с SQL Server. И поверьте мне, вы не хотели решать проблему связанных с ними записей, имеющих неверное значение идентификатора. Это то, что может тихо пойти не так в течение нескольких месяцев, прежде чем это будет обнаружено, и почти невозможно впоследствии исправить данные.

9 голосов
/ 17 сентября 2008

OP запросил автоинкрементный первичный ключ. Ключевое слово IDENTITY само по себе не делает столбец первичным ключом.

CREATE TABLE user
(
  TheKey int IDENTITY(1,1) PRIMARY KEY,
  Name varchar(50)
)
4 голосов
/ 17 сентября 2008

Как уже упоминали другие: добавьте атрибут IDENTITY в столбец и сделайте его первичным ключом.

Однако существуют различия между IDENTITY MSSQL и AUTO_INCREMENT MySQL:

  • MySQL требует, чтобы уникальный ограничение (часто в форме первичный ключ) должен быть определен для Столбец AUTO_INCREMENT.
    В MSSQL такого требования нет.
  • MySQL позволяет вручную вставлять значения в столбец AUTO_INCREMENT.
    MSSQL не позволяет вам вручную вставить значение в IDENTITY колонка; при необходимости вы можете переопределить это путем выдачи "SET IDENTITY_INSERT имя таблицы включено " Команда перед вставкой.
  • MySQL позволяет обновлять значения в столбце AUTO_INCREMENT.
    MSSQL отказывается обновлять значения в Столбец IDENTITY.
2 голосов
/ 17 сентября 2008

Просто установите поле как поле идентификации .

1 голос
/ 17 сентября 2008

Как указано выше, используйте поле IDENTITY.

CREATE TABLE foo
(
user_id int IDENTITY(1,1) NOT NULL,
name varchar(50)
)
1 голос
/ 17 сентября 2008

объявить поле идентичным

0 голосов
/ 17 сентября 2008

Как уже говорили другие, просто установите опцию Identity.

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