GNU/Linux >> Linux Esercitazione >  >> Cent OS

Come utilizzare i trigger MySQL

Introduzione

I trigger MySQL applicano restrizioni alle tabelle durante l'aggiunta, l'aggiornamento o la rimozione di righe di tabella.

Le colonne in MySQL applicano una leggera quantità di limitazioni di valore. Ad esempio, impostando un tipo di dati di colonna come tiny int e non nullo richiede un input di valore numerico piccolo. Tuttavia, sono necessarie ulteriori restrizioni per mantenere l'integrità dei dati.

Questo tutorial mostra come utilizzare i trigger MySQL e fornisce esempi per ogni tipo di trigger.

Prerequisiti

  • Un sistema che esegue MySQL su un server di database
  • Account utente MySQL con privilegi di root
  • Conoscenza dei comandi MySQL di base (fare riferimento al nostro cheat sheet dei comandi MySQL scaricabile)

Cos'è un trigger in MySQL?

Un trigger è un oggetto MySQL denominato che si attiva quando si verifica un evento in una tabella. I trigger sono un particolare tipo di stored procedure associata a una tabella specifica.

I trigger consentono l'accesso ai valori della tabella a scopo di confronto utilizzando NEW e OLD . La disponibilità dei modificatori dipende dall'evento trigger che utilizzi:

Evento trigger VECCHIA NOVITÀ
INSERIRE No
AGGIORNAMENTO
ELIMINA No

Il controllo o la modifica di un valore durante il tentativo di inserimento dei dati rende il NEW.<column name> modificatore disponibile. Questo perché una tabella viene aggiornata con nuovi contenuti. Al contrario, un OLD.<column name> value non esiste per un'istruzione di inserimento perché non esistono informazioni al suo posto in anticipo.

Quando si aggiorna una riga di tabella, sono disponibili entrambi i modificatori. C'è OLD.<column name> dati che vogliamo aggiornare a NEW.<column name> dati.

Infine, quando si rimuove una riga di dati, il OLD.<column name> modificatore accede al valore rimosso. Il NEW.<column name> non esiste perché nulla sostituisce il vecchio valore al momento della rimozione.

Esempio di trigger MySQL

Come esempio di trigger applicato, inserimento di nuovi valori nella tabella person restituisce un risultato diverso rispetto all'input originale:

Si noti che i nomi inseriti erano inizialmente minuscoli. Quando si seleziona la tabella, la prima lettera viene visualizzata in maiuscolo. Anche se non vi è alcuna indicazione di qualcosa di diverso da una normale istruzione insert, il trigger si è attivato prima dell'istruzione insert per mettere in maiuscolo la prima lettera del nome.

Utilizzo dei trigger MySQL

Ogni trigger associato a una tabella ha un nome e una funzione univoci basati su due fattori:

1. Tempo . BEFORE o AFTER un evento di riga specifico.

2. Evento . INSERT , UPDATE o DELETE .

I trigger MySQL si attivano a seconda del tempo di attivazione e dell'evento per un totale di sei combinazioni di trigger univoche. Le istruzioni before aiutano a controllare i dati e ad apportare modifiche prima di prendere impegni, mentre le istruzioni after prima salvano i dati e poi eseguono le istruzioni.

L'esecuzione di una serie di azioni avviene automaticamente, interessando tutte le righe inserite, eliminate o aggiornate nell'istruzione.

Crea trigger

Usa il CREATE TRIGGER sintassi dell'istruzione per creare un nuovo trigger:

CREATE TRIGGER <trigger name> <trigger time > <trigger event>
ON <table name>
FOR EACH ROW
<trigger body>;

La procedura consigliata è nominare il trigger con le seguenti informazioni:

<trigger time>_<table name>_<trigger event>

Ad esempio, se un trigger si attiva prima dell'inserimento su un tavolo denominato dipendente , la migliore convenzione è chiamare il trigger:

before_employee_insert

In alternativa, una pratica comune consiste nell'utilizzare il seguente formato:

<table name>_<first letter of trigger time><first letter of trigger name>

Il prima di inserire nome dell'attivatore per la tabella dipendente assomiglia a questo:

employee_bi

Il trigger viene eseguito in un momento specifico di un evento su una tabella definita da

per ogni riga interessata dalla funzione.

Elimina trigger

Per eliminare un attivatore, utilizza il DROP TRIGGER dichiarazione:

DROP TRIGGER <trigger name>;

In alternativa, usa:

DROP TRIGGER IF EXISTS <trigger name>;

Il messaggio di errore non viene visualizzato perché non è presente alcun trigger, quindi non viene stampato alcun avviso.

Crea un database di esempio

Creare un database per i codici di esempio del trigger con la seguente struttura:

