跳转到主要内容
模块 8 · 第 2 课(共 4)课程中的30/57~10 min
模块课程(2/4)

更新和删除:UPDATE 和 DELETE

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加载中...

第 5 类(计算机)中每种产品的价格上涨 10%。单个 UPDATE 语句。

正在加载编辑器...
显示提示

SET 右侧的表达式可以引用该列本身:价格 * 1.10。

3 次尝试后可用的解决方案

复习练习

锻炼#sql.m8.l2.e2
尝试:0加载中...

删除所有评分低于 3 的评论(非常负面的评论)。

正在加载编辑器...
显示提示

评级 < 3 的地方。

3 次尝试后可用的解决方案