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

Как удалить триггер sqlite

  • автор:

Как удалить триггер sqlite

В момент удаления записи (команда DELETE) срабатывает триггер удаления. Так же он сработает и при удалении записи клиентом на основе ADO или других технологий доступа к БД. Можно создавать триггер и только на удаление.

CREATE TRIGGER DELETE_CAR ON dbo.allcar FOR DELETE AS

Он будет отображаться специальным значком.

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

CREATE TRIGGER DELETE_CAR ON dbo.allcar FOR DELETE AS SELECT * FROM deleted

Давайте запретим удалять автомобили с типом 2, то есть легковые.

CREATE TRIGGER DELETE_CAR ON dbo.allcar FOR DELETE AS IF (SELECT COUNT(*) FROM deleted WHERE deleted.type=2)>0 BEGIN ROLLBACK TRANSACTION END

Мы здесь написали, если количество удаляемых записей в таблицу deleted с типом 2 больше чем 0 (то есть они есть, то надо запретить удаление). Вот тут нас ждут интересные веши. Например, если клиент ACCESS, то он удаляет запись и больше ее не показывает в таблице.

Но стоит сделать любую операцию, которая обновляет записи, например, сортировку, как она тут же появляется снова.

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

DROP TRIGGER MySQL

После того как вы создали триггер в MySQL, вам может понадобиться удалить его из базы данных. Вы можете сделать это с помощью команды DROP TRIGGER.

Синтаксис

Синтаксис drop trigger в MySQL:

DROP TRIGGER trigger_name;

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

trigger_name — наименование триггера, который вы хотите удалить.

Примечание

  • Смотрите также: как создать триггеры AFTER DELETE, AFTER INSERT, AFTER UPDATE, BEFORE DELETE, BEFORE INSERT, и BEFORE UPDATE.

Пример

Рассмотрим пример, как удалить триггер в MySQL.
Например:

УДАЛИТЬ ТРИГГЕР

После того как вы создали триггер в Oracle, вам может понадобиться удалить его из базы данных. Вы можете сделать это с помощью команды DROP TRIGGER.

Синтаксис

DROP TRIGGER имя_триггера;

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

имя_триггера наименование триггера, который вы хотите удалить.

Примечание

  • Смотрите также: как создать триггеры AFTER DELETE, AFTER INSERT, AFTER UPDATE, BEFORE DELETE, BEFORE INSERT, и BEFORE UPDATE.

Пример

DROP TRIGGER orders_before_insert;

Этот пример показывает как удалить триггер orders_before_insert с помощью команды DROP TRIGGER.

DROP TRIGGER (Transact-SQL)

Удаляет один или более триггеров DML или DDL из текущей базы данных.

Синтаксис

-- Trigger on an INSERT, UPDATE, or DELETE statement to a table or view (DML Trigger) DROP TRIGGER [ IF EXISTS ] [schema_name.]trigger_name [ . n ] [ ; ] -- Trigger on a CREATE, ALTER, DROP, GRANT, DENY, REVOKE or UPDATE statement (DDL Trigger) DROP TRIGGER [ IF EXISTS ] trigger_name [ . n ] ON < DATABASE | ALL SERVER >[ ; ] -- Trigger on a LOGON event (Logon Trigger) DROP TRIGGER [ IF EXISTS ] trigger_name [ . n ] ON ALL SERVER 

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

IF EXISTS
Область применения: SQL Server (SQL Server 2016 (13.x) до текущей версии, База данных SQL).

Условное удаление триггера только в том случае, если он уже существует.

schema_name
Имя схемы, которой принадлежит триггер DML. Действие триггеров DML ограничивается областью схемы таблицы или представления, для которых они созданы. Аргумент schema_name не может указываться для триггеров DDL или триггеров входа.

trigger_name
Имя удаляемого триггера. Чтобы просмотреть список только что созданных триггеров, см. sys.server_assembly_modules или sys.server_triggers.

DATABASE
Обозначает область действия триггера DDL в текущей базе данных. Если при создании или изменении триггера был указан аргумент DATABASE, то он должен указываться и далее.

ALL SERVER
Применимо: SQL Server 2008 (10.0.x) и более поздних версий.

Обозначает область действия триггера DDL на текущем сервере. Если при создании или изменении триггера был указан аргумент ALL SERVER, то он должен указываться и далее. Параметр ALL SERVER также применяется к триггерам входа.

Этот параметр недоступен в автономной базе данных.

Замечания

Триггер DML может быть удален напрямую или в результате удаления таблицы триггера. При удалении таблицы удаляются все связанные с ней триггеры.

При удалении триггера соответствующие данные в представлениях каталогов sys.objects, sys.triggers и sys.sql_modules также удаляются.

С помощью инструкции DROP TRIGGER сразу несколько триггеров DDL можно удалить только в том случае, если при их создании были использованы одинаковые предложения ON.

Чтобы переименовать триггер, используйте инструкции DROP TRIGGER и CREATE TRIGGER. Чтобы изменить определение триггера, используйте инструкцию ALTER TRIGGER.

Дополнительные сведения о просмотре текста триггеров см. в статьях sp_helptext (Transact-SQL) и sys.sql_modules (Transact-SQL).

Дополнительные сведения о просмотре списка существующих триггеров см. в статьях sys.triggers (Transact-SQL) и sys.server_triggers (Transact-SQL).

Разрешения

Чтобы удалить триггер DML, необходимо разрешение ALTER для таблицы или представления, в которых определен данный триггер.

Чтобы удалить триггер входа или триггер DDL, определенный в области сервера (ON ALL SERVER), для этого сервера требуется разрешение CONTROL SERVER. Чтобы удалить триггер DDL, определенный в области базы данных (ON DATABASE), необходимо разрешение ALTER ANY DATABASE DDL TRIGGER для текущей базы данных.

Примеры

А. Удаление триггера DML

В следующем примере триггер удаляется employee_insupd в базе данных AdventureWorks2022. (Начиная с версии SQL Server 2016 (13.x) можно использовать синтаксис DROP TRIGGER IF EXISTS.)

IF OBJECT_ID ('employee_insupd', 'TR') IS NOT NULL DROP TRIGGER employee_insupd; 

B. Удаление триггера DDL

В ходе выполнения следующего примера происходит удаление триггера DDL safety .

Функция OBJECT_ID не может быть использована для выяснения факта существования в базе данных триггеров DDL, так как они не относятся к области схемы и данные о них не заносятся в каталог sys.objects. Запросы на объекты, не относящиеся к области схемы, должны выполняться при помощи соответствующих представлений каталогов. Для триггеров DDL используйте sys.triggers.

DROP TRIGGER safety ON DATABASE; 

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

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