Päivitys (SQL) - Update (SQL)
SQL UPDATE lausuma muuttaa dataa yhden tai useamman tietueet taulukkoon . Joko kaikki rivit voidaan päivittää, tai osajoukko voidaan valita ehdon avulla .
UPDATEToteamus on seuraavan muotoinen:
-
UPDATEtaulukon_nimi sarakkeen_nimi = arvo [, sarakkeen_nimi = arvo ... ] [ ehto ]SETWHERE
Menestyminen edellyttää UPDATE, että käyttäjällä on oltava tietojen käsittelyoikeudet ( UPDATEetuoikeus) taulukossa tai sarakkeessa, ja päivitetty arvo ei saa olla ristiriidassa kaikkien sovellettavien rajoitusten (kuten ensisijaisten avainten , yksilöllisten hakemistojen, CHECKrajoitusten ja NOT NULLrajoitusten) kanssa.
Joissakin tietokannoissa, kuten PostgreSQL , kun FROM-lauseke on läsnä, tapahtuu olennaisesti se, että kohdetaulukko on liitetty luettelossa mainittuihin taulukoihin, ja liitoksen kukin lähtörivi edustaa kohdetaulukon päivitysoperaatiota. Kun käytetään FROM-tiedostoa, on varmistettava, että liitos tuottaa korkeintaan yhden lähtörivin kutakin muokattavaa riviä kohti. Toisin sanoen kohderivin ei tulisi liittyä useampaan kuin yhteen riviin toisesta taulukosta. Jos näin tapahtuu, kohderivin päivittämiseen käytetään vain yhtä liitosriviä, mutta kumpi niistä ei ole helposti ennustettavissa.
Tämän määrittelemättömyyden takia muihin taulukoihin viittaaminen vain alavalintojen sisällä on turvallisempaa, vaikkakin usein vaikeampaa lukea ja hitaampaa kuin liittämisen käyttö.
MySQL ei ole ANSI-standardin mukainen.
Esimerkkejä
Aseta taulukon T sarakkeen C1 arvoksi 1 vain niille riveille, joissa sarakkeen C2 arvo on "a".
UPDATE T
SET C1 = 1
WHERE C2 = 'a'
Aseta taulukossa T sarakkeen C1 arvoksi 9 ja C3 arvoksi 4 kaikille riveille, joille sarakkeen C2 arvo on "a".
UPDATE T
SET C1 = 9,
C3 = 4
WHERE C2 = 'a'
Lisää sarakkeen C1 arvoa yhdellä, jos sarakkeen C2 arvo on "a".
UPDATE T
SET C1 = C1 + 1
WHERE C2 = 'a'
Esitä sarakkeen C1 arvo merkkijonolla "text", jos sarakkeen C2 arvo on "a".
UPDATE T
SET C1 = 'text' || C1
WHERE C2 = 'a'
Aseta taulukon T1 sarakkeen C1 arvoksi 2 vain, jos sarakkeen C2 arvo löytyy taulukon T2 sarakkeen C3 arvojen alaluettelosta, jonka sarake C4 on 0.
UPDATE T1
SET C1 = 2
WHERE C2 IN ( SELECT C3
FROM T2
WHERE C4 = 0)
Voidaan myös päivittää useita sarakkeita yhdessä päivityslausekkeessa:
UPDATE T
SET C1 = 1,
C2 = 2
Monimutkaiset olosuhteet ja JOINit ovat myös mahdollisia:
UPDATE T
SET A = 1
WHERE C1 = 1
AND C2 = 2
Jotkin tietokannat sallivat FROM-lausekkeen epätyypillisen käytön:
UPDATE a
SET a.[updated_column] = updatevalue
FROM articles a
JOIN classification c
ON a.articleID = c.articleID
WHERE c.classID = 1
Tai Oracle-järjestelmissä (olettaen, että luokittelussa on hakemisto.articleID):
UPDATE
(
SELECT *
FROM articles
JOIN classification
ON articles.articleID = classification.articleID
WHERE classification.classID = 1
)
SET [updated_column] = updatevalue
Pitkällä taulukon nimellä:
UPDATE MyMainTable AS a
SET a.LName = Smith
WHERE a.PeopleID = 1235
Mahdolliset kysymykset
- Katso Halloween-ongelma . On mahdollista, että tietyntyyppisistä
UPDATElausekkeista voi tulla ääretön silmukka, kunWHERElauseke ja yksi tai useampiSETlause voivat hyödyntää toisiinsa kietoutunutta hakemistoa .