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.

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.