SQLite Déclencheur

SQLite Déclencheurest une fonction de rappel de la base de données, qui est automatiquement exécutée/appelée lorsque l'événement de base de données spécifié se produit. Voici les points clés concernant les déclencheurs SQLite :

  • Les déclencheurs SQLite peuvent être spécifiés pour se déclencher sur DELETE, INSERT ou UPDATE d'une table de base de données spécifique, ou sur les mises à jour des colonnes d'une ou plusieurs tables spécifiées.

  • SQLite ne prend en charge que les déclencheurs FOR EACH ROW, et il n'existe pas de déclencheurs FOR EACH STATEMENT. Par conséquent, spécifier explicitement FOR EACH ROW est facultatif.

  • La clause WHEN et les actions du déclencheur peuvent accéder, en utilisant la formeNEW.column-nameetOLD.column-name, à des références aux éléments de ligne en cours d'insertion, de suppression ou de mise à jour, où column-name est le nom d'une colonne de la table associée au déclencheur.

  • Si une clause WHEN est fournie, les instructions SQL ne sont exécutées que pour les lignes spécifiées pour lesquelles la clause WHEN est vraie. Si aucune clause WHEN n'est fournie, les instructions SQL sont exécutées pour toutes les lignes.

  • Les mots-clés BEFORE ou AFTER déterminent quand les actions du déclencheur sont exécutées, décidant si elles s'exécutent avant ou après l'insertion, la modification ou la suppression de la ligne associée.

  • Lorsque la table associée au déclencheur est supprimée, le déclencheur est automatiquement supprimé.

  • La table à modifier doit exister dans la même base de données que la table ou vue à laquelle le déclencheur est attaché, et doit uniquement utilisertablename, et nondatabase.tablename。

  • Une fonction SQL spéciale RAISE() peut être utilisée pour lever une exception dans le programme du déclencheur.

Syntaxe

CreateTriggerLa syntaxe de base est la suivante :

CREATE  TRIGGER trigger_name [BEFORE|AFTER] event_name 
ON table_name
BEGIN
 -- 触发器逻辑....
END;

Ici,event_namepeut être une opération sur la table mentionnéetable_namesur lesINSERT, DELETE et UPDATEopération de base de données. Vous pouvez éventuellement spécifier FOR EACH ROW après le nom de la table.

Voici la syntaxe pour créer un déclencheur sur une ou plusieurs colonnes spécifiées d'une table pour les opérations UPDATE :

CREATE  TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name 
ON table_name
BEGIN
 -- 触发器逻辑....
END;

Exemples

Supposons une situation où nous voulons tenir une piste d'audit pour chaque enregistrement inséré dans une table COMPANY nouvellement créée (si elle existe déjà, supprimez-la et recréez-la) :

sqlite> CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

Pour tenir la piste d'audit, nous allons créer une nouvelle table nommée AUDIT. Chaque fois qu'une nouvelle entrée d'enregistrement est effectuée dans la table COMPANY, un message de journal y sera inséré :

sqlite> CREATE TABLE AUDIT(
    EMP_ID INT NOT NULL,
    ENTRY_DATE TEXT NOT NULL
);

Ici, ID est l'ID de l'enregistrement AUDIT, EMP_ID est l'ID provenant de la table COMPANY, et DATE contiendra l'horodatage de création de l'enregistrement dans COMPANY. Alors, maintenant, créons un déclencheur sur la table COMPANY comme suit :

sqlite> CREATE TRIGGER audit_log AFTER INSERT 
ON COMPANY
BEGIN
   INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now'));
END;

Maintenant, nous allons commencer à insérer des enregistrements dans la table COMPANY, ce qui entraînera la création d'un enregistrement de journal d'audit dans la table AUDIT. Par conséquent, créons un enregistrement dans la table COMPANY comme suit :

sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Paul', 32, 'California', 20000.00 );

Cela créera l'enregistrement suivant dans la table COMPANY :

ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0

En même temps, un enregistrement sera créé dans la table AUDIT. Cet enregistrement est le résultat du déclencheur que nous avons créé sur l'opération INSERT sur la table COMPANY. De même, des déclencheurs peuvent être créés sur les opérations UPDATE et DELETE selon les besoins.

EMP_ID      ENTRY_DATE
----------  -------------------
1           2013-04-05 06:26:00

Liste des déclencheurs (TRIGGERS)

Vous pouvez lister tous les déclencheurs à partir de la tablesqlite_mastercomme suit :

sqlite> SELECT name FROM sqlite_master
WHERE type = 'trigger';

L'instruction SQLite ci-dessus ne listera qu'une seule entrée, comme suit :

name
----------
audit_log

Si vous souhaitez lister les déclencheurs sur une table spécifique, utilisez la clause AND pour concaténer le nom de la table, comme suit :

sqlite> SELECT name FROM sqlite_master
WHERE type = 'trigger' AND tbl_name = 'COMPANY';

L'instruction SQLite ci-dessus ne listera qu'une seule entrée, comme suit :

name
----------
audit_log

Suppression de déclencheurs (TRIGGERS)

Voici la commande DROP, qui peut être utilisée pour supprimer les déclencheurs existants :

sqlite> DROP TRIGGER trigger_name;
Autres extensions