MySQL数据删除语句

x33g5p2x  于2021-10-04 转载在 Mysql  
字(1.8k)|赞(0)|评价(0)|浏览(473)

在 MySQL中,可以使用 DELETE 语句来删除表的一行或者多行数据。

基础语法

删除单个表中的数据

使用 DELETE 语句从单个表中删除数据,语法格式为:

DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句]

语法说明如下:

  • <表名>:指定要删除数据的表名。
  • ORDER BY 子句:可选项。表示删除时,表中各行将按照子句中指定的顺序进行删除。
  • WHERE 子句:可选项。表示为删除操作限定删除条件,若省略该子句,则代表删除该表中的所有行。
  • LIMIT 子句:可选项。用于告知服务器在控制命令被返回到客户端前被删除行的最大值。

注意:在不使用 WHERE 条件的时候,将删除所有数据。

根据条件删除表中的数据

【实例 2】在 tb_courses_new 表中,删除 course_id 为 4 的记录,输入的 SQL 语句和执行结果如下所示。

mysql> DELETE FROM tb_courses
    -> WHERE course_id=4;
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM tb_courses;
+-----------+-------------+--------------+------------------+
| course_id | course_name | course_grade | course_info      |
+-----------+-------------+--------------+------------------+
|         1 | Network     |            3 | Computer Network |
|         2 | Database    |            3 | MySQL            |
|         3 | Java        |            4 | Java EE          |
+-----------+-------------+--------------+------------------+
3 rows in set (0.00 sec)

由运行结果可以看出,course_id 为 4 的记录已经被删除。

清空表数据

mysql清空表可以用delete和truncate两个命令来完成:

delete

① 语法:delete from table_name;

② 示例:DELETE FROM order;

  1. truncate

① 语法:truncate table table_name;

② 示例:TRUNCATE TABLE order;
1.
区别

① 使用delete清空表中的记录,内容的ID仍然从删除点的ID继续建立,而不是从1开始。而truncate相当于保留了表的结构而重新建立了一张同样的新表。delete的效果有点像将mysql表中所有记录一条一条删除到删完。

② 效率上truncate比delete快。但truncate删除后不记录mysql日志,不可以恢复数据。

复杂删除案例

案例1 其他表作为条件

DELETE FROM t_student WHERE id in (
SELECT a.studentID FROM  t_student_gradeclass_course as a ,t_grade_class as b
WHERE a.gradeClassID=b.id and  grade='十六年级'
)

案例2 自己表作为条件删除自己表数据

错误案例

DELETE FROM t_student_gradeclass_course WHERE id in (
SELECT a.id FROM  t_student_gradeclass_course as a ,t_grade_class as b
WHERE a.gradeClassID=b.id and  grade='十六年级'
)

报错: > 1093 - You can’t specify target table ‘t_student_gradeclass_course’ for update in FROM clause

翻译: 你不能在表子句中指定更新的目标表’t_student_gradeclass_course’

因为在mysql中不允许修改的表作为,修改表where的子查询,oracle就可以

解决办法 : 将修改条件放入一个虚拟表中就行了

正确案例

DELETE FROM t_student_gradeclass_course WHERE id in (
		-- 虚拟表
		SELECT id FROM(
					-- 删除条件
				SELECT a.id FROM  t_student_gradeclass_course as a ,t_grade_class as b
				WHERE a.gradeClassID=b.id and  grade='十六年级'
		) as a
)

相关文章

微信公众号

最新文章

更多