MySQL刪除命令_DELETE


單表刪除語句:

DELETE [LOW_PRIORITY][IGNORE] FROM tbl_name

    [WHERE where_definition]
    [ORDER BY ...]
    [LIMIT row_count]
 
這里只對delete的常用參數及用法做出介紹。
 

說明:

low_priority:強制delete命令被延遲執行,直到沒有其它客戶端讀取本表時再執行。

ignore:使MySQL忽略delete執行所有的錯誤,而錯誤會以警告的方式返回。

order by...:表中記錄按照指定的順序進行刪除,此子句一般與limit聯用才有意義。

limit:指定刪除操作的指定行范圍。

注意:1)不能把ORDER BY或LIMIT與multiple-table UPDATE(多表更新)同時使用;

           2)當delete伴隨有多個限制條件時,是將多個限制條件執行查詢操作后,再執行對應的刪除操作。

 

(1)簡單單表刪除

語句:delete from table_name where [條件]

示例:

mysql> select * from staff;
+----+----------+-------+
| id | name     | slary |
+----+----------+-------+
|  1 | guoding  |  3200 |
|  2 | dingtao  |  2800 |
|  3 | haofugui | 10000 |
|  4 | guoming  |  3500 |
|  5 | haotian  |  2900 |
|  6 | fengfei  |  3200 |
|  7 | guoting  |  2600 |
|  8 | guoding  |  3200 |
|  9 | xiaohua  |  3200 |
+----+----------+-------+
9 rows in set (0.00 sec)

mysql> delete from staff where id=9; //通過where指定要刪除的記錄或記錄組合
Query OK, 1 row affected (0.00 sec)

mysql> select * from staff;
+----+----------+-------+
| id | name     | slary |
+----+----------+-------+
|  1 | guoding  |  3200 |
|  2 | dingtao  |  2800 |
|  3 | haofugui | 10000 |
|  4 | guoming  |  3500 |
|  5 | haotian  |  2900 |
|  6 | fengfei  |  3200 |
|  7 | guoting  |  2600 |
|  8 | guoding  |  3200 |
+----+----------+-------+
8 rows in set (0.00 sec)

 

(2)刪除-排序、限制

order by...一般與limit搭配使用才有意義。

如:刪除工資最低的記錄

mysql> select * from staff;
+----+----------+-------+
| id | name     | slary |
+----+----------+-------+
|  1 | guoding  |  3200 |
|  2 | dingtao  |  2800 |
|  3 | haofugui | 10000 |
|  4 | guoming  |  3500 |
|  5 | haotian  |  2900 |
|  6 | fengfei  |  3200 |
|  7 | guoting  |  2600 |
|  8 | guoding  |  3200 |
+----+----------+-------+
8 rows in set (0.00 sec)

mysql> delete from staff order by slary asc limit 1; //刪除工資最低的數據記錄
Query OK, 1 row affected (0.00 sec)

mysql> select * from staff;
+----+----------+-------+
| id | name     | slary |
+----+----------+-------+
|  1 | guoding  |  3200 |
|  2 | dingtao  |  2800 |
|  3 | haofugui | 10000 |
|  4 | guoming  |  3500 |
|  5 | haotian  |  2900 |
|  6 | fengfei  |  3200 |
|  8 | guoding  |  3200 |
+----+----------+-------+
7 rows in set (0.00 sec)

 

(3)連接刪除

假設有一個post表與staff對應:

mysql> select * from staff;
+----+----------+-------+
| id | name     | slary |
+----+----------+-------+
|  1 | guoding  |  3200 |
|  2 | dingtao  |  2800 |
|  3 | haofugui | 10000 |
|  4 | guoming  |  3500 |
|  5 | haotian  |  2900 |
|  6 | fengfei  |  3200 |
|  8 | guoding  |  3200 |
+----+----------+-------+
7 rows in set (0.00 sec)

mysql> select * from post;
+-----+----------+-------+
| num | name     | level |
+-----+----------+-------+
|  1 | haotian  | 3     |
|  2 | guoming  | 1     |
|  3 | haofugui | 2     |
+-----+----------+-------+
3 rows in set (0.00 sec)

現在需要從表staff中刪除在post沒有對應記錄的記錄:

mysql> delete staff from staff left join post on staff.name=post.name where post.name is NULL;
Query OK, 4 rows affected (0.00 sec)

mysql> select * from staff;
+----+----------+-------+
| id | name     | slary |
+----+----------+-------+
|  3 | haofugui | 10000 |
|  4 | guoming  |  3500 |
|  5 | haotian  |  2900 |
+----+----------+-------+
3 rows in set (0.00 sec)

在上述刪除命令中,也可以引入別名,方便輸入,如:

mysql> delete A from staff as A left join post as B on A.name=B.name where B.name is NULL;

注意:NULL不可以用等號(B.name=NULL),正確的應該是B.name is NULL

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM