Frissítés (SQL) - Update (SQL)

Az SQL UPDATE utasítás megváltoztatja egy vagy több rekord adatait egy táblázatban . Vagy az összes sor frissíthető, vagy egy feltétel használatával választható ki egy részhalmaz .

A UPDATEnyilatkozat formája a következő:

UPDATE tábla_név oszlop_név = érték [, oszlop_név = érték ... ] [ feltétel ]SET WHERE

A UPDATEsikeres működéshez a felhasználónak rendelkeznie kell adatkezelési jogosultságokkal ( UPDATEprivilégiumokkal) a táblában vagy az oszlopban, és a frissített érték nem ütközhet az összes alkalmazandó korlátozással (például elsődleges kulcsok , egyedi indexek, CHECKkorlátozások és NOT NULLkorlátozások).

Bizonyos adatbázisokban, például a PostgreSQL-ben , ha van egy FROM záradék , akkor lényegében az történik, hogy a céltábla össze van kapcsolva a listában említett táblákkal, és a csatlakozás minden kimeneti sora a céltábla frissítési műveletét jelenti. A FROM használatakor biztosítani kell, hogy az összekapcsolás minden módosítandó sorhoz legfeljebb egy kimeneti sort hozzon létre. Más szavakkal, a célsor nem csatlakozhat több sorhoz, mint a másik táblázat (ok) ból. Ha ez megtörténik, akkor a csatlakozási sorok közül csak az egyiket használják a célsor frissítésére, de hogy melyiket fogják használni, az nem könnyen kiszámítható.

Ezen határozatlanság miatt biztonságosabb, ha más táblákra csak az alválasztókon belül hivatkozunk, bár gyakran nehezebben olvasható és lassabb, mint a csatlakozás használata.

A MySQL nem felel meg az ANSI szabványnak.

Példák

Állítsa a T táblázat C1 oszlopának értékét 1 értékre, csak azokban a sorokban, ahol a C2 oszlop értéke "a".

UPDATE T
   SET C1 = 1
 WHERE C2 = 'a'

A T táblázatban állítsa a C1 oszlop értékét 9-re és a C3 értékét 4-re minden olyan sor esetében, amelynél a C2 oszlop értéke "a".

UPDATE T
   SET C1 = 9,
       C3 = 4
 WHERE C2 = 'a'

Növelje a C1 oszlop értékét 1-gyel, ha a C2 oszlop értéke "a".

UPDATE T
   SET C1 = C1 + 1
 WHERE C2 = 'a'

Add meg a C1 oszlop értékét a "text" karakterlánccal, ha a C2 oszlop értéke "a".

UPDATE T
   SET C1 = 'text' || C1
 WHERE C2 = 'a'

Csak akkor állítsa a T1 táblázat C1 oszlopának értékét 2-re, ha a C2 oszlop értéke megtalálható a T2 táblázat C3 oszlopának értéklistájában, amelynek C4 oszlopa 0.

UPDATE T1
   SET C1 = 2
 WHERE C2 IN ( SELECT C3
                 FROM T2
                WHERE C4 = 0)

Egy oszlop több oszlopot is frissíthet egy frissítési utasításban:

UPDATE T
   SET C1 = 1,
       C2 = 2

Komplex feltételek és JOIN-ok is lehetségesek:

UPDATE T
   SET A = 1
 WHERE C1 = 1
   AND C2 = 2

Néhány adatbázis lehetővé teszi a FROM záradék nem szabványos használatát:

UPDATE a
   SET a.[updated_column] = updatevalue
  FROM articles a
       JOIN classification c
         ON a.articleID = c.articleID
 WHERE c.classID = 1

Vagy az Oracle rendszereken (feltételezve, hogy van egy index az osztályozáshoz.articleID):

UPDATE
(
  SELECT *
    FROM articles
    JOIN classification
      ON articles.articleID = classification.articleID
   WHERE classification.classID = 1
)
SET [updated_column] = updatevalue

A táblázat hosszú nevével:

UPDATE MyMainTable AS a
SET a.LName = Smith
WHERE a.PeopleID = 1235

Potenciális kérdések

Hivatkozások