Kodokon kodokon.com

修改数据:INSERT、UPDATE、DELETE

安全地添加、修改和删除行,避开遗忘 WHERE 这个经典陷阱。

8 分钟 · 3 题

在 Kodokon 中打开本课

到目前为止,你只读取过数据。现在我们来讲写入。INSERT INTO 添加一行:你在圆括号之间列出各列,然后在 VALUES 之后按相同顺序写上对应的值。明确写出列名是个好习惯:即使表的结构日后发生变化,这条查询依然有效。

SQL
INSERT INTO books (id, title, author, genre, year, price)
VALUES (8, 'Ravage', 'Barjavel', 'sf', 1943, 7.5);

SELECT * FROM books WHERE id = 8;
添加第 8 本书,然后进行检查

UPDATE 修改已存在的行:在 SET 之后,你指明列和它的新值;在 WHERE 之后,你指定哪些行会受到影响。这个 WHERE 至关重要:正是它锁定了这次修改的目标。

SQL
UPDATE books SET price = 8.9 WHERE id = 8;

SELECT title, price FROM books WHERE id = 8;
Ravage 的价格从 7.5 变为 8.9

DELETE FROM 删除行。和 UPDATE 一样,WHERE 子句指定要删除的行;其余的行保持不变。让我们删除刚才添加的那本书,然后检查一下数量。

SQL
DELETE FROM books WHERE id = 8;

SELECT COUNT(*) FROM books;
回到 7 行:原始的表完好无损
SQL
BEGIN;
DELETE FROM books WHERE genre = 'sf';
SELECT COUNT(*) FROM books;
ROLLBACK;
SELECT COUNT(*) FROM books;
事务期间是 3 行,ROLLBACK 之后是 7 行

知识检测

确认你已牢记本课的重点内容。

  1. 查询 DELETE FROM books; 在没有 WHERE 的情况下运行会做什么?
    • 它删除表的第一行
    • 它删除表的所有行
    • 它导致一个语法错误
  2. 哪条查询把 id 为 3 的书的价格改为 6.9?
    • UPDATE books SET price = 6.9 WHERE id = 3;
    • INSERT INTO books SET price = 6.9;
    • SELECT price = 6.9 FROM books WHERE id = 3;
  3. 在一个事务中,ROLLBACK 有什么用?
    • 把修改正式提交
    • 撤销自 BEGIN 以来所做的全部修改
    • 删除受影响的表