1. Crea una tabella chiamata person con nome e età per le colonne.

CREATE TABLE person (name varchar(45), age int);

Inserisci i dati di esempio nella tabella:

INSERT INTO person VALUES ('Matthew', 25), ('Mark', 20);

Seleziona la tabella per vedere il risultato:

SELECT * FROM person;

2. Crea una tabella chiamata media_age con una colonna denominata media :

CREATE TABLE average_age (average double);

Inserisci il valore dell'età media nella tabella:

INSERT INTO average_age SELECT AVG(age) FROM person;

Seleziona la tabella per vedere il risultato:

SELECT * FROM average_age;

3. Crea una tabella chiamata person_archive con nome , età e ora colonne:

CREATE TABLE person_archive (
name varchar(45),
age int,
time timestamp DEFAULT NOW());

Crea un trigger PRIMA INSERT

Per creare un BEFORE INSERT attivare, utilizzare:

CREATE TRIGGER <trigger name> BEFORE INSERT
ON <table name>
FOR EACH ROW
<trigger body>;

Il BEFORE INSERT trigger fornisce il controllo sulla modifica dei dati prima di eseguire il commit in una tabella del database. Scrivere in maiuscolo i nomi per coerenza, controllare la lunghezza di un input o rilevare input errati con BEFORE INSERT triggers fornisce inoltre limitazioni di valore prima di inserire nuovi dati.

Esempio di trigger PRIMA DI INSERIRE

Crea un BEFORE INSERT trigger per controllare il valore dell'età prima di inserire i dati nella persona tabella:

delimiter //
CREATE TRIGGER person_bi BEFORE INSERT
ON person
FOR EACH ROW
IF NEW.age < 18 THEN
SIGNAL SQLSTATE '50001' SET MESSAGE_TEXT = 'Person must be older than 18.';
END IF; //
delimiter ;

L'inserimento dei dati attiva il trigger e verifica il valore di età prima di confermare le informazioni:

INSERT INTO person VALUES ('John', 14);

La console visualizza il messaggio di errore descrittivo. I dati non vengono inseriti nella tabella a causa del controllo del trigger fallito.

Crea un trigger DOPO INSERTO

Crea un AFTER INSERT attivare con:

CREATE TRIGGER <trigger name> AFTER INSERT
ON <table name>
FOR EACH ROW
<trigger body>;

Il AFTER INSERT trigger è utile quando la riga inserita genera un valore necessario per aggiornare un'altra tabella.

Esempio di trigger DOPO INSERTO

Inserimento di una nuova riga nella persona la tabella non aggiorna automaticamente la media nella media_age tavolo. Crea un AFTER INSERT trigger sulla persona tabella per aggiornare la media_age tabella dopo l'inserimento:

delimiter //
CREATE TRIGGER person_ai AFTER INSERT
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(age) FROM person); //
delimiter ;

Inserimento di una nuova riga nella persona tabella attiva il trigger:

INSERT INTO person VALUES ('John', 19);

I dati si impegnano correttamente con la persona tabella e aggiorna la media_age tabella con il valore medio corretto.

Crea un trigger PRIMA DELL'AGGIORNAMENTO

Crea un BEFORE UPDATE attivare con:

CREATE TRIGGER <trigger name> BEFORE UPDATE
ON <table name>
FOR EACH ROW
<trigger body>;

Il BEFORE UPDATE i trigger vanno insieme al BEFORE INSERT trigger. Se esistono restrizioni prima dell'inserimento dei dati, i limiti dovrebbero essere presenti anche prima dell'aggiornamento.

Esempio di trigger PRIMA DELL'AGGIORNAMENTO

Se esiste un limite di età per la persona tabella prima di inserire i dati, il limite di età dovrebbe esistere anche prima di aggiornare le informazioni. Senza il BEFORE UPDATE trigger, il trigger del controllo dell'età è facile da evitare. Niente limita la modifica a un valore errato.

Aggiungi un BEFORE UPDATE trigger alla persona tabella con lo stesso corpo del BEFORE INSERT trigger:

delimiter //
CREATE TRIGGER person_bu BEFORE UPDATE
ON person
FOR EACH ROW
IF NEW.age < 18 THEN
SIGNAL SQLSTATE '50002' SET MESSAGE_TEXT = 'Person must be older than 18.';
END IF; //
delimiter ;

L'aggiornamento di un valore esistente attiva il controllo del trigger:

UPDATE person SET age = 17 WHERE name = 'John';

Aggiornamento dell'età a un valore inferiore a 18 visualizza il messaggio di errore e le informazioni non vengono aggiornate.

Crea un trigger DOPO AGGIORNAMENTO

Utilizza il seguente blocco di codice per creare un AFTER UPDATE trigger:

