delete、truncate语句及例题

本文介绍MySQL中DELETE语句的基本语法及注意事项,包括如何指定过滤条件、使用子查询和表达式等,并通过示例说明如何从单个或多个表中删除数据。此外,还介绍了TRUNCATE语句快速清空表的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DELETE语句
只能整行删除,不能只删除行中的某一个数据

一、语法

Single-Table Syntax

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...--------------------要删除的表----数据源
    USING table_references
    [WHERE where_condition]--------------过滤条件(如果没有where条件,则删除表中所有行)一定要带where条件
    [ORDER BY ...]-----------按照顺序删除
    [LIMIT row_count]----------限制删除的行数
where条件:
1.可以使用子查询
注意事项:子查询不能是要删除的表
2.可以表达式、函数等

Multiple-Table Syntax

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

Or:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]

二、例题:

例 1: 删除44号球员的罚款

mysql> delete from PENALTIES where PLAYERNO=44;
Query OK, 4 rows affected (0.01 sec)

例2: 删除球员,条件是他们加入俱乐部的年份晚于来自于Stratford的球员加入俱乐部的平均年份


注意,在WHERE子句的子查询中,不允许访问要删除行的表

mysql> delete from PLAYERS where JOINED > (select avg(JOINED) from PLAYERS where TOWN='Stratford');
ERROR 1093 (HY000): You can't specify target table 'PLAYERS' for update in FROM clause

例4: 从teams和matches表中删除所有3号球队的行
从多个表中删除行
如果FROM中的表有别名,在DELETE子句中只能使用表别名

mysql> delete from TEAMS,MATCHES where TEAMS.TEAMNO=MATCHES.TEAMNO and TEAMS.TEAMNO=3;

三、TRUNCATE语句

快速清空整张表----相当于delete不加where条件
原理:将表行尾的的指针直接指向0,这样Mysql认为该表数据已经清空,真实数据未清空,Mysql后台程序会自动清理该表的数据

语法:
TRUNCATE [TABLE] tbl_name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值