Як створити складений первинний ключ у SQL Server 2008


178

Я хочу створити таблиці в SQL Server 2008, але я не знаю, як створити складений первинний ключ. Як я можу цього досягти?


1
Щойно ви новачок у asp.net, рада: Композиційні первинні ключі - це погана річ, яка зазвичай вказує на погано продуманий дизайн
smirkingman

47
@smirkingman Дуже важливі проблеми можна вирішити, часто майже виключно за допомогою складених первинних ключів. Наприклад, коли у вас є сотні / тисячі користувачів, які зберігають рядки в одну таблицю / тип сутності. Ви хочете, щоб рядки були упорядковані користувальницьким ідентифікатором, плюс потім друге значення. Ваше судження про цінність є просто неправильним, якщо ні, ми б знецінили цю функцію найближчим часом.
Ніколас Петерсен

Відповіді:


243
create table my_table (
     column_a integer not null,
     column_b integer not null,
     column_c varchar(50),
     primary key (column_a, column_b)
);

2
Яка різниця між використанням первинного ключа та CONSTRAINT, як у прикладі від @ matthew-abbott?
mateuscb

28
Це створює іменований обмеження, яке можна видалити / оновити за ім'ям
longhairedsi

14
Не зовсім правда. Обидва створюють "названі обмеження". Просто з першим ви не керуєте називанням. Але після створення можна знайти ім’я, яке було використано, та видалити / оновити на ім'я ...
Auspex

170
CREATE TABLE UserGroup
(
  [User_Id] INT NOT NULL,
  [Group_Id] INT NOT NULL

  CONSTRAINT PK_UserGroup PRIMARY KEY NONCLUSTERED ([User_Id], [Group_Id])
)

34
+1 - Так, називайте людей обмеженнями, інакше сервер Sql робить такі неприємні речі, як імена їх PK_UserGrou_5DEAEAF5 в БД одного випуску та PK_UserGrou_3214EC0777F66C69 в іншому. Це біль, якщо вам потрібно оновити або відкинути ПК, оскільки вам потрібно спочатку отримати ім'я від db, а потім використовувати динамічний sql (або спочатку побудувати команду в коді). Також некрасиво.
монт

2
Чи є якась причина, щоб я не хотів, щоб мій ПК був кластеризований?
ранку

1
@ 4AM Це може відповісти на ваше запитання: посилання
Dongminator

52

Через Enterprise Manager (SSMS) ...

  • Клацніть правою кнопкою миші на таблиці, на якій потрібно створити складений ключ, і виберіть Дизайн .
  • Виділіть стовпці, які ви хочете сформувати, як складений ключ
  • Клацніть правою кнопкою миші на цих стовпцях і встановіть первинний ключ

Для того, щоб побачити SQL ви можете правою кнопкою миші на Table> Script Table As>Create To


2
Дякую. Це найбезпечніший / найпростіший спосіб без того, щоб потенційно зіпсувати мій синтаксис SQL
AlbatrossCafe,

1
Це полегшує тим, хто хоче швидко виправити через інтерфейс дизайну / наведення. Дякую за допомогу.
Тревор Нестман

32

Я знаю, що я спізнююсь на цю вечірку, але для існуючої таблиці спробуйте:

ALTER table TABLE_NAME
ADD CONSTRAINT [name of your PK, e.g. PK_TableName] PRIMARY KEY CLUSTERED (column1, column2, etc.)

27

Для MSSQL Server 2012

CREATE TABLE usrgroup(
  usr_id int FOREIGN KEY REFERENCES users(id),
  grp_id int FOREIGN KEY REFERENCES groups(id),

  PRIMARY KEY (usr_id, grp_id)
)

ОНОВЛЕННЯ

Я повинен додати!

Якщо ви хочете додати зміни іноземних / первинних ключів, спочатку слід створити ключі з обмеженнями, або ви не можете внести зміни. Як ось нижче:

CREATE TABLE usrgroup(
  usr_id int,
  grp_id int,

  CONSTRAINT FK_usrgroup_usrid FOREIGN KEY (usr_id) REFERENCES users(id),
  CONSTRAINT FK_usrgroup_groupid FOREIGN KEY (grp_id) REFERENCES groups(id),

  CONSTRAINT PK_usrgroup PRIMARY KEY (usr_id,grp_id)
)

Насправді останній спосіб є здоровішим і серійним. Ви можете подивитися імена обмежень FK / PK (dbo.dbname> Ключі> ..), але якщо ви не використовуєте обмеження, MSSQL автоматично створює випадкові імена FK / PK. Вам потрібно буде переглянути кожну необхідну вам зміну (таблицю змін).

Я рекомендую встановити для себе стандарт; обмеження слід визначати відповідно до вашого стандарту. Вам не доведеться запам’ятовувати і вам не доведеться думати занадто довго. Словом, ти працюєш швидше.


це не створює ПК, але тільки ФК, чи не так?
batmaci

@batmaci; Ні, це як ФК, так і подвійна група ФК до ПК. Це використання є здоровішим. Раджу. Якщо ви не створюєте ПК, ви можете також використовувати.
Fatih Mert Doğancan

1

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



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.