精华内容
下载资源
问答
  • TRUNCATE语句和MERGE语句

    千次阅读 2018-09-28 09:38:48
    TRUNCATE语句 MERGE语句

    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;
    

    001

    省略修改的操作
    MERGE INTO LOGININFO
    USING MANAGERINFO
    ON(LOGININFO.USERID=MANAGERINFO.ManagerID)
    WHEN NOT MATCHED THEN INSERT
    VALUES (MANAGERINFO.ManagerID,MANAGERINFO.LoginName,MANAGERINFO.LoginPassword);
    

    002

    增加和修改同时进行
    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);
    

    003

    最后的结果是:
    004

    展开全文
  • 当表中的数据不需要时,则应该删除该数据并释放所占用的空间,删除表中的数据可以使用Delete语句或者Truncate语句,下面分别介绍。 一、delete语句 (1)有条件删除 语法格式:delete [from] table_name [where ...
  • 在本教程中,您将学习如何使用MySQL TRUNCATE TABLE语句删除表中的所有数据。MySQL TRUNCATE TABLE语句简介MySQL TRUNCATE TABLE语句允许您删除表中的所有数据。 因此,在功能方面,TRUNCATE TABLE语句就像没有WHERE...

    在本教程中,您将学习如何使用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 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

    展开全文
  • sql server truncate语句

    2017-03-10 10:15:00
    truncate语句 --truncate table '表名' --这样就利用SQL语句清空了该数据表,而不保留日志 转载于:https://www.cnblogs.com/llljpf/p/6529261.html

    truncate语句

      --truncate table '表名'

      --这样就利用SQL语句清空了该数据表,而不保留日志

    转载于:https://www.cnblogs.com/llljpf/p/6529261.html

    展开全文
  • Oracle:truncate语句

    千次阅读 2016-08-10 09:32:52
    Oracle基础教程:truncate语句,在数据库操作中, TRUNCATE命令(是一个DDL命令)可以把表中的所有数据一次性全部删除,语法是: 语法结构:TRUNCATE TRUNCATE TABLE 表名 TRUNCATE和DELETE都能把表中的数据...
  • 删除数据Delete 语句Truncate 语句

    千次阅读 2016-05-11 19:10:51
    如果想要删除表的所有数据,truncate语句要比 delete 语句快。 因为 truncate 删除了表,然后根据表结构重新建立它,而 delete 删除的是记录,并没有尝试去修改表。 这也是为什么当向一个使用 delete 清空的表...
  • 在ITPUB上看到有人提问,为什么TRUNCATE语句要比DELETE慢,由于默认TRUNCATE要回收空间,且会将所有的脏块写回到数据文件,因此其实对于小数据量而言,TRUNCATE比DELETE慢也是正常的。不过这个例子中,TRUNCATE慢的...
  • TRUNCATE TABLE 语句1. TRUNCATE [TABLE] tbl_nameTRUNCATE TABLE 语句完全清空表。它需要 DROP 权限。从逻辑上讲,TRUNCATE TABLE 类似于删除所有行的 DELETE 语句,或者是 DROP TABLE 和 CREATE TABLE 语句的组合...
  • TRUNCATE是删除表中所有记录的另一种语句,与DELETE语句相比,TRUNCATE运行效率非常高,因为使用TRUNCATE语句时,SQL Server不会写入任何内容,换个角度说,TRUNCATE语句所做的修改是不能回滚的。这里需要强调一点,...
  • oracle数据库删除数据Delete语句和Truncate语句的对比 当表中的数据不需要时,则应该删除该数据并释放所占用的空间,删除表中的数据可以使用Delete语句或者Truncate语句,下面分别介绍。 一、delete语句 (1)有...
  • 恶人自有恶人磨,如果数据库里面的数据有问题了...MySQL为我们提供了delete和truncate语句来删除数据。delete 语句的定义:经常和数据库打交道的孩子们,删除数据的时候用的大多都是 delete 语句。现在让我们来看一...
  • sql truncate This article explores the recovery of data removed by SQL Delete and SQL Truncate statements using ... 本文探讨了使用SQL数据库备份恢复由SQL Delete和SQL Truncate语句删除的数据的方法。 ...
  • Oracle中delete from 语句与truncate语句的区别: 1.delete....from....删除语句一定要加where条件,否则全表删除。但是可以使用rollback语句进行回退,delete支持闪回操作。 truncate table table_name; truncate ...
  • 在MySQL数据库中,DELETE语句TRUNCATE TABLE语句都可以用来删除数据,但是这两种语句还是有着其区别的,下文就为您介绍这二者的差别所在
  • Oracle中delete from 语句与truncate语句的区别: 1.delete....from....删除语句一定要加where条件,否则全表删除。但是可以使用rollback语句进行回退,delete支持闪回操作。 truncate table table_name; truncate ...
  • TRUNCATE语句的通常更高效,但是它的使用需要格外注意。TRUNCATE属于 DDL语句,这意味着 Oracle会在该语句运行后自动提交该语句及当前session中的事务,因此我们无法回滚 TRUNCATE语句。与此同时,又因为 ...
  • MySQL为我们提供了delete和truncate语句来删除数据。 delete 语句的定义: 经常和数据库打交道的孩子们,删除数据的时候用的大多都是 delete 语句。现在让我们来看一下 delete语句的定义。DELETE[LOW_...
  • TRUNCATE语句时间过长的诊断转自:http://yangtingkun.itpub.net/post/468/501762  在ITPUB上看到有人提问,为什么TRUNCATE语句要比DELETE慢,由于默认TRUNCAT...
  • sql 语句中truncate语句不支持变量的问题,就像Sql2000中select top 后面不支持变量一眼,那么融会贯通,此处也可采用动态Sql语句来解决 create proc sp_ClearDataByTableName @tablename Char(20) as declare @...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,080
精华内容 1,632
关键字:

truncate语句