UPDATE
UPDATE командаар хүснэгтийн байгаа өгөгдлийг өөрчилнэ. WHERE нөхцөлтэй хамт ашиглах нь маш чухал — орхивол бүх мөр өөрчлөгдөнө.
Үндсэн синтакс
UPDATE хүснэгт
SET багана = шинэ_утга
WHERE нөхцөл;
Жишээ:
UPDATE users
SET email = 'bold_new@example.com'
WHERE id = 1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Rows matched— нөхцөлд тохирсон мөрийн тооChanged— бодитоор өөрчлөгдсөн мөрийн тоо (утга ижил байсан бол 0)
Олон багана зэрэг өөрчлөх
UPDATE products
SET
price = 5490.00,
stock = 45,
is_active = TRUE
WHERE id = 1;
SET дотор баганыг таслалаар тусгаарлан олныг нэгэн зэрэг өөрчилж болно.
Одоогийн утган дээр үндэслэн өөрчлөх
-- Үнийг 10% нэмэх
UPDATE products
SET price = price * 1.1
WHERE id = 2;
-- Нөөцийг 5-аар хасах
UPDATE products
SET stock = stock - 5
WHERE id = 1;
-- XP нэмэх
UPDATE profiles
SET xp = xp + 10
WHERE id = 42;
Тооцоолол шууд SET дотор хийж болно — аппликейшнаас утга татаж, нэмж, буцааж хадгалах шаардлагагүй.
WHERE-тэй хамт ашиглах
UPDATE-д WHERE-ийн бүх синтакс хэрэглэгдэнэ:
-- Олон ID
UPDATE products
SET is_active = FALSE
WHERE id IN (3, 4, 5);
-- Нөхцөлт
UPDATE products
SET stock = 0
WHERE stock < 0;
-- Огноогоор
UPDATE orders
SET status = 'expired'
WHERE created_at < '2023-01-01';
-- NULL байгааг шинэчлэх
UPDATE users
SET phone = '99001234'
WHERE phone IS NULL AND name = 'Болд Батбаяр';
⚠️ WHERE-гүй UPDATE-ийн аюул
-- АЮУЛГҮЙ: зөвхөн id=1 мөрийг өөрчилнэ
UPDATE users SET email = 'new@example.com' WHERE id = 1;
-- АЮУЛТАЙ: БҮГДИЙН имэйлийг өөрчилнэ!
UPDATE users SET email = 'new@example.com';
WHERE орхивол хүснэгтийн бүх мөр өөрчлөгдөнө. Энэ алдааг буцаах боломжгүй (transaction ашиглаагүй бол).
Дүрэм: UPDATE бичихдээ эхлээд WHERE бодно, дараа нь SET бичнэ.
Safe Update Mode
MySQL Workbench болон зарим тохиргоонд safe_updates горим идэвхтэй байдаг — WHERE-гүй буюу индексгүй баганаар шүүсэн UPDATE/DELETE-ийг блоклоно:
Error Code: 1175. You are using safe update mode...
Горимыг идэвхгүй болгох (одоогийн session дотор):
SET SQL_SAFE_UPDATES = 0;
-- Командыг ажиллуулна
UPDATE products SET is_active = FALSE WHERE stock = 0;
-- Дахин идэвхжүүлэх
SET SQL_SAFE_UPDATES = 1;
Бодит аппликейшнд safe_updates-ийг идэвхтэй байлгах нь хамгаалалт болно.
UPDATE + ORDER BY + LIMIT
Зарим мөрийг л шинэчлэхэд хэрэгтэй:
-- Хамгийн хуучин 10 дуусгаагүй захиалгыг цуцлах
UPDATE orders
SET status = 'cancelled'
WHERE status = 'pending'
ORDER BY created_at ASC
LIMIT 10;
Өөрчлөлтийг шалгах
UPDATE ажиллуулсны дараа SELECT-ээр баталгаажуулах нь зуршил болгох хэрэгтэй:
UPDATE products
SET price = 5490.00
WHERE id = 1;
-- Шалгах
SELECT id, name, price FROM products WHERE id = 1;
+----+------------+---------+
| id | name | price |
+----+------------+---------+
| 1 | Утасны дэр | 5490.00 |
+----+------------+---------+
Transaction ашиглан аюулгүй өөрчлөх
Томоохон, чухал UPDATE-ийг transaction дотор ажиллуулвал буцаах боломжтой:
START TRANSACTION;
UPDATE products SET price = price * 1.2;
-- Үр дүнг шалгах
SELECT name, price FROM products;
-- Зөв бол хадгалах
COMMIT;
-- Буруу бол буцаах
-- ROLLBACK;
Transaction-ийн тухай 25-transactions хичээлд дэлгэрэнгүй үзнэ.
Жишээ: profile шинэчлэх
-- Хэрэглэгч нэрээ өөрчлөх
UPDATE profiles
SET
username = 'bold_dev',
last_active = CURRENT_DATE
WHERE id = 1;
-- Streak нэмэх
UPDATE profiles
SET
streak = streak + 1,
last_active = CURRENT_DATE
WHERE id = 1
AND last_active = DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY);
Дараагийн хичээлд:
DELETE командаар өгөгдөл устгах — WHERE нөхцөл заавал ашиглах, TRUNCATE-тэй ялгаа, аюулгүй устгах аргуудыг үзнэ.