mysql删除表中的记录
大家都知道,在MySQL中删除一个表中的记录有两种方法,一种是DELETE FROM TABLENAME WHERE... , 还有一种是TRUNCATE TABLE TABLENAME。
DELETE FROM
从 MySQL 数据表中删除数据,如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。可以在 WHERE 子句中指定任何条件。
语法:
DELETE FROM table_name WHERE column_name = some_value
TRUNCATE TABLE TABLENAME
删除表中的所有行,而不记录单个行删除操作。
语法:
TRUNCATE TABLE TABLENAME
区别:
1)DELETE FROM语句可以使用WHERE 对要删除的记录进行选择,TRUNCATE TABLE 将删除表中的所有记录,so,DELETE FROM更灵活。
2)如果DELETE FROM 不加WHERE条件,那么他和TRUNCATE TABLE 是一样的,唯一的区别就是DELETE FROM删除后返回被删除的记录数,而TRUNCATE TABLE返回的是0。
3)如果一个表中有自增的字段,这时使用DELETE和TRUNCATE删除表中所有数据时,如果表中有自增字段,则自增字段将起始值恢复为1,如果不想恢复,则可以在DELETE时加上WHERE的永真条件,使用DELETE FROM TABLENAME WHERE 1即可,但在这样做时会有一些缺点,即扫描表中的每一行记录,所以虽然可以保持自增的最大值,但他的执行成本要比没有WHERE条件的DELETE以及TRUNCATE大得多的多。
4)当表中的数据比较多时,删除全表数据建议使用TRUNCATE TABLE,TRUNCATE TABLE通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放,而DELETE FROM则是将数据一行一行的删除,每删除一行,还要在事务日志中为所删除的行记录一项,贼慢。
5)TRUNCATE TABLE删除后无法ROLLBACK,原因:TRUNCATE是一个DDL语句,将被隐式提交,不能使用ROLLBACK命令,而DELETE是DML语句,可以ROLLBACK(前提是DELETE操作没有COMMIT)
注:SQL语言包括四种主要程序设计语言类别的语句:
数据定义语言(DDL)主要表现为创建删除表,创建索引等;
数据操作语言(DML)主要表现为对数据的追加,更新查询;
数据控制语言(DCL)主要表现为授权(GRANT),撤销授权(REVOKE),拒绝授权(DENY);
事务控制语言(TCL)主要表现为设置保存点(SAVEPOINT),回滚(ROLLBACK),提交(COMMIT)。
总结:
DELETE可以通过WHERE语句选择要删除的记录,但执行得速度不快,可以返回被删除的记录数,在未提交情况下可以回滚。而TRUNCATE TABLE无法删除指定的记录,而且不能返回被删除的记录。但它执行得非常快。
mysql删除表中的记录的更多相关文章
- mysql 删除表中记录
一.清除mysql表中数据 delete from 表名;truncate table 表名;不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以 ...
- MYSQL操作数据表中的记录
36:操作数据表中的记录插入记录 INSERT INTO 表名 VALUES(); 或者INSERT 表名 VALUES(); UPDATE更新记录(单表更新) DELETE删除记录( ...
- sql记录去重(SQL查询或者删除表中重复记录)
.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select*from people where peopleIdin (select peopleIdfrom peopl ...
- PHP mysql 删除表中所有数据只保留一条
DELETE FROM `logs` WHERE wangzhi='www.juhutang.com' and id<>101072; 上面这段代码的意思为 删除表logs中 所有字段wa ...
- MSSQL sql server 2005/2008 row_number()函数应用之–删除表中重复记录,只保留一条不重复数据
转自:http://www.maomao365.com/?p=4942 下文主要讲述:重复数据只获取一条的方法 row_number函数在数据库中的功能是为每一行 按照一定的规则生成一个编号,我们常常 ...
- SqlServer删除表中重复记录
重复记录:有两个意义上的重复记录 一是完全重复的记录,也即所有字段均重复的记录: 二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略. 1.对于第一种重复,比较容易 ...
- mysql操作数据表中的记录1
一.插入记录INSERT mysql> create TABLE users( -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMEN ...
- mysql 删除表中多余的重复记录
=============================================== 2019/7/16_第1次修改 ccb_warlock == ...
- mysql删除表中重复数据,只保留一个最小的id的记录
语句: delete from table1 where id not in (select minid from (select min(id) as minid from table1 group ...
随机推荐
- AOP-切面是如何织入到目标对象中的
切面是如何织入到目标对象中的???这大概是每个人在学习AOP的过程中都会产生的疑问吧. 当我们在调用目标方法时候,也就是通过代理对象调用目标方法的时候,比如:JdkDynamicAopProxy会通过 ...
- mysql大数据量使用limit分页,随着页码的增大,查询效率越低下
1. 直接用limit start, count分页语句, 也是我程序中用的方法: select * from product limit start, count当起始页较小时,查询没有性能问题 ...
- 【bzoj5016】[Snoi2017]一个简单的询问 莫队算法
题目描述 给你一个长度为N的序列ai,1≤i≤N和q组询问,每组询问读入l1,r1,l2,r2,需输出 get(l,r,x)表示计算区间[l,r]中,数字x出现了多少次. 输入 第一行,一个数字N,表 ...
- 【转】Android应用如何跳转到应用市场详情页面
Android应用开发过程中,可能会有需求,比如:推广时跳转到应用市场下载应用,跳转到应用市场给自己的应用打分,跳转到应用市场更新自己的应用.那如何跳转到应用市场呢? 可能跳转的方法大家都是知道的,方 ...
- POJ 3294 Life Forms [最长公共子串加强版 后缀数组 && 二分]
题目:http://poj.org/problem?id=3294 Life Forms Time Limit: 5000MS Memory Limit: 65536K Total Submiss ...
- Docker实战(九)之数据库应用
目前,主流数据库包括关系型和非关系型两种. 关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念金额方法来处理数据库中的数据,支持复杂的事务处理和结构化查询.代表实现有MySQL .O ...
- Python自动化之clean方法前端调用clean方法的错误
obj.non_field_errors.0 源代码: NON_FIELD_ERRORS = '__all__' 如果在前端写 obj.errors.__all__.0直接就会报错 所以经过尝试得知, ...
- Spring整合MyBatis(一)MyBatis独立使用
摘要: 本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. MyBatis本是Apache的一个开源项目iBatis,2010年这 ...
- Angular动态表单生成(六)
动态表单之根据Json生成表单 我们在实际的使用中,动态表单往往是由服务器端的一系列配置,然后返回数据给客户端,最后客户端根据数据来动态的生成表单.那么怎么像我们上面所描述的这样,生成一个可以让我们的 ...
- CAN总线布线规范
CAN总线布线规范 摘要:今天的CAN总线已从汽车电子慢慢渗透入工业自动化,医疗,铁路等众多领域.据我们的数据统计,客户在使用CAN总线时约80%的问题均是由总线布局布线不合理导致,今天我们就来扒一扒 ...