עדכון ומחיקה (UPDATE, DELETE)

UPDATE - עדכון נתונים

תחביר בסיסי

UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;

⚠️ זהירות: תמיד השתמשו ב-WHERE! בלעדיו תעדכנו את כל הטבלה!


דוגמאות UPDATE

-- עדכון שדה בודד
UPDATE users 
SET status = 'active' 
WHERE id = 5;

-- עדכון מספר שדות
UPDATE products 
SET price = 99.99, stock = 50 
WHERE id = 10;

-- עדכון עם חישוב
UPDATE products 
SET price = price * 1.10  -- העלאה של 10%
WHERE category = 'electronics';

-- עדכון לפי תנאי מורכב
UPDATE orders 
SET status = 'cancelled' 
WHERE status = 'pending' 
  AND created_at < DATE_SUB(NOW(), INTERVAL 7 DAY);

UPDATE עם JOIN

-- עדכון לפי נתונים מטבלה אחרת
UPDATE orders o
JOIN users u ON o.user_id = u.id
SET o.discount = 10
WHERE u.membership = 'premium';

DELETE - מחיקת נתונים

תחביר בסיסי

DELETE FROM table_name
WHERE condition;

⚠️ זהירות: תמיד השתמשו ב-WHERE! בלעדיו תמחקו את כל הטבלה!


דוגמאות DELETE

-- מחיקת שורה בודדת
DELETE FROM users WHERE id = 5;

-- מחיקת לפי תנאי
DELETE FROM orders 
WHERE status = 'cancelled';

-- מחיקת עם LIMIT
DELETE FROM logs 
WHERE created_at < '2023-01-01'
LIMIT 1000;

TRUNCATE vs DELETE

פקודה מה עושה מהירות ניתן לבטל?
DELETE FROM table מוחק שורות אחת אחת איטי כן
TRUNCATE TABLE table מאפס את כל הטבלה מהיר לא
-- מחיקת כל השורות (איטי, עם לוג)
DELETE FROM logs;

-- איפוס הטבלה (מהיר, ללא לוג)
TRUNCATE TABLE logs;

טיפים לבטיחות

  1. תמיד SELECT לפני UPDATE/DELETE

    -- קודם בדקו מה ייפגע
    SELECT * FROM users WHERE status = 'inactive';
    
    -- ואז עדכנו/מחקו
    DELETE FROM users WHERE status = 'inactive';
  2. השתמשו ב-LIMIT

    DELETE FROM logs WHERE year < 2020 LIMIT 100;
  3. עבדו בטרנזקציה

    START TRANSACTION;
    DELETE FROM users WHERE id = 5;
    -- בדקו שהכל בסדר, ואז:
    COMMIT;  -- או ROLLBACK לביטול

← פונקציות צבירה | המשך לטרנזקציות →

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. מה יקרה ב-DELETE FROM users; בלי WHERE?

    1. השורה הראשונה תימחק
    2. שגיאה
    3. כלום
    4. כל השורות בטבלה יימחקו
    הצגת התשובה

    תשובה ד. תמיד בודקים קודם עם SELECT ... WHERE, ואז מוחקים.

  2. מה הדרך הבטוחה לפני UPDATE גדול?

    1. להריץ קודם SELECT עם אותו WHERE ולבדוק מה ישתנה, או לעבוד בטרנזקציה
    2. למחוק ולהכניס מחדש
    3. לכבות את המסד
    4. לרוץ ישר
    הצגת התשובה

    תשובה א. בטרנזקציה אפשר לעשות ROLLBACK אם משהו השתבש.