Перейти к содержимому

Как удалить первичный ключ в базе данных

  • автор:

Удаление первичных ключей

Вы можете удалить первичный ключ в SQL Server с помощью SQL Server Management Studio или Transact-SQL.

При удалении первичного ключа удаляется и соответствующий индекс. Это может быть кластеризованный индекс таблицы, в результате чего таблица станет кучей. Дополнительные сведения см. в статье Кучи (таблицы без кластеризованных индексов). Большинство таблиц должны иметь кластеризованный индекс. Сведения о повторном создании первичного ключа см. в разделе Создание первичных ключей.

Первичные ключи могут ссылаться на внешние ключи в другой таблице. Если на внешний ключ ссылается, сначала необходимо удалить ссылки на внешние ключи, а затем удалить первичный ключ. Дополнительные сведения см. в статье Primary and Foreign Key Constraints.

Разрешения

Требуется разрешение ALTER на таблицу.

Использование SQL Server Management Studio

Удаление ограничения первичного ключа с помощью обозревателя объектов

  1. В Обозревателе объектов разверните таблицу, которая содержит первичный ключ, и разверните узел Ключи.
  2. Щелкните ключ правой кнопкой мыши и выберите команду Удалить.
  3. В диалоговом окне Удаление объекта убедитесь в том, что выбран правильный ключ, и нажмите кнопку ОК.

Удаление ограничения первичного ключа с помощью конструктора таблиц

  1. В обозревателе объектов щелкните таблицу с первичным ключом правой кнопкой мыши и выберите пункт Конструктор.
  2. В сетке таблицы щелкните правой кнопкой строку с первичным ключом и выберите пункт Удалить первичный ключ , чтобы переключить параметр.

Примечание. Чтобы отменить это действие, закройте таблицу, не сохраняя изменений. Удаление первичного ключа не может быть отменено без потери всех других изменений, сделанных в таблице.

Использование Transact-SQL

Удаление ограничения первичного ключа

  1. В обозревателе объектов подключитесь к экземпляру ядра СУБД.
  2. На стандартной панели выберите пункт Создать запрос.
  3. Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить. В этом примере сначала определяется имя ограничения первичного ключа, а затем удаляется ограничение.
USE AdventureWorks2022; GO -- Return the name of primary key. SELECT name FROM sys.key_constraints WHERE type = 'PK' AND OBJECT_NAME(parent_object_id) = N'TransactionHistoryArchive'; GO -- Delete the primary key constraint. ALTER TABLE Production.TransactionHistoryArchive DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID; GO 

Следующие шаги

  • Инструкция ALTER TABLE (Transact-SQL)
  • sys.key_constraints (Transact-SQL)
  • Кластеризованные и некластеризованные индексы

Primary Keys MySQL

В MySQL Primary Keys представляет собой одно поле или комбинацию полей, которые определяют уникальную запись. Поля, которые являются частью первичного ключа, не могут содержать значение NULL. В таблице может быть только один первичный ключ.

Примечание

  • В MySQL первичный ключ создается с помощью оператора CREATE TABLE или оператора ALTER TABLE.
  • Вы используете оператор ALTER TABLE в MySQL для удаления, отключения или включения первичного ключа.

Создание первичного ключа с использованием оператора CREATE TABLE

Вы можете создать первичный ключ в MySQL с помощью оператора CREATE TABLE.

Синтаксис

Синтаксис создания первичного ключа с использованием оператора CREATE TABLE в MySQL:

CREATE TABLE table_name
(
column1 column_definition,
column2 column_definition,
.

CONSTRAINT [constraint_name]
PRIMARY KEY [ USING BTREE | HASH ] (column_1, column_2, . column_n)
);

Параметры или аргументы

table_name — имя таблицы, которую вы хотите создать.
column1 , column2 — столбцы, которые вы хотите создать в таблице. См. MySQL оператор CREATE TABLE для более подробного синтаксиса CREATE TABLE, поскольку это чрезмерное упрощение, чтобы продемонстрировать, как создать PRIMARY KEY.
constraint_name — имя первичного ключа.
column_1 , column_2 , . column_n — колонки, составляющие первичный ключ.

Пример

