数据的删除、插入和复制
数据的删除
使用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 BY
,WHERE
等关键字依然能够使用。
只不过是ORDER BY
语句在这里可以使用,但是是没有什么意义的。因为你并不能够保证正如数据的顺序。
同时,因为上面的是复制整个数据表,所以实际上可以简写:
INSERT INTO ProductCopy SELECT * FROM Product;