DELETE
功能描述
从表中删除行。
注意事项
- 执行该语句的用户需要有表的DELETE权限或者DELETE ANY TABLE的系统权限。
- DELETE事务提交是默认关闭的。会话退出时,需要显式COMMIT,否则记录将丢失。
语法格式
从表中删除行。
DELETE FROM [ schema_name. ]table_name [ WHERE condition ] [ ORDER BY { column_name [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ] } [ , ... ] ] [ LIMIT [ start, ] count | LIMIT count OFFSET start | OFFSET start[ LIMIT count ] ]
删除表中与另外一个表匹配的行记录。
DELETE table_ref_list FROM join_table
或
DELETE FROM table_ref_list USING join_table
- table_ref_list子句:
[ schema_name.]table_name
- join_table 子句:
table_reference [LEFT [OUTER] | RIGHT [OUTER] | INNER ] JOIN table_reference ON conditional_expr
table_reference 子句:{ [ schema_name. ]table_name [ [AS] alias ] | [ schema_name. ]view_name [ [AS] alias] | ( select query ) [ [AS] alias ] | join_table }
参数说明
- [ schema_name. ]table_name
要删除数据的表的名称。
- condition
指定删除数据要满足的条件。
- ORDER BY
指定结果集用于排序的字段。
- ASC | DESC
指定ORDER BY排序的方向,是升序或降序排序。
- NULLS FIRST | NULLS LAST
指定ORDER BY列中NULL值的排序位置, FIRST表示将包含NULL值的行排在最前面, LAST表示将包含NULL值的行排在最后面, 若不指定该选项, ASC默认为NULLS LAST, DESC默认为NULLS FIRST。
- start,count
count指定要返回的最大行数,而start指定在返回行之前要跳过的行数。在两者都被指定时,在开始计算要返回的count行之前会跳过start行。
- table_ref_list
待删除数据的表,不支持临时表出现在该列表中。
- table_reference
查询表、视图、子查询。
- join_table
用于关联查询的一组表集合。
- LEFT [OUTER] JOIN用于取左表的全集,右表不匹配的,以null值代替。
- RIGHT [OUTER] JOIN用于取右表的全集,左表不匹配的,以null值代替。
- [INNER] JOIN用于取两表的交集。
- conditional_expr
指定两表关联要满足的条件。
- table_reference
待删除的数据表子句。
- table_name
要删除数据的表的名称。
- view_name
视图名称。
- select query
子查询作为待删除数据表。
示例
- 批量删除表training中staff_id和表education中staff_id相同的记录。
--删除表education、training。 DROP TABLE IF EXISTS education; DROP TABLE IF EXISTS training;
--创建表education、training。 CREATE TABLE education(staff_id INT, first_name VARCHAR(20)); CREATE TABLE training(staff_id INT, first_name VARCHAR(20));
--插入记录。 INSERT INTO education VALUES(1, 'ALICE'); INSERT INTO education VALUES(2, 'BROWN'); INSERT INTO training VALUES(1, 'ALICE'); INSERT INTO training VALUES(1, 'ALICE'); INSERT INTO training VALUES(1, 'ALICE'); INSERT INTO training VALUES(3, 'BOB');
--批量删除表training中staff_id和表education中staff_id相同的记录。 DELETE training FROM education JOIN training ON education.staff_id = training.staff_id; 或者 DELETE FROM training USING education JOIN training ON training.staff_id = education.staff_id;
- 删除表training中staff_id为10的用户的“INFORMATION SAFETY”培训记录。
--删除表training。 DROP TABLE IF EXISTS training;
--创建表training。 CREATE TABLE training(staff_id INT NOT NULL,course_name CHAR(50),course_start_date DATETIME, course_end_date DATETIME,exam_date DATETIME,score INT);
--向表training中插入记录1。 INSERT INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) VALUES(10,'SQL majorization','2017-06-15 12:00:00','2017-06-20 12:00:00','2017-06-25 12:00:00',90); --向表training中插入记录2。 INSERT INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) VALUES(10,'INFORMATION SAFETY','2017-06-20 12:00:00','2017-06-25 12:00:00','2017-06-26 12:00:00',95); --向表training中插入记录3。 INSERT INTO training(staff_id,course_name,course_start_date,course_end_date,exam_date,score) VALUES(10,'MASTER ALL KINDS OF THINKING METHONDS','2017-07-15 12:00:00','2017-07-20 12:00:00','2017-07-25 12:00:00',97); --删除表training中同时匹配course_name='INFORMATION SAFETY'和staff_id=10的记录。 DELETE FROM training WHERE course_name='INFORMATION SAFETY' AND staff_id=10; --提交事务。 COMMIT;
- 删除表training的全部数据。
--删除表training的全部记录。 DELETE FROM training; --提交事务。 COMMIT;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」关注作者【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。评论