English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Los desencadenadores (Trigger) de SQLite son funciones de retroalimentación de base de datos, que se ejecutan automáticamente cuando ocurren eventos de base de datos especificados/Llame a estas funciones. A continuación se presentan los puntos clave sobre los desencadenadores (Trigger) de SQLite-
Los desencadenadores (Trigger) de SQLite pueden especificarse para activarse en respuesta a DELETE, INSERT o UPDATE en una tabla de base de datos específica, o cuando se actualizan una o más columnas en una o más tablas especificadas.
SQLite solo admite desencadenadores (Trigger) de FOR EACH ROW, no hay desencadenadores (Trigger) de FOR EACH STATEMENT. Por lo tanto, la especificación clara de FOR EACH ROW es opcional.
La cláusula WHEN y la acción del gatillo (Trigger) pueden acceder a las formas utilizadas NEW.column-name Y OLD.column-name El elemento de la fila insertada, eliminada o actualizada, donde column-name es el nombre de la columna de la tabla con la que el gatillo está asociado.
Si se proporciona una cláusula WHEN, solo se ejecutan las instrucciones SQL para las filas para las que la cláusula WHEN es verdadera. Si no se proporciona la cláusula WHEN, se ejecutan las instrucciones SQL para todas las filas.
Las palabras clave BEFORE o AFTER deciden cuándo se ejecuta la acción del gatillo, decidiendo si se ejecuta antes o después de la inserción, modificación o eliminación de las filas asociadas.
Al eliminar la tabla con la que el gatillo está asociado, se elimina automáticamente el gatillo (Trigger).
La tabla que se va a modificar debe existir en la misma base de datos, como tabla o vista al que se adjunta el gatillo, y debe usar solo tablename,en lugar de database.tablename。
Una función especial de SQL RAISE() se puede usar para lanzar excepciones dentro de programas de gatillos.
La siguiente es la sintaxis básica para crear un gatillo.
CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name ON table_name BEGIN -- La lógica del gatillo... END;
Aquí,event_namePueden ser eventos para las tablasINSERT, DELETEYUPDATEOperaciones de base de datostable_name。Puede especificar FOR EACH ROW después del nombre de la tabla.
La siguiente es la sintaxis para crear un gatillo en una o más columnas específicas de una tabla.
CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name ON table_name BEGIN -- La lógica del gatillo aquí... END;
Consideremos una situación en la que deseamos auditar cada registro insertado en la tabla COMPANY, que acabamos de crear (si ya existía, se elimina la tabla COMPANY).
sqlite> CREATE TABLE COMPANY, ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
Para mantener el estado de prueba de auditoría, siempre que haya nuevas entradas de registros en la tabla COMPANY, crearemos una nueva tabla llamada AUDIT donde insertaremos los mensajes de registro.
sqlite> CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL );
Aquí, ID es el ID del registro AUDIT, EMP_ID es el ID de la tabla COMPANY, DATE conservará la marca de tiempo cuando se cree el registro en la tabla COMPANY. Ahora creamos un desencadenador en la tabla COMPANY, como se muestra a continuación:
sqlite> CREATE TRIGGER audit_log AFTER INSERT ON COMPANY BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now')); END;
Ahora, comenzaremos con el trabajo real, comencemos a insertar registros en la tabla COMPANY, lo que causará la creación de un registro de auditoría en la tabla AUDIT. Creemos un registro en la tabla COMPANY, como se muestra a continuación-
sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 );
Esto creará un registro en la tabla COMPANY, como se muestra a continuación-
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0
Al mismo tiempo, se creará un registro en la tabla AUDIT. Este registro es el resultado del desencadenador que creamos en la operación INSERT en la tabla COMPANY. Del mismo modo, puede crear desencadenadores para operaciones UPDATE y DELETE según sea necesario.
EMP_ID ENTRY_DATE ---------- ------------------- 1 2013-04-05 06:26:00
Puede obtenersqlite_masterSe listan todos los desencadenadores en la tabla, como se muestra a continuación:
sqlite> SELECT name FROM sqlite_master WHERE type = 'trigger';
La sentencia SQLite anterior solo listará una entrada, como se muestra a continuación-
name ---------- audit_log
Para listar los desencadenadores específicos de una tabla, utilice la cláusula AND y el nombre de la tabla, como se muestra a continuación:
sqlite> SELECT name FROM sqlite_master WHERE type = 'trigger' AND tbl_name = 'COMPANY';
La sentencia SQLite superior también solo lista una entrada, como se muestra a continuación-
name ---------- audit_log
A continuación, se muestra el comando DROP, que se puede usar para eliminar disparadores existentes.
sqlite> DROP TRIGGER trigger_name;