MySQL DELETE语句

时间:2019-02-04 12:52:26  来源:igfitidea点击:

MySQL DELETE语句用于从MySQL的表中删除单个记录或多个记录。

语法

最简单的MySQL DELETE语句的语法为:

DELETE FROM table
[WHERE conditions];

完整语法为:

DELETE [ LOW_PRIORITY ] [ QUICK ] [ IGNORE ] FROM table
[WHERE conditions]
[ORDER BY expression [ ASC | DESC ]]
[LIMIT number_rows];
参数说明
LOW_PRIORITY可选的。延迟删除,,直到没有进程从表中读取数据。LOW_PRIORITY可以与使用表级锁定的MyISAM,MEMORY和MERGE表一起使用。
QUICK可选的。在删除过程中不会合并索引index叶子,从而使MyISAM表的删除速度更快。
IGNORE可选的。忽略删除过程中遇到的所有错误。IGNORE是在MySQL 4.1.1中引入的。
table要从中删除记录的表。
WHERE conditions可选的。删除记录必须满足的条件。如果没有提供任何条件,则表中的所有记录都将被删除。
ORDER BY expression可选的。当限制要删除的记录数时,可以与LIMIT结合使用以对记录进行适当的排序。
LIMIT可选的。 最多删除 number_rows 行

MySQL DELETE语句示例

示例-只有一个条件的DELETE语句

DELETE FROM contacts
WHERE last_name = 'Johnson';

将从表中删除所有last_name为Johnson 的记录。

如果要知道删掉的行数,可以在执行删除操作之前,运行下面MySQL SELECT语句来确定将要删除的行数。

SELECT count(*)
FROM contacts
WHERE last_name = 'Johnson';

示例-有两个条件的DELETE语句

DELETE FROM contacts
WHERE last_name = 'Johnson'
AND contact_id < 1000;

将从表中删除所有last_name为'Johnson'并且customer_id小于1000的记录。


示例-在DELETE语句中使用LIMIT修饰符

LIMIT 操作符一般和 ORDER BY 一起使用。

DELETE FROM contacts
WHERE last_name = 'Johnson'
ORDER BY contact_id DESC
LIMIT 1;

找出contacts表中last_name为'Johnson'的记录,然后根据contact_id进行降序排序。
最后删掉第一条记录。


示例-在DELETE语句中使用EXISTS

还可以使用MySQL EXISTS子句来基于另一个表中的值删除一个表中的记录。

DELETE FROM suppliers
WHERE EXISTS
  ( SELECT *
    FROM customers
    WHERE customers.customer_id = suppliers.supplier_id
    AND customer_id > 500 );

将从供应者表中删除特定的记录,这些记录的supplier_id和客户表中的某一条记录customer_id相匹配, 并且该customer_id要大于500。