SQL学习笔记(三)
第五章 数据更新
对于mysql这种业务型数据仓库,需要对数据进行增删改查。
5.1 数据的插入
数据的插入使用insert语句,insert语句语法。将列名和值用逗号隔开,分别括在()内,这种形式叫做清单。insert语句是由列清单和表清单组成的。
INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);
5.1.1 多行插入
很多数据库都支持多行插入,例如mysql,语法如下
INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……), (值1, 值2, 值3, ……), (值1, 值2, 值3, ……)...;
5.1.2 列清单的省略
对表进行全列插入的时候可以省略列清单
5.1.3 插入null
想要插入null,需要在值清单写null
5.1.4 从其他表复制数据
可以使用insert...select语句从其他表复制数据
5.2 数据的删除
数据的删除使用delete语句,想要删除整个表可以使用drop table语句 ,语法如下:
DELETE FROM <表名>
WHERE <条件>;
5.2.1 删除和舍弃
当想要删除所有数据的时候,很多数据库提供了TRUNCATE(舍弃)语句,语法如下。
TRUNCATE <表名>;
TRUNCATE语句只能删除表中的全部数据。与delete相比truncate的执行效率更高,因为他不记录日志。另外truncate删除数据后,再插入数据,自增id从1开始。delete删除数据后自增id从删除后id开始。
5.3 数据的更新
update语句可以对数据进行更新,语法如下:
UPDATE <表名>
SET <列名> = <表达式>
WHERE <条件>;
ps:
多列更新用逗号隔开
5.4 事务
事物是对表中数据进行更新的单位。简单来说,事物就是需要在同一个处理单元中执行的一系列更新处理的集合。
5.4.1 创建事务
事务的语法没有标准语法由数据库自己定义,mysql的语法如下:
--事务开始语句--
START TRANSACTION
DML语句①;
DML语句②;
DML语句③;
.. .
--事务结束语句 提交或者回滚--
COMMIT; 或者 rollback;
ps:
并不是所有的语句都可以被撤销, 事务处理用来管理 INSERT 、 UPDATE 和DELETE 语句。你不能回退 SELECT 语句。你不能回退 CREATE 或 DROP 操作。事务处理块中可以使用这两条语句,但如果你执行回退,它们不会被撤销。
5.4.2 ACID特性
数据库的事务都要遵循四种特性,将四种特性的首字母结合起来就是ACID特性。
- 原子性(Atomicity):
原子性是指在事务结束时,其中所包含的更新处理要么全部执行,要么完全不执行。 - 一致性(Consistency):
一致性是指事务中包含的处理要满足数据库提前设置的约束,如主键约束或者null约束等。对事务来说,这些不合法的sql是会被回滚。合法的sql会正常执行 - 隔离性(Isolation):
隔离性是保证不同事务之间互不干扰的特性。某个事务在结束之前,对其他事物是不可见的。 - 持久性(Durability):
持久性指的是事务在结束后,数据库能够保证该时间节点的数据状态会被保存的特性。即使由于系统故障导致数据丢失,数据库也能通过某种手段进行恢复。一般来说是通过将事务的执行记录保存到硬盘等存储介质中。