truncate语句
--truncate table '表名'
--这样就利用SQL语句清空了该数据表,而不保留日志
TRUNCATE语句
TRUNCATE语句和DELETE语句都可以用来删除数据表中的数据,但是二者是有区别的。语法如下:
TRUNCATE TABLE T_LOGIN;
MERGE语句
MERGE 可以同时对数据表进行赠加和修改操作。
省略增加的操作
MERGE INTO LOGININFO USING MANAGERINFO ON(LOGININFO.USERID=MANAGERINFO.ManagerID) WHEN MATCHED THEN UPDATE SET LOGININFO.USERNAME=MANAGERINFO.LoginName;
省略修改的操作
MERGE INTO LOGININFO USING MANAGERINFO ON(LOGININFO.USERID=MANAGERINFO.ManagerID) WHEN NOT MATCHED THEN INSERT VALUES (MANAGERINFO.ManagerID,MANAGERINFO.LoginName,MANAGERINFO.LoginPassword);
增加和修改同时进行
MERGE INTO LOGININFO USING MANAGERINFO ON(LOGININFO.USERID=MANAGERINFO.ManagerID) WHEN MATCHED THEN UPDATE SET LOGININFO.USERNAME=MANAGERINFO.LoginName WHEN NOT MATCHED THEN INSERT VALUES (MANAGERINFO.ManagerID,MANAGERINFO.LoginName,MANAGERINFO.LoginPassword);
最后的结果是:
在本教程中,您将学习如何使用MySQL TRUNCATE TABLE语句删除表中的所有数据。
MySQL TRUNCATE TABLE语句简介
MySQL TRUNCATE TABLE语句允许您删除表中的所有数据。 因此,在功能方面,TRUNCATE TABLE语句就像没有WHERE子句的DELETE语句。 但是,在某些情况下,MySQL TRUNCATE TABLE语句比DELETE语句更有效。
MySQL TRUNCATE TABLE语句的语法如下:
TRUNCATE TABLE table_name;
在TRUNCATE TABLE子句后面指定要删除所有数据的表名称。
TABLE关键字是可选的。 但是,应该使用它来区分TRUNCATE TABLE语句和TRUNCATE函数。
如果您使用InnoDB表,MySQL将在删除数据之前检查表中是否有可用的外键约束。 以下是一些情况:
如果表具有任何外键约束,则TRUNCATE TABLE语句会逐个删除行。如果外键约束具有DELETE CASCADE动作,则子表中的相应行也将被删除。
如果外键约束没有指定DELETE CASCADE动作,则TRUNCATE TABLE将逐个删除行,并且遇到由子表中的行引用的行时,它将停止并发出错误。
如果表没有任何外键约束,则TRUNCATE TABLE语句将删除该表并重新创建一个具有相同结构的新表,这比使用DELETE语句特别是对于大表更快更有效。
如果您使用其他存储引擎,则TRUNCATE TABLE语句将删除并重新创建一个新表。
请注意,如果表具有AUTO_INCREMENT列,则TRUNCATE TABLE语句将自动递增值重置为零。
此外,TRUNCATE TABLE语句不使用DELETE语句,因此与表关联的DELETE触发器将不被调用。
MySQL TRUNCATE TABLE示例
首先,创建一个名为books的新表:
CREATE DATABASE IF NOT EXISTS testdb;
USE testdb;
CREATE TABLE books(
id int auto_increment primary key,
title varchar(255) not null
)ENGINE=InnoDB;
接下来,使用以下存储过程填充books表的数据:
DELIMITER $$
CREATE PROCEDURE load_book_data(IN num int(10))
BEGIN
DECLARE counter int(10) default 0;
DECLARE book_title varchar(255) default '';
WHILE counter < num DO
SET book_title = concat('Book title #',counter);
SET counter = counter + 1;
INSERT INTO books(title) VALUES(book_title);
END WHILE;
END$$
DELIMITER ;
-- DROP PROCEDURE load_book_data;
然后,将10,000行数据插入到books表,执行上面语句将需要一段时间。
CALL load_book_data(10000);
执行上面语句之后,查看books表中的数据:
SELECT * FROM books;
最后,使用TRUNCATE TABLE语句来与DELETE语句相比执行的速度。
select now() as start_time;
TRUNCATE TABLE books;
select now() as end_time;
上面语句执行结果,如下所示 -
mysql> select now() as start_time;
TRUNCATE TABLE books;
select now() as end_time;
+---------------------+
| start_time |
+---------------------+
| 2017-07-24 21:31:07 |
+---------------------+
1 row in set
Query OK, 0 rows affected
+---------------------+
| end_time |
+---------------------+
| 2017-07-24 21:31:08 |
+---------------------+
1 row in set
可以看到整个过程也就差不多 1 秒钟完成,下面再次调用CALL load_book_data(10000);,完成插入数据后使用DELETE语句,查看执行的时间 -
select now() as start_time;
DELETE FROM books;
select now() as end_time;
执行上面语句,得到以下结果 -
mysql> select now() as start_time;
DELETE FROM books;
select now() as end_time;
+---------------------+
| start_time |
+---------------------+
| 2017-07-24 21:39:42 |
+---------------------+
1 row in set
Query OK, 10000 rows affected
+---------------------+
| end_time |
+---------------------+
| 2017-07-24 21:39:44 |
+---------------------+
1 row in set
在本教程中,我们向您展示了如何使用MySQL TRUNCATE TABLE语句从表中有效地删除所有数据,特别是对于拥有大量数据的表。
¥ 我要打赏
纠错/补充
收藏
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
MySQL DELETE语句和TRUNCATE TABLE语句功能相似,但是二者究竟有何区别呢?下文就将为您分析MySQL DELETE语句和TRUNCATE TABLE语句的区别,供您参考。
在MySQL中有两种方法可以删除数据,一种是MySQL DELETE语句,另一种是MySQL TRUNCATE TABLE语句。DELETE语句可以通过WHERE对要删除的记录进行选择。而使用TRUNCATE TABLE将删除表中的所有记录。因此,DELETE语句更灵活。
如果要清空表中的所有记录,可以使用下面的两种方法:
DELETE FROM table1
TRUNCATE TABLE table1
其中第二条记录中的TABLE是可选的。
如果要删除表中的部分记录,只能使用DELETE语句。
DELETE FROM table1 WHERE ;
如果DELETE不加WHERE子句,那么它和TRUNCATE TABLE是一样的,但它们有一点不同,那就是DELETE可以返回被删除的记录数,而TRUNCATE TABLE返回的是0。
如果一个表中有自增字段,使用TRUNCATE TABLE和没有WHERE子句的DELETE删除所有记录后,这个自增字段将起始值恢复成1.如果你不想这样做的话,可以在DELETE语句中加上永真的WHERE,如WHERE 1或WHERE true。
DELETE FROM table1 WHERE 1;
上面的语句在执行时将扫描每一条记录。但它并不比较,因为这个WHERE条件永远为true。这样做虽然可以保持自增的***值,但由于它是扫描了所有的记录,因此,它的执行成本要比没有WHERE子句的DELETE大得多。
DELETE和TRUNCATE TABLE的***区别是DELETE可以通过WHERE语句选择要删除的记录。但执行得速度不快。而且还可以返回被删除的记录数。而TRUNCATE TABLE无法删除指定的记录,而且不能返回被删除的记录。但它执行得非常快。
和标准的SQL语句不同,MySQL DELETE语句支持ORDER BY和LIMIT子句,通过这两个子句,我们可以更好地控制要删除的记录。如当我们只想删除WHERE子句过滤出来的记录的一部分,可以使用LIMIB,如果要删除后几条记录,可以通过ORDER BY和LIMIT配合使用。假设我们要删除users表中name等于"Mike"的前6条记录。可以使用如下的DELETE语句:
DELETE FROM users WHERE name = 'Mike' LIMIT 6;
一般MySQL并不确定删除的这6条记录是哪6条,为了更保险,我们可以使用ORDER BY对记录进行排序。
DELETE FROM users WHERE name = 'Mike' ORDER BY id DESC LIMIT 6;
【编辑推荐】
SQL设置自增字段的方法介绍
见MySql字段的默认长度
【责任编辑:段燃 TEL:(010)68476606】
点赞 0
truncate语句
--truncate table '表名'
--这样就利用SQL语句清空了该数据表,而不保留日志
转载于:https://www.cnblogs.com/llljpf/p/6529261.html