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ő:
-
UPDATEtábla_név oszlop_név = érték [, oszlop_név = érték ... ] [ feltétel ]SETWHERE
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
- Lásd: Halloween probléma . Lehetséges, hogy bizonyos típusú
UPDATEutasítások végtelen ciklussá válnak, amikor aWHEREzáradék és egy vagy többSETtagmondat egymásba fonódó indexet használhat .