MySQL DELETE 语句(附带实例)
                           
天天向上
发布: 2025-02-18 00:24:20

原创
739 人浏览过

在 MySQL 中,DELETE 语句用于从数据库表中删除一条或多条记录。你可以通过 DELETE 语句删除符合条件的记录,或者删除表中的所有记录。

以下是 DELETE 语句的详细讲解,附带实用的实例:

1. 基本的 DELETE 语法

基本语法

DELETE FROM table_name
WHERE condition;
  • table_name:你要删除记录的表名。
  • condition:删除记录的条件。如果没有 WHERE 子句,所有记录将被删除。

实例:删除单条记录

假设你有一个 users 表,包含 user_id, username, email, 和 age 字段。以下查询将删除 user_id 为 1 的记录。

DELETE FROM users
WHERE user_id = 1;
  • 这个查询删除 user_id 为 1 的用户记录。

2. 删除多个记录

你可以通过 WHERE 子句指定多个条件,删除满足条件的多条记录。

实例:删除符合多个条件的记录

DELETE FROM users
WHERE age > 30 AND username LIKE 'john%';
  • 这个查询将删除 age 大于 30 且 usernamejohn 开头的所有用户记录。

3. 删除所有记录(不删除表结构)

如果你想删除表中的所有记录,可以省略 WHERE 子句。请注意,表结构和列定义会保留,只是数据会被删除。

实例:删除所有记录

DELETE FROM users;
  • 这个查询将删除 users 表中的所有记录,但不会删除表本身。

4. 使用 LIMIT 限制删除的记录数量

LIMIT 子句可以用于限制删除操作的记录数。这对于删除大量数据时非常有用,能够分批次删除数据。

实例:删除前 5 条记录

DELETE FROM users
WHERE age > 30
LIMIT 5;
  • 这个查询将删除 age 大于 30 的前 5 条记录。

5. 使用 ORDER BYLIMIT 配合删除特定记录

你可以通过 ORDER BY 对记录进行排序,然后使用 LIMIT 限制删除的记录数量。这对于根据特定顺序删除记录很有用。

实例:按 user_id 排序删除前 5 条记录

DELETE FROM users
WHERE age > 30
ORDER BY user_id ASC
LIMIT 5;
  • 这个查询将按 user_id 升序排列,删除 age 大于 30 的前 5 条记录。

6. 删除所有记录但保留表结构(使用 TRUNCATE

TRUNCATE 是一个更高效的操作,它删除表中的所有记录,但与 DELETE 不同,TRUNCATE 会重置表的自增长计数器,并且操作速度更快。

实例:删除所有记录但保留表结构

TRUNCATE TABLE users;
  • 这个查询将删除 users 表中的所有记录,但不会删除表本身,也不会记录每一条删除的记录(与 DELETE 不同)。

7. 使用子查询删除数据

你可以使用子查询来删除表中的记录。子查询的结果将作为条件删除数据。

实例:根据子查询删除记录

假设你有一个 orders 表和一个 users 表,并且你想删除所有没有订单的用户:

DELETE FROM users
WHERE user_id NOT IN (SELECT user_id FROM orders);
  • 这个查询删除 users 表中没有任何订单的用户记录。

8. 删除操作时使用事务

如果你在删除记录时涉及多个操作,可以使用事务来确保原子性,这样如果出现错误,可以回滚操作,避免不一致的数据库状态。

实例:使用事务删除记录

START TRANSACTION;

DELETE FROM users
WHERE user_id = 1;

DELETE FROM orders
WHERE user_id = 1;

COMMIT;
  • 这个查询使用事务来删除 user_id 为 1 的用户及其相关的订单记录。若事务中的任何一条操作失败,可以使用 ROLLBACK 来回滚事务。

9. PHP 脚本删除记录

如果你通过 PHP 脚本来执行 DELETE 操作,可以使用 mysqliPDO 来执行 SQL 查询。

实例:使用 mysqli 删除记录

<?php
$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

$sql = "DELETE FROM users WHERE user_id = 1";
if ($mysqli->query($sql) === TRUE) {
    echo "Record deleted successfully";
} else {
    echo "Error: " . $sql . "<br>" . $mysqli->error;
}

$mysqli->close();
?>
  • 这个 PHP 示例通过 mysqli 连接 MySQL 数据库,执行删除操作。

实例:使用 PDO 删除记录

<?php
try {
    $pdo = new PDO("mysql:host=localhost;dbname=database", "username", "password");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "DELETE FROM users WHERE user_id = 1";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();

    echo "Record deleted successfully";
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

$pdo = null;
?>
  • 这个 PHP 示例通过 PDO 连接 MySQL 数据库,执行删除操作,并且使用预处理语句来防止 SQL 注入。

10. 注意事项

  • 删除操作不可逆:在执行 DELETE 操作之前,请确保备份好数据,尤其是在删除大量数据时。
  • 使用 WHERE 子句:如果不使用 WHERE 子句,所有记录将被删除。因此,务必小心操作。
  • 索引和外键约束:在删除数据时,要特别注意索引和外键约束,可能会导致删除失败,或者你需要在删除前禁用外键约束。

总结

DELETE 语句用于删除数据库表中的数据,常见的操作包括:

  1. 删除单条或多条记录。
  2. 使用 WHERE 子句过滤删除条件。
  3. 使用 LIMIT 限制删除记录的数量。
  4. 使用 ORDER BYLIMIT 配合删除特定记录。
  5. 使用子查询删除数据。
  6. 使用事务确保删除操作的原子性。

对于 Web 开发中的数据删除,通常通过 PHP 脚本结合 mysqliPDO 执行 DELETE 操作时,需要确保安全性(避免 SQL 注入),并进行适当的错误处理。

发表回复 0

Your email address will not be published. Required fields are marked *