DELETE 語句用於刪除記錄,語法如下:(與「UPDATE」 語法較為相似)
DELETE [IGNORE] FROM 表名 WHERE 条件1, 条件2, ..... ORDER BY ...... LIMIT ......; -- 使用 IGNORE 关键字时,当存在外键约束组织我们删除记录,那么则会忽略删除该条数据 -- 使用 WHERE 子句删除条件范围内的记录;如果不使用 WHERE 子句,则是删除全表范围 -- 使用 ORDER BY 关键字,将被删除的记录进行排序以后,产出符合条件的一些数据 -- 使用 LIMIT 关键字依然是分页的意思,
“ DELETE” 語句執行的順序:FROM ---> WHERE ---> ORDER BY ---> LIMIT ---> DELETE
刪除10 部門中,工齡超過20 年的員工記錄 (這個比較簡單,只牽涉到一張表)
DELETE FROM t_emp WHERE deptno = 10 AND DATEDIFF(NOW(), hiredate)/365 >= 20;
刪除20 部門中薪資最高的員工記錄(除了使用WHERE 子句過濾出20 部門中員工之外,還需要根據薪資進行降序排列,並刪除最高的記錄)
DELETE FROM t_emp WHERE deptno = 20 ORDER BY sal+IFNULL(comm,0) DESC LIMIT 1;
"DELETE" 語句的語法還是很簡單的,在有了"UPDATE" 語句的基礎之後再來看待"DELETE" 語句就比較好理解了,因為這些子句都差不太多。
因為相關子查詢效率非常的低下,所以我們可以利用表連接的方式來提高 DELETE 語句的刪除效率。
「DELETE」 SQL語句的內連接語法如下:
DELETE 表1, ...... FROM 表1 JOIN 表2 ON 条件 WHERE 条件1, 条件2, ...... ORDER BY ...... LIMIT ...... -- 需要注意的是,这里的 "WHERE"、"ORDER BY"、"LIMIT" 子句都是可选条件
刪除SALES 部門和該部門的全部員工記錄
分析:刪除兩張表的記錄
分析:使用一個DELETE 語句刪除兩個表記錄,可以使用表連接的方式(參考上文語法)
#分析:屬於SALES 部門的員工記錄未知,需要先試用條件查詢過濾出SALES 部門的員工記錄
DELETE e, d FROM t_emp e JOIN t_dept d ON e.deptno=d.deptno WHERE d.dname="SALES";##DELETE 語句的表連接練習②刪除每個低於部門平均底薪的員工記錄分析:仍然使用表連接,因為首先需要去查詢部門進行分組,查詢部門的編號與平均底薪。 分析:將查詢到的結果集作為一張表和"員工表" 做連接,連接條件就是員工的"部門編號",還有一個條件就是員工的月薪要低於部門的平均底薪
DELETE e FROM t_emp e JOIN (SELECT deptno, AVG(sal) AS avg FROM t_emp GROUP BY deptno) t ON e.deptno=t.deptno AND e.sal < t.avg;DELETE 語句的表格連接練習③刪除員工「KING」 和他的下屬的員工記錄,用表格連接來實現分析:用"WHERE" 子句查找"ename" 為"KING" 的員工記錄分析:將查到的"KING" 的員工記錄與員工表的"mgr" 字段為"KING" 的"員工編號" 做連接
DELETE e FROM t_emp e JOIN (SELECT empno FROM t_emp WHERE ename="KING") t ON e.mgr=t.empno OR e.empno=t.empno;DELETE 語句的表連接(外連接)“DELETE” 語句的表連接既可以是內連接,也可以是外連接。 “DELETE” SQL語句的外連接語法如下:
DELETE 表1, ...... FROM 表1 [LEFT | RIGHT] JOIN 表2 ON 条件 WHERE 条件1, 条件2, ...... ORDER BY ...... LIMIT ...... -- 需要注意的是,这里的 "WHERE"、"ORDER BY"、"LIMIT" 子句都是可选条件 -- 除了 在连接表 的时候选择 "LEFT JOIN" 与 "RIGHT JOIN" 的区别之外,其他的与内连接的语法一样DELETE 語句的外連接練習刪除 “SALES” 部門的員工,以及沒有部門的員工。 分析:使用 "左外連接" 與 部門表進行連接,因為 "員工表" 中的 "張三" 是沒有部門的;所以要保留下來,與部門表進行連接。
DELETE e FROM t_emp e LEFT JOIN t_dept d ON e.deptno=d.deptno WHERE d.dname="SALES" OR e.deptno IS NULL速刪除表中的全部資料「DELETE」 語句是在交易機制下刪除記錄(什麼是「交易機制」 會在後續文章詳細介紹),刪除記錄之前,先將刪除的記錄儲存到日誌檔案裡,然後再刪除記錄。當使用「DELETE」刪除大量資料時,交易機制會導致刪除速度變慢。 “TRUNCATE” 語句在 “交易機制” 之外刪除記錄,執行速度要遠遠超過 “DELETE” 語句。 “TRUNCATE” 語法如下:
TRUNCATE TABLE 表名; -- 需要注意的是,"TRUNCATE" 语句一次只能清空一张数据表,不能够一次性的清空多张数据表。
TRUNCATE TABLE t_emp ;
#
語句 | # 功能 |
---|---|
drop 語句 | #刪除資料庫和表格 drop 資料庫名稱; drop 表名; |
delete 語句 | 刪除表中的記錄 delete from weibo_user where username=「xiaomu」; 注意:delete語句中如果沒有加入where條件,將會將表格中的所有記錄全部刪除 |
修改和更新語句,更新時也會覆寫(刪除)原來的值 | update set與where搭配使用,變更某些記錄 注意::update set語句中如果沒有where子句指定其變更的條件,將會把資料庫中這個欄位的所有值都更新 |
刪除欄位:alter table 表名drop 欄位名稱; | 刪除主鍵:alter table 表名drop primary key ; 更新表名:alter table 表名rename to 新表名; |
以上是MySQL資料庫資料如何刪除的詳細內容。更多資訊請關注PHP中文網其他相關文章!