🔍 Что такое no action sql и как его использовать

No Action в SQL означает, что при выполнении операции DELETE или UPDATE никаких дополнительных действий не предпринимается.

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

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


CREATE TABLE Orders (
    order_id INT PRIMARY KEY,
    product_id INT,
    quantity INT,
    FOREIGN KEY (product_id) 
        REFERENCES Products(product_id) 
        ON DELETE NO ACTION
);

В этом примере, при попытке удалить запись из таблицы Products, если существуют связанные записи в таблице Orders, операция удаления не будет выполнена.

Детальный ответ

Что такое NO ACTION в SQL?

NO ACTION - это одно из ключевых слов, которое может использоваться в операторе ALTER TABLE для установки действия, которое должно произойти при удалении или обновлении родительской записи, на которую ссылаются дочерние записи в другой таблице.

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

Давайте рассмотрим пример:


CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE NO ACTION ON UPDATE NO ACTION
);

CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(50)
);

В этом примере у нас есть две таблицы - employees (сотрудники) и departments (отделы). Связь между ними установлена с помощью внешнего ключа department_id в таблице employees, который ссылается на первичный ключ department_id в таблице departments.

Теперь, если вы попытаетесь удалить или обновить запись в таблице departments, на которую ссылаются записи в таблице employees, то действия, указанные после NO ACTION, будут выполнены. В данном случае, поскольку действие NO ACTION указано как действие при удалении и обновлении, никаких действий не будет предприниматься, и будет сгенерирована ошибка.

Вместо NO ACTION также можно использовать другие действия:

  • CASCADE: При удалении или обновлении родительской записи также удаляются или обновляются дочерние записи.
  • SET NULL: При удалении или обновлении родительской записи значения во всех дочерних записях, которые ссылаются на удаленную или обновленную запись, устанавливаются в NULL.
  • SET DEFAULT: При удалении или обновлении родительской записи значения во всех дочерних записях, которые ссылаются на удаленную или обновленную запись, устанавливаются в значения по умолчанию (default).

Вот пример использования действия CASCADE:


CREATE TABLE employees (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE CASCADE ON UPDATE CASCADE
);

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

Теперь вы знаете, что такое NO ACTION в SQL и как его использовать при установке действий при удалении или обновлении родительской записи.

Видео по теме

Constraints в SQL

NoSQL простым языком: что это и зачем нужно?

Что такое NoSQL за 6 минут

Похожие статьи:

Как проверить работоспособность триггера в SQL: подробное руководство для начинающих

🔍 Что такое no action sql и как его использовать

Что значит INSERT SQL: подробное объяснение и примеры использования