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.