В этом учебном пособии вы узнаете, как создавать, удалять, отключать и включать первичный ключ в PostgreSQL с синтаксисом и примерами.
Что такое первичный ключ в PostgreSQL?
В PostgreSQL первичный ключ - это отдельное поле или комбинация полей, которые однозначно определяют запись. Ни одно из полей, являющихся частью первичного ключа, не может содержать значение NULL. Таблица может иметь только один первичный ключ.
Примечание
- В PostgreSQL первичный ключ создается с помощью оператора CREATE TABLE или оператора ALTER TABLE.
- Вы используете оператор ALTER TABLE в PostgreSQL для добавления или удаления первичного ключа.
Создать первичный ключ - с помощью оператора CREATE TABLE
Вы можете создать первичный ключ в PostgreSQL с помощью оператора CREATE TABLE.
Синтаксис
Синтаксис для создания первичного ключа с помощью оператора CREATE TABLE в PostgreSQL:
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...
CONSTRAINT constraint_name
PRIMARY KEY (index_col1, index_col2,... index_col_n)
);
ИЛИ
(
column1 datatype CONSTRAINT constraint_name PRIMARY KEY,
column2 datatype [ NULL | NOT NULL ],
...
);
- table_name
- Имя таблицы, которую вы хотите создать.
- column1, column2
- Столбцы, которые вы хотите создать в таблице.
- constraint_name
- Название первичного ключа.
- index_col1, index_col2,... index_col_n
- Столбцы, составляющие первичный ключ.
Пример
Рассмотрим пример того, как создать первичный ключ, используя оператор CREATE TABLE в PostgreSQL.
( order_detail_id integer NOT NULL,
order_id integer NOT NULL,
order_date date,
quantity integer,
notes varchar(200),
CONSTRAINT order_details_pk PRIMARY KEY (order_detail_id)
);
Или вы можете также создать первичный ключ в таблице order_details, используя следующий синтаксис:
( order_detail_id integer CONSTRAINT order_details_pk PRIMARY KEY,
order_id integer NOT NULL,
order_date date,
quantity integer,
notes varchar(200)
);
В этих двух примерах мы создали первичный ключ в таблице order_details с именем order_details_pk. Он состоит только из одного столбца - столбца order_detail_id.
Мы также можем создать первичный ключ с более чем одним полем, как в примере ниже:
( order_date date NOT NULL,
customer_id integer NOT NULL,
quantity integer,
notes varchar(200),
CONSTRAINT order_details_pk PRIMARY KEY (order_date, customer_id)
);
В этом примере создается первичный ключ с именем order_details_pk, который состоит из комбинации столбцов order_date и customer_id. Таким образом, каждая комбинация order_date и customer_id должна быть уникальной в таблице order_details.
Создать первичный ключ - используя оператор ALTER TABLE
Вы можете создать первичный ключ в PostgreSQL с помощью оператора ALTER TABLE.
Синтаксис
синтаксис для создания первичного ключа с помощью оператора ALTER TABLE в PostgreSQL:
ADD CONSTRAINT [ constraint_name ]
PRIMARY KEY (index_col1, index_col2,... index_col_n)
- table_name
- Имя таблицы для изменения.
- constraint_name
- Название первичного ключа.
- index_col1, index_col2,... index_col_n
- Столбцы, составляющие первичный ключ.
Пример
Рассмотрим пример того, как создать первичный ключ, используя оператор ALTER TABLE в PostgreSQL.
ADD CONSTRAINT order_details_pk
PRIMARY KEY (order_detail_id);
В этом примере мы создали первичный ключ для существующей таблицы order_details с именем order_details_pk. Он состоит из столбца order_detail_id.
Мы также можем создать первичный ключ с более чем одним полем, как в примере ниже:
ADD CONSTRAINT order_details_pk
PRIMARY KEY (order_date, customer_id);
В этом примере мы создали первичный ключ contacts_pk, который состоит из комбинации столбцов last_name и first_name.
Удалить первичный ключ
Вы можете удалить первичный ключ в PostgreSQL, используя оператор ALTER TABLE.
Синтаксис
Синтаксис удаления первичного ключа в PostgreSQL:
DROP CONSTRAINT constraint_name;
- table_name
- Имя таблицы для изменения.
- constraint_name
- Имя первичного ключа, который вы хотите удалить.
Пример
Рассмотрим пример того, как удалить первичный ключ с помощью оператора ALTER TABLE в PostgreSQL.
DROP CONSTRAINT order_details_pk;
В этом примере мы удалили первичный ключ в таблице contacts. Нам не нужно указывать имя первичного ключа, поскольку в таблице он может быть только один.