CREATE TRIGGER <trigger name> AFTER UPDATE
ON <table name>
FOR EACH ROW
<trigger body>;

Il AFTER UPDATE trigger aiuta a tenere traccia delle modifiche apportate ai dati. Molto spesso, qualsiasi modifica dopo l'inserimento delle informazioni avviene anche dopo l'aggiornamento dei dati.

Esempio di trigger DOPO L'AGGIORNAMENTO

Qualsiasi aggiornamento riuscito all'età dati nella tabella persona dovrebbe anche aggiornare il valore medio intermedio calcolato nella media_age tabella.

Crea un AFTER UPDATE trigger per aggiornare la media_age tabella dopo aver aggiornato una riga nella person tabella:

delimiter //
CREATE TRIGGER person_au AFTER UPDATE
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(age) FROM person); //
delimiter ;

L'aggiornamento dei dati esistenti modifica il valore nella persona tabella:

UPDATE person SET age = 21 WHERE name = 'John';

Aggiornamento della tabella persona aggiorna anche la media in average_age tabella.

Crea un trigger PRIMA DELETE

Per creare un BEFORE DELETE attivare, utilizzare:

CREATE TRIGGER <trigger name> BEFORE DELETE
ON <table name>
FOR EACH ROW
<trigger body>;

Il BEFORE DELETE trigger è essenziale per motivi di sicurezza. Se a una tabella padre sono allegati elementi secondari, il trigger aiuta a bloccare l'eliminazione e impedisce le tabelle orfane. Il trigger consente anche di archiviare i dati prima dell'eliminazione.

Esempio di trigger PRIMA DI ELIMINARE

Archivia i dati eliminati creando un BEFORE DELETE trigger sul tavolo persona e inserisci i valori nell'archivio_persona tabella:

delimiter //
CREATE TRIGGER person_bd BEFORE DELETE
ON person
FOR EACH ROW
INSERT INTO person_archive (name, age)
VALUES (OLD.name, OLD.age); //
delimiter ;

Eliminazione dei dati dalla tabella person archivia i dati nel archivio_persona tabella prima di eliminare:

DELETE FROM person WHERE name = 'John';

Reinserire il valore nella persona la tabella conserva il registro dei dati eliminati nell'archivio_persona tabella:

INSERT INTO person VALUES ('John', 21);

Il BEFORE DELETE trigger è utile per registrare eventuali tentativi di modifica della tabella.

Crea un trigger DOPO ELIMINA

Crea un AFTER DELETE attivare con:

CREATE TRIGGER <trigger name> AFTER DELETE
ON <table name>
FOR EACH ROW
<trigger body>;

Il AFTER DELETE i trigger mantengono gli aggiornamenti delle informazioni che richiedono la scomparsa della riga di dati prima di eseguire gli aggiornamenti.

Esempio di trigger DOPO ELIMINA

Crea un AFTER DELETE trigger sul tavolo persona per aggiornare la media_age tabella con le nuove informazioni:

delimiter //
CREATE TRIGGER person_ad AFTER DELETE
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(person.age) FROM person); //
delimiter ;

Eliminazione di un record dalla tabella person aggiorna la media_age tabella con la nuova media:

Senza il AFTER DELETE trigger, le informazioni non si aggiornano automaticamente.

Crea più trigger

MySQL non supporta l'attivazione simultanea di più trigger. Tuttavia, è possibile aggiungere più operazioni logiche allo stesso trigger. Usa il BEGIN e END delimitatori per indicare il corpo del trigger:

CREATE TRIGGER <trigger name> <trigger time > <trigger event>
ON <table name>
FOR EACH ROW
BEGIN
<trigger body>;
END;

Assicurati di modificare il delimitatore predefinito prima di creare un trigger con più operazioni.

Mostra trigger

Elenca tutti i trigger in un database con:

SHOW triggers;

L'output mostra un elenco di tutti i trigger, inclusi il nome e il contenuto dell'istruzione:

Vengono visualizzate anche altre informazioni, come l'ora di creazione e l'utente che ha creato il trigger.


Cent OS
  1. Come creare database MySQL in Workbench

  2. Come usare phpMyAdmin per copiare un database MySQL

  3. Come usare il sale su Centos 8

  4. Come riparare la tabella del database MySQL danneggiata

  5. Come installare e utilizzare MySQL su Ubuntu 20.04

Come utilizzare le funzioni di stringa MySQL

Come installare e utilizzare MySQL Workbench su Ubuntu 18.04

Come installare MySQL su CentOS 8

Come usare il pannello Webuzo!!!

Come installare e utilizzare SQLite su Ubuntu 20.04

Come utilizzare lo strumento MySQL Optimize