PostgreSQL / Мэдээлэл шинэчлэх (UPDATE)

Мэдээлэл шинэчлэх (UPDATE)

Өгөгдлийн санд хадгалсан мэдээлэл өөрчлөгддөг — хэрэглэгчийн нас нэмэгдэх, бүтээгдэхүүний үнэ өөрчлөгдөх, захиалгын статус шинэчлэгдэх зэрэг. UPDATE команд нь одоо байгаа бичлэгийн утгыг өөрчилдэг SQL-ийн гол командуудын нэг юм.

Үндсэн UPDATE хэлбэр

sql
UPDATE хүснэгт
SET багана1 = утга1, багана2 = утга2
WHERE нөхцөл;

Чухал анхааруулга: WHERE мартвал хүснэгтийн БҮГД бичлэг өөрчлөгдөнө! Үргэлж WHERE нөхцөл тавина.

sql
-- Нэг хэрэглэгчийн насыг шинэчлэх
UPDATE users
SET нас = 26
WHERE id = 1;

Олон баганыг нэгэн зэрэг шинэчлэх

SET-д таслалаар тусгаарлан олон баганыг нэг удаа шинэчлэх боломжтой:

sql
UPDATE users
SET
    нэр      = 'Болд Баатар',
    нас      = 26,
    утас     = '99001122'
WHERE id = 1;

Шинэчилсэн бичлэгийг шуурхай авахад RETURNING ашиглана:

sql
UPDATE users
SET нас = 26
WHERE id = 1
RETURNING id, нэр, нас;
код
 id |     нэр      | нас
----+--------------+-----
  1 | Болд Баатар  |  26

Одоогийн утган дээр тулгуурлах

Шинэ утгыг тооцоолохдоо одоогийн баганын утгыг ашиглаж болно:

sql
-- Харагдсан тоог 1-ээр нэмэх
UPDATE posts
SET харагдсан = харагдсан + 1
WHERE id = 5;

-- Бүх бараанд 10% үнийн өсгөлт
UPDATE products
SET үнэ = үнэ * 1.10;

-- XP-г нэмэх
UPDATE profiles
SET xp = xp + 10
WHERE user_id = 42;

WHERE нөхцөлтэй шинэчлэх

Олон нөхцөл хослуулж зөвхөн хэрэгтэй бичлэгүүдийг шинэчилнэ:

sql
-- Хугацаа хэтэрсэн захиалгуудын статусыг өөрчлөх
UPDATE orders
SET статус = 'cancelled'
WHERE статус = 'pending'
  AND үүсгэсэн < NOW() - INTERVAL '7 days';

-- Тодорхой ангилалд байгаа нөөцгүй барааг идэвхгүй болгох
UPDATE products
SET идэвхтэй = FALSE
WHERE нөөц = 0
  AND ангилал = 'улирлын';

UPDATE ... FROM — өөр хүснэгттэй хослуулах

Нэг хүснэгтийн утгыг өөр хүснэгтийн мэдээлэл дээр тулгуурлан шинэчлэхэд FROM ашиглана:

sql
-- users хүснэгтийн и-мэйлийг profiles хүснэгтээс шинэчлэх
UPDATE users
SET имэйл = profiles.шинэ_имэйл
FROM profiles
WHERE users.id = profiles.user_id
  AND profiles.шинэ_имэйл IS NOT NULL;

Шинэчлэлтийн өмнө шалгах

Бодит ажлын орчинд UPDATE хийхээс өмнө яг хэдэн бичлэг өөрчлөгдөхийг SELECT-ээр урьдчилан шалгах нь зөв дадал:

sql
-- Эхлээд шалгах
SELECT id, нэр, статус
FROM orders
WHERE статус = 'pending'
  AND үүсгэсэн < NOW() - INTERVAL '7 days';

-- Зөв бичлэгүүд харагдвал UPDATE хийх
UPDATE orders
SET статус = 'cancelled'
WHERE статус = 'pending'
  AND үүсгэсэн < NOW() - INTERVAL '7 days';

Хэдэн бичлэг өөрчлөгдсөн мэдэх

psqlUPDATE хийсний дараа доор тийм мессеж гарна:

код
UPDATE 3

Энэ нь 3 бичлэг шинэчлэгдсэн гэсэн утгатай. UPDATE 0 гарвал нөхцөл таарсан бичлэг байгаагүй гэсэн үг — WHERE нөхцөлөө шалга.

Жишээ: хэрэглэгчийн профайл шинэчлэх

sql
CREATE TABLE profiles (
    id            BIGSERIAL PRIMARY KEY,
    user_id       INTEGER UNIQUE NOT NULL,
    дэлгэрэнгүй   TEXT,
    avatar_url    TEXT,
    шинэчлэгдсэн  TIMESTAMPTZ DEFAULT NOW()
);

-- Профайл шинэчлэх
UPDATE profiles
SET
    дэлгэрэнгүй  = 'PostgreSQL-г сурч байна. Монголын хөгжүүлэгч.',
    avatar_url   = 'https://example.com/avatars/bold.jpg',
    шинэчлэгдсэн = NOW()
WHERE user_id = 1
RETURNING *;

Дараагийн хичээлд:

DELETE командаар бичлэгүүдийг хэрхэн зохистой устгахыг — аюулгүй аргаас эхлээд каскад устгалт хүртэл сурна.