# 数据的删除、插入和复制

数据的删除、插入和复制

数据的删除

使用DELETE语句删除数据。与DROP不同的是DELETE是以行(记录)为单位删除,并不会删除数据表,最多也只能做到清空整张数据表。

语法格式像是这样DELETE FROM 表名 WHERE 条件。当然,筛选条件不是必须的,当他存在时,我们称这条删除语句为搜索型DELETE。当我们不指定搜索条件而只指明那张表的时候,DELETE会做的时清空整张表的数据。

不少数据库管理系统还存在一种被称为TRUNCATE的舍弃语句,它可以清空整张数据表,并且比DELETE更快。

数据的插入

使用INSERT INTO ... VALUES ...语句插入数据,他的语法格式像是这样子的INSERT INTO 表名 列名 VALUES 数据。对于列名和数据的提供,INSERT语句使用一种叫清单的格式。

INSERT INTO ProductIns ``(product_id, product_name, product_type, purchase_price, regist_date)
VALUES ('007', '擦菜板', '厨房用具', 790, '20009-04-28');

可以注意到数据和列名是存在一一对应的关系的。但是有时候会没有提供完整的数据清单。这时候对于确实的项目会使用NULL作为默认值。

同时,当一些数据具有默认值约束的时候,我们插入数据的时候,没有提供他的值的话,那么就会使用定义数据列时使用的默认值来作为值。

CREATE TABLE ProductIns
(
    product_id CHAR(4) NOT NULL,
    sale_price INTEGER DEFAULT 0, --设置销售的单价的默认值
    PRIMARY KEY (product_id)
);

同时需要知道的是,一般来说一条INSERT语句就插入一条数据,虽然也可以实现一条INSERT语句插入多条数据,但是大多数情况下,这样做不太好。

数据的复制

有时候我们会想要将一些数据复制到另外的一张数据表。这时候我们可以使用INSERT INTO ... SELECT ...语句。

从这个语法我们可以很明显的指导将会发生什么,选取一些数据,并将他们插入到某个地方。例如:

INSERT INTO ProductCopy (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
SELECT product_id, product_name, product_type, sale_price, purchase_price, regist_date
FROM Product;

我们很容易就发现了这个和基本的INSERT语句并无多大的差别,只不过是使用了SELECT子句的返回值作为数据的来源同时省略了VALUES关键字。这里SELECT语句的使用并无其他的限制,像是GROUP BYWHERE等关键字依然能够使用。

只不过是ORDER BY语句在这里可以使用,但是是没有什么意义的。因为你并不能够保证正如数据的顺序。

同时,因为上面的是复制整个数据表,所以实际上可以简写:

INSERT INTO ProductCopy SELECT * FROM Product;
原文地址:https://www.cnblogs.com/freesfu/p/11524332.html