Рассмотрим пример создания первичного ключа с помощью оператора CREATE TABLE в MySQL.

Как удалить первичный ключ в базе данных

Внешний ключ — это поле в одной таблице базы данных, ссылающееся на первичный ключ в другой таблице. Внешний ключ определяется как ограничение в связанном столбце таблицы базы данных.

При наличии ограничения по внешнему ключу поле должно быть либо пустым, либо значение должно указывать на существующее значение для первичного ключа в соответствующей таблице. Например, поле SiteUID в смене является внешним ключом, ссылающимся на предприятие UID . В результате значение для смены SiteUID должно быть либо пустым, либо соответствовать существующему значению UID для предприятия.

Ограничение внешнего ключа также предотвращает удаление строк в таблице базы данных, на которые ссылаются поля внешнего ключа. Например, если для смены SiteUID задано значение 5, то из-за ограничения внешнего ключа в поле SiteUID , которое ссылается на предприятие UID , предприятие UID со значением 5 не может быть удалено.

Чтобы добавить внешний ключ в существующую таблицу базы данных, выполните следующие действия:

1. Перейдите к вещи базы данных, настроенной для вашей системы, например ( PTC.SCA.SCO.PostgresDatabase или PTC.SCA.SCO.MSSQLDatabase ).

2. В разделе Сервисы выполните сервис AddForeignKey со следующими входными данными:
◦ dataShapeName : профиль данных для таблицы базы данных, в которую добавляется внешний ключ.
◦ fieldName : поле в профиле данных, в которое добавляется ограничение для внешнего ключа.
◦ referenceDataShapeName : профиль данных справочной таблицы базы данных.
◦ referenceFieldName : имя поля, содержащего ссылочное значение.
3. Щелкните Выполнить .
Чтобы удалить внешний ключ, выполните следующие действия:

Удалите только те внешние ключи, которые были добавлены ранее. Не удаляйте внешние ключи, которые определены как устаревшие.

1. Перейдите к вещи базы данных, настроенной для вашей системы, например ( PTC.SCA.SCO.PostgresDatabase или PTC.SCA.SCO.MSSQLDatabase ).

Как создать первичные и внешние ключи MySQL

В этой инструкции рассказываем про первичный и внешний ключи SQL, зачем они нужны и как их создать различными способами.

Эта инструкция — часть курса «MySQL для новичков».

Смотреть весь курс

Введение

Работа современных приложений и сложных сайтов, которыми мы привыкли пользоваться, невозможна без баз данных. Поэтому правильно настроенные БД важны для приложения не меньше, чем их дизайн и код, который с этой базой взаимодействует. Работа современных реляционных баз данных сложно представить без корректно настроенных первичных и внешних ключей. В этой инструкции мы подробно разберем создание этих ключей MySQL, расскажем для чего они нужны и как их использовать.

Облачные базы данных

Что такое первичный и внешний ключи и зачем они нужны

Начнем рассмотрение данного вопроса с двух самых главных элементов: первичного и внешнего ключей.

Первичный ключ или primary key

Первичный ключ — особенное поле в SQL-таблице, которое позволяет однозначно идентифицировать каждую запись в ней. Как правило, эти поля используются для хранения уникальных идентификаторов объектов, которые перечислены в таблице, например, это может быть ID клиента или товара.
Первичный ключ имеет несколько свойств:

  • каждая запись в таком поле должна быть уникальной;
  • запись в поле не должна быть пустой;
  • в одной таблице может быть только один ключ (существуют также составные ключи, которые могут включать в себя несколько полей, однако в этой статье мы не будем их рассматривать).

Внешний ключ или foreign key

Внешний ключ нужен для того, чтобы связать две разные SQL-таблицы между собой. Внешний ключ таблицы должен соответствует значению первичного ключа таблицы, с которой он связан. Это помогает сохранять согласованность базы данных путем обеспечения так называемой «ссылочной целостности» (referential integrity).

Давайте рассмотрим все это на примере простой базы данных. Для начала нам понадобится создать базу данных. Заходим в MySQL и создаем базу данных, в которой будут храниться записи о книгах в библиотеке:

create database slcbookshelf; 

пример БД

Так как дальше мы будем работать с этой базой, вводим команду:

