L'istruzione CHECKSUM TABLE

Ultima revisione a cura di Sante Caserio, 25 Gennaio, 2010 00:54

Il CHECKSUM è un valore ottenuto sommando alcuni byte dei dati di una tabella. E’ utile per verificare l’integrità dei dati. Se due tabelle sono identiche, il loro CHECKSUM deve essere uguale; si tenga però presente che, in rari casi, non è vero il contrario: il CHECKSUM di due tabelle diverse potrebbe essere uguale.

Quando si crea una tabella, se lo Storage Engine supporta il CHECKSUM in tempo reale (aggiornato ogni volta che vengono aggiornati i dati), è possibile abilitarlo. In questo modo, sarà possibile in ogni momento controllare l’integrità dei dati presenti nella tabella. Se invece non è supportato o si sceglie di non abilitarlo (aumentando così leggermente le prestazioni) sarà comunque possibile calcolarlo in qualsiasi momento, anche se l’operazione risulterà piuttosto lenta per tabelle di grandi dimensione; ciò sarà utile per confrontare due tabelle che dovrebbero essere identiche (ad esempio in un database replicato). Attualmente gli unici SE che supportano il CHECKSUM in tempo reale sono MyISAM e Maria.

Per abilitare il CHECKSUM in tempo reale occorre impostare a 1 l’opzione CHECKSUM con l’istruzione CREATE TABLE o con ALTER TABLE; per disabilitarlo, si può impostarlo a 0 (valore predefinito).

1 CREATE TABlE t1 (definizione) CHECKSUM = 1;

Sintassi

La sintassi di CHECKSUM TABLE è la seguente:

1 CHECKSUM TABlE nome_tabella [ QUICK | EXTENDED ]

nome_tabella può anche essere un elenco di tabelle separate da una virgola, nel qual caso verrà restituito un record per ogni tabella.

Opzioni

QUICK restituisce il CHECKSUM per ogni tabella presente nella lista, purché il CHECKSUM in tempo reale sia attivo. Per ogni tabella che non abbia il CHECKSUM in tempo reale abilitato, restituisce NULL.

EXTENDED restituisce il CHECKSUM per tutte le tabelle presenti nella lista. Anche se il CHECKSUM in tempo reale è supportato, esso viene comunque ricalcolato. Per tabelle di piccole dimensioni, l’uso di questa modalità non comporta problemi.

Se non è specificato QUICKEXTENDED, MySQL tenta di restituire il CHECKSUM in tempo reale; se non esiste, calcola il CHECKSUM sul momento.

L’output

L’output di questa istruzione è un recordset formato da due colonne:

  • Table è il nome di una tabella specificata
  • Checksum è il valore CHECKSUM di quella tabella

Se una delle tabelle specificate non esiste non viene generato un warning 1146 e viene restituito il valore NULL per quella tabella.