דילוג לתוכן המרכזי
מודול 8 · שיעור 2 מתוך 430/57 בקורס~10 min
שיעורי מודול (2/4)

עדכון ומחיקה: עדכן ומחק

UPDATE משנה שורות קיימות; DELETE מסיר אותם. שניהם חולקים את אותו כלל זהב, בסיסי: הסעיף WHERE מחליט איזה שורות לגעת. לשכוח את זה פירושו לשנות/למחוק את כל הטבלה.

לְעַדְכֵּן

SQL
UPDATE tabella
SET    colonna1 = nuovo_valore,
       colonna2 = altra_espressione
WHERE  condizione;

דוגמאות:

SQL
-- Aumenta del 10% i prezzi di tutti i prodotti della categoria 5 (Computer):
UPDATE products
SET    price = price * 1.10
WHERE  category_id = 5;

-- Aggiorna due colonne contemporaneamente:
UPDATE orders
SET    status     = 'shipped',
       shipped_at = NOW()
WHERE  id = 12;

SET col = espressione: הביטוי יכול להתייחס להנוכחי של השורה ערכים (price * 1.10), ויכול להשתמש גם ב-NOW(), NULL, או שאילתות משנה.

לִמְחוֹק

SQL
DELETE FROM tabella
WHERE  condizione;

דוגמאות:

SQL
-- Cancella tutte le recensioni con rating < 3:
DELETE FROM reviews
WHERE  rating < 3;

-- Cancella un ordine specifico:
DELETE FROM orders WHERE id = 999;

חוזר גם לכאן

כמו INSERT, UPDATE וDELETE מקבלים גם את RETURNING כדי שתדעו לפי מה הם פעלו:

SQL
DELETE FROM reviews
WHERE  rating < 3
RETURNING id, customer_id, rating;

שימושי לכניסה לצילום אחד של מה שנמחק/שונה.

מפתחות זרים ומחיקה

מנסה למחוק שורה שאליהם הפניה טבלה אחרת באמצעות מפתח זר מייצר שגיאה:

SQL
DELETE FROM customers WHERE id = 1;
-- ERROR: update or delete on table "customers" violates foreign key constraint
-- on table "orders"

פתרונות: מחק תחילה את שורות הצאצא, או הגדר את ה-FK עם ON DELETE CASCADE בעת יצירת הטבלה (אנחנו נסקור זאת ב- שיעור DDL הבא).

התור שלך

פעילות גופנית#sql.m8.l2.e1
ניסיונות: 0טוען...

הגדל ב-10% את המחיר של כל מוצר בקטגוריה 5 (מחשב). הצהרת עדכון אחת.

טוען עורך...
הצג רמז

הביטוי מימין ל-SET יכול להתייחס לעמודה עצמה: מחיר * 1.10.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#sql.m8.l2.e2
ניסיונות: 0טוען...

מחק כל ביקורת עם דירוג נמוך מ-3 (ביקורות שליליות מאוד).

טוען עורך...
הצג רמז

דירוג WHERE < 3.

הפתרון זמין לאחר 3 ניסיונות