SQLite Disparador (Trigger)
SQLite Disparador (Trigger)Es una función de devolución de llamada de la base de datos que se ejecuta/llama automáticamente cuando ocurre un evento de base de datos específico. A continuación se presentan los puntos clave sobre los disparadores (Trigger) de SQLite:
Los disparadores (Trigger) de SQLite pueden especificarse para que se activen cuando ocurra DELETE, INSERT o UPDATE en una tabla de base de datos específica, o cuando se actualicen columnas de una o más tablas especificadas.
SQLite solo admite disparadores (Trigger) FOR EACH ROW, no disparadores (Trigger) FOR EACH STATEMENT. Por lo tanto, especificar explícitamente FOR EACH ROW es opcional.
La cláusula WHEN y las acciones del disparador (Trigger) pueden acceder a los elementos de fila insertados, eliminados o actualizados usando la formaNEW.column-nameyOLD.column-nameque hace referencia a los elementos de fila insertados, eliminados o actualizados, donde column-name es el nombre de una columna de la tabla asociada con el disparador.
Si se proporciona una cláusula WHEN, las declaraciones SQL solo se ejecutan para las filas especificadas donde la cláusula WHEN es verdadera. Si no se proporciona una cláusula WHEN, las declaraciones SQL se ejecutan para todas las filas.
Las palabras clave BEFORE o AFTER determinan cuándo se ejecutan las acciones del disparador, decidiendo si las acciones del disparador se ejecutan antes o después de la inserción, modificación o eliminación de la fila asociada.
Cuando se elimina la tabla asociada al disparador, el disparador (Trigger) se elimina automáticamente.
La tabla a modificar debe existir en la misma base de datos que la tabla o vista a la que está adjunto el disparador, y solo debe usartablename, en lugar dedatabase.tablename。
Una función SQL especial RAISE() puede usarse para lanzar excepciones dentro del programa del disparador.
Sintaxis
Creardisparador (Trigger)La sintaxis básica es la siguiente:
CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name ON table_name BEGIN -- 触发器逻辑.... END;
Aquí,event_namepuede ser en la tabla mencionadatable_namesobreINSERT, DELETE y UPDATEoperaciones de base de datos. Puede optar por especificar FOR EACH ROW después del nombre de la tabla.
La siguiente es la sintaxis para crear un disparador (Trigger) en una o más columnas específicas de una tabla en una operación UPDATE:
CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name ON table_name BEGIN -- 触发器逻辑.... END;
Ejemplos
Supongamos una situación en la que queremos mantener una prueba de auditoría para cada registro insertado en la tabla COMPANY recién creada (si ya existe, se elimina y se vuelve a crear):
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 la prueba de auditoría, crearemos una nueva tabla llamada AUDIT. Cada vez que haya un nuevo registro en la tabla COMPANY, se insertará un mensaje de registro en ella:
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, y DATE mantendrá la marca de tiempo cuando se creó el registro en COMPANY. Así que ahora creemos un disparador 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 a insertar registros en la tabla COMPANY, lo que provocará la creación de un registro de registro de auditoría en la tabla AUDIT. Por lo tanto, 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 el siguiente:
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 disparador que creamos en la operación INSERT en la tabla COMPANY. De manera similar, se pueden crear disparadores (Trigger) en operaciones UPDATE y DELETE según sea necesario.
EMP_ID ENTRY_DATE ---------- ------------------- 1 2013-04-05 06:26:00
Listar disparadores (TRIGGERS)
Usted puede, desde la tablasqlite_masterlistar todos los disparadores, de la siguiente manera:
sqlite> SELECT name FROM sqlite_master WHERE type = 'trigger';
La declaración SQLite anterior solo listará una entrada, como sigue:
name ---------- audit_log
Si desea listar los disparadores en una tabla específica, use la cláusula AND para conectar 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 declaración SQLite anterior solo listará una entrada, como sigue:
name ---------- audit_log
Eliminar disparadores (TRIGGERS)
A continuación se muestra el comando DROP, que se puede usar para eliminar un disparador existente:
sqlite> DROP TRIGGER trigger_name;Otras extensiones