REPLACE
Sintassi
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tabella [(nome_col,...)]
{VALUES | VALUE} ({espr | DEFAULT},...),(...),...
Oppure:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tabella
SET nome_col={espr | DEFAULT}, ...
Oppure:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tabella [(nome_col,...)]
SELECT ...
Spiegazione
REPLACE funziona esattamente come
INSERT, però se esiste una vecchia riga nella tabella che - nella chiave primaria o in un indice univoco - ha lo stesso valore della nuova riga che si sta inserendo, la riga vecchia viene cancellata prima che la nuova venga inserita.
REPLACE è un'estensione di MariaDB all'SQL standard. Effettua un inserimento, oppure una cancellazione e un inserimento. Per conoscere un'altra estensione simile di MariaDB all'SQL standard -- che effettua una insert o una update -- si veda http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html.
Si noti che, se la tabella non ha una chiave primaria o un indice univoco, usare l'istruzione REPLACE non ha senso. Diventa un equivalente di INSERT, perché nessun indice può essere utilizzato per determinare se la nuova riga ne duplica una vecchia.
I valori di tutte le colonne vengono presi da quelli specificati nell'istruzione REPLACE. Tutti i campi mancanti vengono impostati ai loro valori predefiniti, proprio come succede con le INSERT. Non è possibile inserire riferimenti alla vecchia riga e utilizzarli per la nuova. Se si usa un'assegnazione come 'SET nome_col = nome_col + 1', il riferimento alla vecchia colonna viene considerato come DEFAULT(nome_col), perciò l'assegnazione equivale a 'SET nome_col = DEFAULT(nome_col) + 1'.
Per utilizzare REPLACE, occorre avere i privilegi INSERT e DELETE sulla tabella.