有時候,會需要刪除某些行,或者修改其內容。這是候便需要用到DELETE語句和UPDATE語句。
1. DELETE 語句的基本格式如下所示:
DELETE FROM tbl_name WHERE which rows to delete;
其中,WHERE子句是可選的,它用於指定需要刪除掉哪些行。如果沒有WHERE 子句,那么將刪除表里面的所有行。這意味着,越簡單的DELETE語句越危險,例如下面的語句:
DELETE FROM tbl_name
它會徹底刪除表里的內容,因此務必要小心使用。
如果不清楚某條DELETE語句到底會刪除哪些行,那么最好把這條語句的WHERE子句放到一條SELECT 語句里,看看這條SELECT 語句能查出哪些行。這有助於確認:它們的確是你想要刪除的那些行,而且只有這些,不能多也不能少。
如下是一個使用示例:
mysql> select * from student; +--------+-----+------------+ | name | sex | student_id | +--------+-----+------------+ | Jim | M | 1 | | Tom | M | 2 | | Lily | F | 3 | | Lucy | F | 4 | | Travis | M | 5 | | Steve | M | 6 | +--------+-----+------------+ 6 rows in set (0.00 sec) mysql> delete from student where sex='F'; Query OK, 2 rows affected (0.01 sec) mysql> select * from student; +--------+-----+------------+ | name | sex | student_id | +--------+-----+------------+ | Jim | M | 1 | | Tom | M | 2 | | Travis | M | 5 | | Steve | M | 6 | +--------+-----+------------+ 4 rows in set (0.00 sec)
2. 如果想要修改已有記錄行,則需要使用UPDATE語句,其基本格式如下:
UPDATE tbl_name SET which columns to change WHERE which rows to update;
這里的WHERE子句的情況與DELETE語句里的相似,它是可選的,因此在沒有指定它時,會更新表里的每一行。例如,下面的語句會把每一位學生的 name 更改為 George:
mysql> UPDATE student SET name='George';
很顯然,必須謹慎對待這類查詢,所以通常情況下都需要加上一個WHERE子句,用它來更具體地指出需要更行那些行。
假設在 student 表里添加了一行,但忘記指定 sex 列的內容,默認地,該列會被設置為 'F':
mysql> INSERT INTO student (name) -> VALUES('Julian'); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM student; +--------+-----+------------+ | name | sex | student_id | +--------+-----+------------+ | Jim | M | 1 | | Tom | M | 2 | | Travis | M | 5 | | Steve | M | 6 | | Hellen | M | 7 | | Julian | F | 8 | +--------+-----+------------+ 6 rows in set (0.00 sec)
此時,可以用一條UPDATE語句來進行修復,其中包含一條WHERE子句,用以標識需要更新的那一行:
mysql> UPDATE student -> SET sex='M' -> WHERE name='Julian'; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT * FROM student; +--------+-----+------------+ | name | sex | student_id | +--------+-----+------------+ | Jim | M | 1 | | Tom | M | 2 | | Travis | M | 5 | | Steve | M | 6 | | Hellen | M | 7 | | Julian | M | 8 | +--------+-----+------------+ 6 rows in set (0.00 sec)