Оператор SQL PRIMARY KEY
Оператор SQL PRIMARY KEY (Первичный ключ) — это параметр, который устанавливается для однозначной идентификации той или иной записи в таблице. Значения SQL PRIMARY KEY должны быть всегда уникальны, а так же не содержать значений NULL.
Любая таблица обязана иметь Первичный ключ, по которому можно однозначно идентифицировать записи в ней.
Оператор SQL PRIMARY KEY имеет следующий синтаксис:
Для MySQL:
CREATE TABLE table_name ( Id int NOT NULL, PRIMARY KEY (Id) )
Для MS SQL Server, Oracle, MS Access:
CREATE TABLE table_name ( Id int NOT NULL PRIMARY KEY )
Примеры оператора SQL PRIMARY KEY. Используя оператор SQL PRIMARY KEY, по аналогии с примером 1 оператора SQL CREATE создать таблицу Planets с Первичным ключом ID:
Решение для MySQL:
CREATE TABLE Planets ( ID int NOT NULL, PlanetName varchar(10), Radius float (10), SunSeason float(10), OpeningYear int, HavingRings bit, Opener varchar(30) PRIMARY KEY (ID) )
Решение для MS SQL Server, Oracle, MS Access:
CREATE TABLE Planets ( ID int NOT NULL PRIMARY KEY, PlanetName varchar(10), Radius float (10), SunSeason float(10), OpeningYear int, HavingRings bit, Opener varchar(30) )
Создание первичных ключей
Вы можете определить первичный ключ в SQL Server с помощью SQL Server Management Studio или Transact-SQL. Создание первичного ключа автоматически приводит к созданию соответствующего уникального кластеризованного индекса (или некластеризованного при наличии такого указания).
Перед началом
Ограничения
- В таблице возможно наличие только одного ограничения по первичному ключу.
- Все столбцы с ограничением PRIMARY KEY должны иметь признак NOT NULL. Если допустимость значения NULL не указана, то для всех столбцов c ограничением PRIMARY KEY устанавливается признак NOT NULL.
Безопасность
Разрешения
Создание новой таблицы с первичным ключом требует разрешения CREATE TABLE в базе данных и разрешения ALTER на схему, в которой создается таблица.
Создание первичного ключа в существующей таблице требует разрешения ALTER на таблицу.
Использование SQL Server Management Studio
Создание первичного ключа
- В обозреватель объектов щелкните правой кнопкой мыши таблицу, к которой нужно добавить уникальное ограничение, и выберите Пункт Конструктор.
- В Designer таблицы выберите селектор строк для столбца базы данных, который необходимо определить в качестве первичного ключа. Если вы хотите выбрать несколько столбцов, удерживайте нажатой клавишу CTRL, выбирая селекторы строк для других столбцов.
- Щелкните правой кнопкой мыши средство выбора строк столбца и выберите команду Задать первичный ключ.
Чтобы переопределить первичный ключ, необходимо удалить все связи с существующим первичным ключом и только после этого создавать новый первичный ключ. Появится сообщение, предупреждающее об автоматическом удалении в ходе процесса всех существующих связей.
Ключевой столбец-источник идентифицируется символом первичного ключа в соответствующем селекторе строк.
Если первичный ключ состоит более чем из одного столбца, то в одном столбце могут встречаться дублирующиеся значения, но все сочетания значений изо всех столбцов первичного ключа должны быть уникальными.
При определении составного ключа порядок столбцов в первичном ключе совпадает с порядком столбцов, показанным в таблице. Однако после создания первичного ключа порядок столбцов можно изменить. Дополнительные сведения см. в разделе Изменение первичных ключей.
Использование Transact-SQL
Создание первичного ключа в существующей таблице
В следующем примере создается первичный ключ для столбца TransactionID в базе данных AdventureWorks.
ALTER TABLE Production.TransactionHistoryArchive ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID);
Создание первичного ключа в новой таблице
В следующем примере создается таблица и определяется первичный ключ для столбца TransactionID в базе данных AdventureWorks.
CREATE TABLE Production.TransactionHistoryArchive1 ( TransactionID int IDENTITY (1,1) NOT NULL , CONSTRAINT PK_TransactionHistoryArchive1_TransactionID PRIMARY KEY CLUSTERED (TransactionID) ) ;
Создание первичного ключа с кластеризованным индексом в новой таблице
В следующем примере создается таблица и определяется первичный ключ для столбца CustomerID и кластеризованного индекса для TransactionID в базе данных AdventureWorks.
-- Create table to add the clustered index CREATE TABLE Production.TransactionHistoryArchive1 ( CustomerID uniqueidentifier DEFAULT NEWSEQUENTIALID() , TransactionID int IDENTITY (1,1) NOT NULL , CONSTRAINT PK_TransactionHistoryArchive1_CustomerID PRIMARY KEY NONCLUSTERED (CustomerID) ) ; -- Now add the clustered index CREATE CLUSTERED INDEX CIX_TransactionID ON Production.TransactionHistoryArchive1 (TransactionID);
Дальнейшие действия
- ALTER TABLE
- CREATE TABLE
- table_constraint
PRIMARY KEY в SQL
PRIMARY KEY — первичный ключ, ограничение, позволяющее однозначно идентифицировать каждую запись в таблице SQL. PRIMARY KEY OracleПервичный Ключ (PRIMARY KEY) может ограничивать таблицы или их столбцы. Это ограничение работает так же как и ограничение UNIQUE. Но следует учитывать различие между первичными ключами и уникальностью столбцов в способе их использования с внешними ключами. Первичные ключи не могут позволять значений NULL. Это означает что, подобно полям в ограничении UNIQUE, любое поле, используемое в ограничении PRIMARY KEY, должно уже быть обьявлено NOT NULL. PRIMARY KEY Oracle. Пример №1. Пример создания таблицы SQL с ограничением PRIMARY KEY:
CREATE TABLE Student ( Kod_stud integer NOT NULL PRIMARY KEY, Fam char(30) NOT NULL UNIQUE, Adres char(50), Ball decimal);
Лучше всего помещать ограничение PRIMARY KEY в поле (или в поля), которое будет образовывать уникальный идентификатор строки, и сохранить ограничение UNIQUE для полей которые должны быть уникальными логически (такие как номера телефона или поле sname), а не для идентификации строк. Ограничение PRIMARY KEY может также быть применено для многочисленных полей, составляющих уникальную комбинацию значений: PRIMARY KEY Oracle. Пример №2.
CREATE TABLE Student ( Fam char (30) NOT NULL, Im char (30) NOT NULL Adres char (50), PRIMARY KEY (Fam, Im));
PRIMARY KEY MySQL
PRIMARY KEY SQL / MySQL. Пример №3.
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (P_Id));
PRIMARY KEY SQL / MySQL. Пример №4.
CREATE TABLE `ad_packages` ( `id` int(111) NOT NULL auto_increment, `title` varchar(132) NOT NULL default », `price` float NOT NULL default ‘0’, `type` varchar(22) NOT NULL default », `c_type` enum(‘cash’,’points’,’rur’) NOT NULL default ‘cash’, PRIMARY KEY (`id`) );
PRIMARY KEY SQL / MySQL. Пример №5.
CREATE TABLE `gamestat` ( `id` int(11) NOT NULL auto_increment, `game` varchar(10) NOT NULL default ‘tuz’, `stavok` int(11) NOT NULL default ‘0’, `usd` float NOT NULL default ‘0’, `rur` float NOT NULL default ‘0’, `point` float NOT NULL default ‘0’, `bank_usd` decimal(12,2) NOT NULL default ‘0.00’, `bank_rur` decimal(12,2) NOT NULL default ‘0.00’, `bank_point` decimal(12,2) NOT NULL default ‘0.00’, PRIMARY KEY (`id`) );
Primary Keys SQL Server
В SQL Server (Transact-SQL) первичный ключ представляет собой одно поле или комбинацию полей, которые однозначно определяют запись. Ни одно из полей, которые являются частью первичного ключа, может содержать нулевое значение. В таблице может быть только один первичный ключ.
Первичный ключ может быть определен либо оператором CREATE TABLE, либо в предложении ALTER TABLE.
Создание первичного ключа — использование оператора CREATE TABLE
Вы можете создать первичный ключ в SQL Server с помощью оператора CREATE TABLE.
Синтаксис
Синтаксис создания первичного ключа с помощью оператора CREATE TABLE в SQL Server (Transact-SQL):
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ] [ PRIMARY KEY ],
column2 datatype [ NULL | NOT NULL ],
.
);
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
.
CONSTRAINT constraint_name PRIMARY KEY (column1, column2, . column_n)
);
Пример
рассмотрим пример создания первичного ключа с помощью оператора CREATE TABLE в SQL Server (Transact-SQL). Например:
