删除数据库内所有数据,但保留属性的方式
1、truncate
Session session=getSession();
Query query=session.createSQLQuery("truncate table gantDemo");
2、delete
Session session=getSession();
List<gantDemo> tasks=null;
Query query=session.createQuery("from gantDemo");
tasks=query.list();
for (gantDemo task : tasks) {
session.delete(task);
}
区别:1、delete是一行一行操作,并且把记录都存进日志文件,而truncate是对每一页进行操作,在日志中,仅仅记录释放页面的这个动作,而不记录每一行。所以
delete后再添加数据时,索引会一直递增。而truncate时,索引会重新计数。
2、Truncate比Delete使用锁通常较少。
DELETE由于是一行一行删除,所以需要对处理的行进行加锁,而且是行锁。TRUNCATE操作由于是对页操作,所以只需要申请页锁或者表锁。