sql语句学习教程11_drop_drop语句_truncate_truncate语句_sql删除数据

教程发布:风哥 教程分类:MySQL教程 更新日期:2020-03-05 浏览学习:2776

SQL的DDL,如create,alter,drop,truncate语句,接下来风哥为大家介绍如何使用drop与truncate对数据进行删除操作。

1. SQL DROP TABLE语句简介
随着数据库在应用过程不断的数据增加,有时需要从数据库中删除过时的冗余表或不用的表。 要删除表,可使用DROP TABLE语句。
以下是DROP TABLE语句的语法。
DROP TABLE [IF EXISTS] table_name;

要删除现有表,可在DROP TABLE子句后指定表的名称。 如果要删除的表不存在,则数据库系统会发出错误。
为了防止删除不存在的表的错误,使用可选子句IF EXISTS。 如果使用IF EXISTS选项,如果删除一个不存在的表,数据库系统将不会抛出任何错误。 某些数据库系统会发出警告或通知。

注意,有些数据库系统不支持IF EXISTS选项。 支持IF EXISTS选项的是MySQL,PostgreSQL和SQL Server。

DROP TABLE语句永久删除表的数据和结构,某些数据库系统要求表中的记录必须为空时才能从数据库中删除。 这有助于防止意外删除仍在使用的表。
要删除表中的所有数据,可以使用DELETE或TRUNCATE TABLE语句。要删除由另一个表的外键约束引用的表,必须在删除表之前禁用或删除外部约束。

2. SQL DROP TABLE案例
下面创建一个用于练习DROP TABLE语句的新表。以下语句创建一个名为fgedu_table的新表,用于存储员工的紧急联系人。
CREATE TABLE fgedu_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    first_name VARCHAR(50) NOT NULL,
    last_name VARCHAR(50) NOT NULL,
    relationship VARCHAR(50) NOT NULL,
    yg_id INT NOT NULL
);

以下语句用于删除fgedu_table表:
DROP TABLE fgedu_table;

3. SQL DROP TABLE - 删除多个表
DROP TABLE语句允许同时删除多个表。 为此,需要在DROP TABLE子句之后指定逗号分隔表名称的列表,如下所示:
DROP TABLE table_name1,table_name2,...;
然后,数据库系统逐个删除指定的所有表。

4.SQL TRUNCATE TABLE语句简介
要删除表中的所有数据,可使用不带WHERE子句的DELETE语句。 但是对于具有几百万行的大表,DELETE语句很慢且效率不高。
要快速删除大表中的所有行,使用以下TRUNCATE TABLE语句:
TRUNCATE TABLE table_name;

在此语法中,指定要在TRUNCATE TABLE子句后删除数据的table_name。
某些数据库系统(如MySQL和PostgreSQL)允许直接省略TABLE关键字,因此TRUNCATE TABLE语句如下所示:
TRUNCATE table_name;

发出TRUNCATE TABLE语句时,数据库系统通过取消分配表分配的数据页来删除表中的所有行。 通过这样做,RDBMS可以减少日志记录的资源和需要获取的锁的数量。
如果要一次截断多个表,可以在TRUNCATE TABLE子句后使用逗号分隔的表名列表,如下所示:
TRUNCATE TABLE table_name1, table_name2, ...;
并非所有数据库系统都支持这种使用TRUNCATE TABLE语句来一次删除多个表。 如果不使用,则要发出多个TRUNCATE TABLE语句来截断多个表。

5.SQL TRUNCATE TABLE与DELETE的区别

TRUNCATE TABLE语句和不带WHERE子句的DELETE语句提供了从表中删除所有数据的相同效果。 但是,它们确实存在一些差别:

使用DELETE语句时,数据库系统会记录操作。 通过一些努力,可以回滚已删除的数据。 但是,当使用TRUNCATE TABLE语句时,除非在尚未提交的事务中使用它,否则无法回滚。
要从外键约束引用的表中删除数据,不能使用TRUNCATE TABLE语句。 在这种情况下,必须使用DELETE语句。
如果表具有与之关联的触发器,则TRUNCATE TABLE语句不会触发delete触发器。
执行TRUNCATE TABLE语句后,某些数据库系统会将自动增量列(或标识,序列等)的值重置为其起始值。 DELETE语句不是这种情况。带有WHERE子句的DELETE语句从表中删除部分数据,而TRUNCATE TABLE语句始终从表中删除所有数据。

6. SQL TRUNCATE TABLE案例
下面我们来看一个截断表的例子。首先,创建一个名为big_table的新表,如下所示:
CREATE TABLE big_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    val INT
);

其次,如果要将样本数据插入big_table表,请多次执行以下语句:
INSERT INTO big_table (val)
VALUES
    (RAND(100000));

请注意,如果使用支持存储过程的数据库系统,则可以将此语句放在循环中。 例如,MySQL中的以下存储过程将数据加载到big_table表中,其中包含num参数指定的行数。
DELIMITER $$
CREATE PROCEDURE load_big_table_data(IN num int)
BEGIN
 DECLARE counter int default 0;

 WHILE counter < num DO
   INSERT INTO big_table(val)
   VALUES(RAND(1000000));
 END WHILE;

END$$

以下语句调用load_big_table_data存储过程将999999行数据插入到big_table表。
CALL load_big_table_data(999999)
第三,要删除big_table中所有数据,请使用以下语句:
TRUNCATE TABLE big_table;
如上所见,TRUNCATE TABLE语句的速度有多快。

网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】sql语句学习教程12_drop与truncate区别_truncate与delete区别_drop与delete区别
【下一篇】sql语句学习教程10_delete_delete语句_delete大批量删除_sql数据删除_sql增删改语句