delete、truncate语句及例题

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

你可能感兴趣的:(MYSQL开发学习)