use slcbookshelf; 

И создаем таблицу, в которой будут храниться записи о книгах в библиотеке:

CREATE TABLE books ( book_id INT NOT NULL, book_name VARCHAR(255) NOT NULL, book_category VARCHAR(255)); 

Создание первичного ключа при создании таблицы и с помощью ALTER TABLE

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

DESC books; 

Вывод команды будет выглядеть следующим образом:

mysql> DESC books; +---------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+-------+ | book_id | int | NO | | NULL | | | book_name | varchar(255) | NO | | NULL | | | book_category | varchar(255) | YES | | NULL | | +---------------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) 

Первичный ключ при создании таблицы

Вы можете также создать его при создании таблицы, добавив в команду для создания таблицы следующую запись:

PRIMARY KEY (book_id) 

В таком случае поле book_id после создания таблицы будет являться первичным ключом для таблицы books.

Создание первичного ключа при помощи ALTER TABLE

Если таблица уже создана, а первичный ключ в ней не указан, вы можете создать ключевое поле, с помощью команды ALTER TABLE. Команда ALTER TABLE помогает изменять уже существующие столбцы, удалять их или добавлять новые. Чтобы определить первичный ключ в поле book_id, выполните команду:

ALTER TABLE books ADD PRIMARY KEY (book_id); Проверяем: mysql> DESC books; +---------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+--------------+------+-----+---------+-------+ | book_id | int | NO | PRI | NULL | | | book_name | varchar(255) | NO | | NULL | | | book_category | varchar(255) | YES | | NULL | | +---------------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec) 

Установка внешнего ключа MySQL при создании таблицы и с помощью ALTER TABLE

Предположим, у нас есть еще одна таблица под названием authors, которую нам необходимо связать с текущей таблицей books с помощью внешнего ключа author_id.

Внешний ключ при создании таблицы

Для того, чтобы привязать к таблице внешний ключ сразу при создании таблицы, вам необходимо дополнить запрос, которым вы создаете таблицу следующей записью:

FOREIGN KEY (author_id) REFERENCES authors(author_id) 

В итоге запрос, которым создается такая таблица будет выглядеть следующим образом:

CREATE TABLE books ( book_id INT NOT NULL, book_name VARCHAR(255) NOT NULL, book_category VARCHAR(255), FOREIGN KEY (author_id) REFERENCES authors(author_id)); 

Создание внешнего ключа при помощи ALTER TABLE

Если вам нужно определить поле уже созданной таблицы в качестве внешнего ключа, вы можете воспользоваться командой ALTER TABLE и создать внешний ключ в таблице командой:

ALTER TABLE books ADD FOREIGN KEY (author_id) REFERENCES authors(author_id); 

Сценарии использования внешнего ключа

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

Каскадное удаление или CASCADE

Каскадное удаление позволит вам одновременно удалить строки из главной таблицы, а вместе с ними удалить все связанные строки в других таблицах. Задается каскадное удаление таким запросом:

CREATE TABLE Orders( Id INT PRIMARY KEY AUTO_INCREMENT, CustomerId INT, CreatedAt Date, FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE CASCADE); 

Аналогично работает метод ON UPDATE CASCADE. При попытке изменить значение, записанное в поле первичного ключа, изменение будет применено к внешнему ключу, связанному с данным полем. Этот метод используется крайне редко, так как первичные ключи практически не являются изменяемыми полями.

RESTRICT

Опция RESTRICT позволяет отклонять все запросы на изменение или удаление строк в главной таблице при условии, что в связанной таблице также имеются строки. Задается данное ограничение следующим запросом:

CREATE TABLE Orders( Id INT PRIMARY KEY AUTO_INCREMENT, Customer_Id INT, CreatedAt Date, FOREIGN KEY (Customer_Id) REFERENCES Customers (Id) ON DELETE RESTRICT); 

Заключение

В данной статье мы рассмотрели что такое первичный и внешний ключи SQL, зачем они нужны и как их создать различными способами: при создании таблицы или при помощи ALTER TABLE. Также мы рассмотрели несколько сценариев использования внешнего ключа для управления таблицами.

Как установить и использовать MySQL Workbench

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *