数据插入
关键字:INSERT INTO
- 将列名和值用逗号隔开,分别括在()内,这种形式称为清单:列清单、值清单
- 可以省略列清单插入
INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);
-- 包含列清单
INSERT INTO ProductIns (product_id, product_name, product_type,
sale_price, purchase_price, regist_date) VALUES ('0005', '高压锅',
'厨房用具', 6800, 5000, '2009-01-15');
INSERT INTO <表名> VALUES (值1, 值2, 值3, ……);
-- 省略列清单
INSERT INTO ProductIns VALUES ('0005', '高压锅', '厨房用具',
6800, 5000, '2009-01-15');
插入默认值
CREATE TABLE 语句中设置 DEFAULT 约束来设定默认值;
在 INSERT 语句中为列赋默认值时,通常有显式和隐式两种。
--显式方法插入默认值
INSERT INTO ProductIns (product_id, product_name, product_type,
sale_price, purchase_price, regist_date) VALUES ('0007',
'擦菜板', '厨房用具', DEFAULT, 790, '2009-04-28');
--隐式方法插入默认值(在列清单和VALUES 中省略设定了默认值的列)
INSERT INTO ProductIns (product_id, product_name, product_type,
purchase_price, regist_date) VALUES ('0007', '擦菜板', '厨房用具',
790, '2009-04-28');
备份一张表中的数据
关键字:INSERT … SELECT 语句
SELECT 语句中各种子句也都可以使用;但即使指定了ORDER BY子句也没有任何意义,因为无法保证表内部记录的排列顺序
-- 将商品表中的数据复制到商品复制表中
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;
数据删除
关键字:DELETE
- DELETE语句的删除对象并不是表或者列,而是记录(行)
搜索型DELETE
:指定了删除对象的 DELETE 语句
--清空表中数据
DELETE FROM <表名>;
--搜索型DELETE
DELETE FROM <表名>
WHERE <条件>;
--TRUNCATE语句
-- Oracle、SQLServer、PostgreSQL、MySQL 和 DB2可以使用
--只能用于删除所有数据,不可以跟where子句;处理速度大于delete
--Oracle中 的TRUNCATE不能使用 ROLLBACK。执 行TRUNCATE的同时会默认执行COMMIT操作
TRUNCATE <表名>;
数据更新
关键字UPDATE…SET…
搜索型 UPDATE
:指定更新对象的 UPDATE 语句
UPDATE <表名>
SET <列名> = <表达式>;
-- 多列更新:
--方式1:使用逗号对列进行分隔排列(通用)
UPDATE Product
SET sale_price = sale_price * 10,
purchase_price = purchase_price / 2
WHERE product_type = '厨房用具';
-- 方式2:将列用()括起来的清单形式(某些 DBMS 中是无法使用)
UPDATE Product
SET (sale_price, purchase_price) = (sale_price * 10, purchase_price / 2)
WHERE product_type = '厨房用具';
事务
关键字:COMMIT(提交处理)和ROLLBACK(取消处理)
- 事务是需要在同一个处理单元中执行的一系列更新处理的集合。
- DBMS的事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)四种特性。通常将这四种特性的首字母结合起来,统称为ACID特性
- 原子性是指在事务结束时,其中所包含的更新处理要么全部执行,要么完全不执行,也就是要么占有一切要么一无所有。
- 一致性指的是事务中包含的处理要满足数据库提前设置的约束,如主键约束或者 NOT NULL 约束等。也称为完整性
- 隔离性指的是保证不同事务之间互不干扰的特性。该特性保证了事务之间不会互相嵌套。此外,在某个事务中进行的更改,在该事务结束之前,对其他事务而言是不可见的。因此,即使某个事务向表中添加了记录,在没有提交之前,其他事务也是看不到新添加的记录的。
- 持久性也可以称为耐久性,指的是在事务(不论是提交还是回滚)结束后,DBMS 能够保证该时间点的数据状态会被保存的特性。即使由于系统故障导致数据丢失,数据库也一定能通过某种手段进行恢复
- 在标准 SQL 中并没有定义事务的开始语句,而是由各个 DBMS 自己来定义的
- 几乎所有的数据库产品的事务都无需开始指令。这是因为大部分情况下,事务在数据库连接建立时就已经悄悄开始了,并不需要用户再明确发出开始指令;该如何区分各个事务呢?通常会有如下两种情况:A 每条SQL语句就是一个事务(自动提交模式) B直到用户执行COMMIT或者ROLLBACK为止算作一个事务;
自动提交的情况需要特别注意的是 DELETE 语句。如果不是自动提交,即使使用 DELETE 语句删除了数据表,也可以通过 ROLLBACK 命令取消该事务的处理,恢复表中的数据。但这仅限于明示开始事务,或者关闭自动提交的情况。如果不小心在自动提交模式下执行了 DELETE 操作,即使再回滚也无济于事了。
-- SQL Server、PostgreSQL
BEGIN TRANSACTION
--MySQL
START TRANSACTION
--Oracle、DB2
没有