Update (SQL)
Una sentència UPDATE en llenguatge SQL és capaç de modificar un o més registres d'una taula. Aquesta acció s'aplicarà en totes les files de la taula o en cas d'especificar-se la clàusula Where (SQL), al subconjunt de files que compleixin la condició especificada en la clàusula. Per poder modificar satisfactòriament la base de dades amb l'UPDATE, l'usuari ha de disposar de privilegis de modificació UPDATE de la taula o la columna en qüestió i el valor a modificar no ha d'entrar en conflicte amb cap restricció aplicable del tipus clau primària, index Unique, restricció CHECK o restricció NOT NULL
.
La sentència UPDATE té l'estructura següent:[1]
UPDATE nom_taula SET nom_camp = "valor", nom_camp = "valor2" WHERE [predicat]
En algunes bases de dades, com PostgreSQLm, si s'utilitza la clàusula FROM aquesta actua fent una unió entre la taula destí (a modificar) i la taula mencionada a la clàusula FROM, i llavors cada fila resultats de la join representarà una operació update a la taula destí. Quan s'utilitza FROM, hom hauria d'assegurar-se que la JOIN produeix com a màxim una fila resultant per cada fila a modificar. En altres paraules, una fila destí no s'hauria d'emparellar a més d'una fila de l'altra taula o altres taules. Si ho fa, llavors només una de les files unides serà utilitzada en la modificació de la fila de destinació, però no es podrà predir fàcilment quina serà.[2] Donada aquesta indeterminació, és més segur utilitzar subconsultes per referenciar a d'altres, encara que sovint més complex de llegir i més lent que utilitzant una JOIN.
Exemples
[modifica]Guarda '1' en el camp C1 de la taula T en aquelles files on el valor del camp C2 és el caràcter "a".
UPDATE T
SET C1 = 1
WHERE C2 = 'a'
En la taula T es modifica el valor del camp C1 per 9 i el del C3 per 4 en totes aquelles files on el valor del camp C2 sigui el caràcter "a".
UPDATE T
SET C1 = 9,
C3 = 4
WHERE C2 = 'a'
Incrementa el valor del camp C1 en 1 si el valor del camp C2 és "a".
UPDATE T
SET C1 = C1 + 1
WHERE C2 = 'a'
S'afegeix al davant la cadena "text" davant del valor anterior del camp C1 si el valor del camp C2 és "a".
UPDATE T
SET C1 = 'text' || C1
WHERE C2 = 'a'
Actualitza el valor de la camp C1 de la taula T1 a 2, només si el valor de la camp C2 es troba en la subllista de valors de la camp C3 de la taula T2 que tinguin el camp C4 igual a 0.
UPDATE T1
SET C1 = 2
WHERE C2 IN (SELECT C3
FROM T2
WHERE C4 = 0)
Aquest és un exemple on s'actualitzen múltiples camps en una única sentència update:
UPDATE T
SET C1 = 1,
C2 = 2
Referències
[modifica]