MySQL / UPDATE

UPDATE

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

Үндсэн синтакс

sql
UPDATE хүснэгт
SET багана = шинэ_утга
WHERE нөхцөл;

Жишээ:

sql
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)

Олон багана зэрэг өөрчлөх

sql
UPDATE products
SET
  price    = 5490.00,
  stock    = 45,
  is_active = TRUE
WHERE id = 1;

SET дотор баганыг таслалаар тусгаарлан олныг нэгэн зэрэг өөрчилж болно.


Одоогийн утган дээр үндэслэн өөрчлөх

sql
-- Үнийг 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-тэй хамт ашиглах

UPDATEWHERE-ийн бүх синтакс хэрэглэгдэнэ:

sql
-- Олон 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-ийн аюул

sql
-- АЮУЛГҮЙ: зөвхөн 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 дотор):

sql
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

Зарим мөрийг л шинэчлэхэд хэрэгтэй:

sql
-- Хамгийн хуучин 10 дуусгаагүй захиалгыг цуцлах
UPDATE orders
SET status = 'cancelled'
WHERE status = 'pending'
ORDER BY created_at ASC
LIMIT 10;

Өөрчлөлтийг шалгах

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

sql
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 дотор ажиллуулвал буцаах боломжтой:

sql
START TRANSACTION;

UPDATE products SET price = price * 1.2;

-- Үр дүнг шалгах
SELECT name, price FROM products;

-- Зөв бол хадгалах
COMMIT;

-- Буруу бол буцаах
-- ROLLBACK;

Transaction-ийн тухай 25-transactions хичээлд дэлгэрэнгүй үзнэ.


Жишээ: profile шинэчлэх

sql
-- Хэрэглэгч нэрээ өөрчлөх
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-тэй ялгаа, аюулгүй устгах аргуудыг үзнэ.