SQL系统学习笔记之数据插入、删除、更新、事务

数据插入

关键字: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特性
  1. 原子性是指在事务结束时,其中所包含的更新处理要么全部执行,要么完全不执行,也就是要么占有一切要么一无所有。
  2. 一致性指的是事务中包含的处理要满足数据库提前设置的约束,如主键约束或者 NOT NULL 约束等。也称为完整性
  3. 隔离性指的是保证不同事务之间互不干扰的特性。该特性保证了事务之间不会互相嵌套。此外,在某个事务中进行的更改,在该事务结束之前,对其他事务而言是不可见的。因此,即使某个事务向表中添加了记录,在没有提交之前,其他事务也是看不到新添加的记录的。
  4. 持久性也可以称为耐久性,指的是在事务(不论是提交还是回滚)结束后,DBMS 能够保证该时间点的数据状态会被保存的特性。即使由于系统故障导致数据丢失,数据库也一定能通过某种手段进行恢复
  • 在标准 SQL 中并没有定义事务的开始语句,而是由各个 DBMS 自己来定义的
  • 几乎所有的数据库产品的事务都无需开始指令。这是因为大部分情况下,事务在数据库连接建立时就已经悄悄开始了,并不需要用户再明确发出开始指令;该如何区分各个事务呢?通常会有如下两种情况:A 每条SQL语句就是一个事务(自动提交模式) B直到用户执行COMMIT或者ROLLBACK为止算作一个事务;
    自动提交的情况需要特别注意的是 DELETE 语句。如果不是自动提交,即使使用 DELETE 语句删除了数据表,也可以通过 ROLLBACK 命令取消该事务的处理,恢复表中的数据。但这仅限于明示开始事务,或者关闭自动提交的情况。如果不小心在自动提交模式下执行了 DELETE 操作,即使再回滚也无济于事了。
-- SQL Server、PostgreSQL
BEGIN TRANSACTION

--MySQL
START TRANSACTION

--Oracle、DB2
没有
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值