MySQL DELETE 删除语句用法详解与示例
MySQL DELETE 语句用于从表中删除不再需要的记录。此查询从表中删除指定行并生成删除行数。我们可以在单个查询中删除多个记录,通过使用 delete 语句,我们还可以设定条件删除数据。
一旦我们使用这个查询删除了记录,数据将无法恢复。因此,在从表中删除任何记录之前,建议创建数据库的备份。数据库备份允许我们在将来需要时恢复数据。
语法格式
以下是 DELETE 语句删除数据的通用语法:
DELETE FROM table_name
[WHERE Clause]
上面的语句中,我们必须首先指定表名。其次,我们必须在WHERE子句中指定删除记录的条件,这是可选的。如果在语句中省略WHERE子句,该查询将从数据库表中删除整个记录。
如果要使用单个delete查询从多个表中删除记录,则必须使用delete语句添加JOIN子句。
如果希望在不知道已删除行数的情况下删除表中的所有记录,则必须使用提供更好性能的TRUNCATE table语句。
用命令行删除数据
这里我们将在 SQL DELETE 命令中使用 WHERE 子句来删除 MySQL 数据表 runoon_tbl 所选的数据。
DELETE 语句
以下实例将删除 runoon_tbl 表中 runoon_id 为3 的记录:
mysql> use RUNOON;
Database changed
mysql> DELETE FROM runoon_tbl WHERE runoon_id=3;
Query OK, 1 row affected (0.23 sec)
LIMIT 子句
Limit 子句用于限制从结果集中返回的行数,而不是获取表中的全部记录。有时我们想限制要从表中删除的行数;在这种情况下,我们可以使用LIMIT子句如下:
DELETE FROM table_name
WHERE condition
ORDER BY colm1, colm2, …
LIMIT row_count;
以下查询首先根据 runoon_title 的字母顺序对数据进行排序,然后从表中删除前三条记录:
mysql> DELETE FROM runoon_tbl ORDER BY runoon_title LIMIT 3;
JOIN 子句
JOIN 子句用于添加两个或多个表。每当我们想从单个查询中的多个表中删除记录时,我们将使用 DELETE 语句的 JOIN 子句。请参考以下查询:
mysql> DELETE Employees, Payment FROM Employees
INNER JOIN Payment
ON Employees.emp_id = Payment.emp_id
WHERE Employees.emp_id = 102;
使用 PHP 脚本删除数据
PHP使用 mysqli_query() 函数来执行SQL语句, 你可以在 SQL DELETE 命令中使用或不使用 WHERE 子句。
该函数与 mysql> 命令符执行SQL命令的效果是一样的。
MySQL DELETE 语句测试
以下PHP实例将删除 runoon_tbl 表中 runoon_id 为 3 的记录:
<?php
$dbhost = 'localhost'; // mysql服务器主机地址
$dbuser = 'root'; // mysql用户名
$dbpass = '123456'; // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('连接失败: ' . mysqli_error($conn));
}
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
$sql = 'DELETE FROM runoon_tbl
WHERE runoon_id=3';
mysqli_select_db( $conn, 'RUNOON' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
die('无法删除数据: ' . mysqli_error($conn));
}
echo '数据删除成功!';
mysqli_close($conn);
?>
执行前数据查询结果:
mysql> SELECT * FROM runoon_tbl WHERE runoon_id=3;
+-----------+---------------+---------------+-----------------+
| runoon_id | runoon_title | runoon_author | submission_date |
+-----------+---------------+---------------+-----------------+
| 3 | 学习 Python | RUNOON.COM | 2016-05-06 |
+-----------+---------------+---------------+-----------------+
1 row in set (0.00 sec)
执行后数据查询结果:
mysql> SELECT * FROM runoon_tbl WHERE runoon_id=3;
Empty set (0.00 sec)