PHP 入门教程
MySQL UPDATE 与 DELETE
本教程共 65 篇 · 第 54 篇 · 更新于 2026-07-24 · 约 7 分钟阅读
PHPPHP8MySQLUPDATEDELETETRUNCATE软删除安全
54. MySQL UPDATE 与 DELETE
本节目标:掌握修改和删除数据的语法,理解安全操作规范,避免误删误改数据。
数据的修改和删除是高风险操作。本节讲解语法的同时,重点强调安全注意事项。
1. UPDATE 修改数据
-- 将 id 为 1 的用户年龄改为 26
UPDATE users SET age = 26 WHERE id = 1;
-- 修改多个字段
UPDATE users SET age = 26, status = 2 WHERE id = 1;
-- 将所有用户状态设为 1(无 WHERE,谨慎!)
UPDATE users SET status = 1;
Tip执行
UPDATE前,先用同样的WHERE条件执行SELECT,确认影响范围无误。
2. DELETE 删除数据
-- 删除 id 为 1 的用户
DELETE FROM users WHERE id = 1;
-- 删除所有数据(表结构保留)
DELETE FROM users;
Note
DELETE可以回滚(在事务中),但TRUNCATE更快且不可回滚。DROP TABLE会连表结构一起删除。
3. TRUNCATE 清空表
TRUNCATE TABLE users;
| 特性 | DELETE | TRUNCATE |
|---|---|---|
| 条件删除 | 支持 WHERE | 不支持 |
| 速度 | 慢(逐行删除) | 快(删除表再重建) |
| 自增 ID | 保留当前值 | 重置为 1 |
| 事务回滚 | 支持 | 不支持 |
| 触发器 | 会触发 | 不会触发 |
4. PHP 安全更新示例
<?php
$pdo = new PDO('mysql:host=localhost;dbname=my_shop;charset=utf8mb4', 'root', '123456');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 安全的更新:必须带 WHERE
$userId = $_POST['id'] ?? 0;
$newAge = $_POST['age'] ?? 0;
if ($userId <= 0 || $newAge <= 0) {
die('参数错误');
}
$stmt = $pdo->prepare("UPDATE users SET age = :age WHERE id = :id");
$stmt->execute([':age' => $newAge, ':id' => $userId]);
echo '影响了 ' . $stmt->rowCount() . ' 行';
Note
rowCount()返回受影响的行数。如果返回 0,可能是条件不匹配或数据无变化。
5. PHP 安全删除示例
<?php
$userId = $_POST['id'] ?? 0;
if ($userId <= 0) {
die('无效的用户ID');
}
// 先确认用户存在
$check = $pdo->prepare("SELECT id FROM users WHERE id = :id");
$check->execute([':id' => $userId]);
if (!$check->fetch()) {
die('用户不存在');
}
// 执行删除
$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
$stmt->execute([':id' => $userId]);
echo '删除成功';
6. 软删除(推荐做法)
真实项目中很少物理删除数据,而是添加 deleted_at 字段标记删除。
ALTER TABLE users ADD COLUMN deleted_at DATETIME DEFAULT NULL;
-- "删除"用户
UPDATE users SET deleted_at = NOW() WHERE id = 1;
-- 查询时过滤已删除
SELECT * FROM users WHERE deleted_at IS NULL;
Tip软删除保留了数据,方便恢复和审计。配合唯一索引时,需注意已删除记录的冲突问题。
小结
UPDATE 和 DELETE 必须带 WHERE,否则影响全表。养成先 SELECT 后修改的习惯。生产环境建议使用软删除。
来源:参考了 runoob「PHP MySQL Update/Delete」、php-the-right-way,改写后所得。