通过前面的学习,上一节的练习,对于数据的更新其实大家有了解到,本节会详细讲解数据的更新内容
1.数据的插入(insert)
insert表示的是往表中添加数据,如果只是使用create table 创建了表,那么这个表就相当是一个空盒子,只有往盒子中装入东西,这个盒子才是有用的,这里就是使用insert往表中添加数据
insert 语法
insert into <表名> (列名1,列名2,列名3....) values (值1,值2,值3,....);
如在上一节的练习中往表格里面插入3个数。
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (
10, 'ACCOUNTING', 'NEW YORK');
如果一下子需要插入多行的数据,那么可以按照下面的格式完成,下面是一下子插入2行的数据
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES
( 10, 'ACCOUNTING', 'NEW YORK');
( 20, 'RESEARCH', 'DALLAS');
如果对表进行全列的数据插入的话,就可以省略掉列后面的清单,这时values子句的值会默认按照从左到右的顺序赋值给每一列,因此,上面的代码也可以按照下面的格式完成。默认就是添加全部的3列。
INSERT INTO DEPT VALUES
( 10, 'ACCOUNTING', 'NEW YORK');
( 20, 'RESEARCH', 'DALLAS');
插入NULL
insert语句中想要给某一列赋予NULL值时,可以直接在values子句的值清单中写入NULL,但是想要插入NULL的列一定不能设置为not NULL的约束
INSERT INTO DEPT ( DEPTNO, DNAME, LOC ) VALUES (
10, NULL, 'NEW YORK');
插入默认值
我们还可以向表中插入默认值(初始值),默认值的设定,可以通过在创建表格的create table语句中的default约束来实现
CREATE TABLE salgrade(
GRADE INT default 0, #等级默认值设定为0
LOSAL INT,
HISAL INT );
通过显示方法插入默认值
在使用insert方法插入默认值的时候可以按照下面的方式完成:
insert into salgrade values
(default ,1000,10000)
这样子对默认值进行使用,获取出来的结果中grade的值就是0
通过瘾示方法插入默认值
在插入默认值时,可以不使用default关键字,只要在列清单和values中省略设定了默认值的列就可以了,如下,省去了grade列
insert into salgrade2(LOSAL,HISAL) values
(5000,10000)
省略insert语句中的列名,就会自动设定为该列的默认值(没有默认值的时候会设定为NULL)
从其他表中复制数据
插入数据的方法,除了使用values子句指定具体的数据外,还可以从其他的表格中复制数据,下面就来看下如何从一张表格中选取数据,复制到另一张表格中。
以下面表格salgrade2为例:
先创建一个新的表格
CREATE TABLE salgrade3(
GRADE INT default 0, #等级默认值设定为0
LOSAL INT,
HISAL INT );
使用insert … select语句将表格中的数据复制到另一个表格中,使用这个语句可以在需要进行数据备份的时候进行使用,对于有关联的数据表之间可以进行数据的传递。
insert into salgrade3(grade,losal,hisal)
select grade,losal,hisal from salgrade2
salgrade3表格如下:
2.数据的删除
如果想要将整个表格删除,可以使用drop table 语句,如果只是想要删除表格中的数据,但是不删除表格,就需要使用delete语句
drop table #删除表格
delete 语句 #会留下表,而删除表中的全全部数据
delete from <表名>
上面的代码是删除掉表格里面全部的数据,delete语句删除的不是表或者列,而是行
如果想要删除指定的对象的话,可以使用下面的语句
delete from <表名> where <条件>
比如说删除值大于400的内容
delete from stds where show_id>400
3.数据的更新
使用insert向表格中插入数据之后,有时想要再改变数据,就可以使用update语句改变表格中的数据
- 使用update语句可以更新表格中的数据
- 更新部分数据行时可以使用where指定更新对象的条件,而通过where子句指定更新对象的update语句称为搜索型update语句
- update语句可以将列的值更新为NULL
- 同时更新多列时,可以在update语句的set子句中,使用逗号分隔更新对象的多个列
语法:
update <表名> set <列名> = <表达式>;
#将全部的日期都改成'2021-4-16'
update show set show_date='2021-4-16'
指定条件的update语句
update <表名> set <列名> = <表达式> where <条件>
如下面把班级名字为“一班”的全部修改为“1班”
update show srt show_class = '1班' where show_class = "一班"
使用NULL进行更新,当ID为8 的时候把对应的班级改为NULL(仅限于未设置not NULL的情况)
update show set class=null where show_id=8
多列更新
update show srt show_class = '1班',show_name = '张三' where show_class = "一班"
或者按照下面的格式
update show srt (show_class,show_name) = ('1班', '张三') where show_class = "一班"
4.事务
事务的重要性不言而喻,但是很多人可能不知道什么是事务,下面我们首先来了解下什么是事务
事务代表了对表格中的数据进行更新的单位,简单来说,事务就是需要在同一个处理单元中执行一系列更新处理的集合,事务就是一系列的操作,要么全部都执行,要都不执行
由于操作并不具有原子性,并且可以再分为多个操作,当这些操作出现错误或抛出异常时,整个操作就可能不会继续执行下去,而已经进行的操作造成的副作用就可能造成数据更新的丢失或者错误。
就比如需要在商品销售中,我们决定把上衣的单价上调100元并且把裤子的单价下调100元,这属于两步操作,但是需要一起执行,所以这里就需要事务啦,把这两步的操作放到一个事务里面,这2个操作要么都被执行,要么都不会被执行,这就防止某一步的操作因为出现错误或者异常导致只执行了一步操作
事务其实和一个操作没有什么太大的区别,它是一系列的数据库操作(可以理解为 SQL)的集合,如果事务不具备原子性,那么就没办法保证同一个事务中的所有操作都被执行或者未被执行了,整个数据库系统就既不可用也不可信。
创建事务
事务的语法
使用事务开始语句和事务结束语句,将一系列DML(insert/update /delete)语句括起来,就实现了一个事务处理
事务开始语句;(start transaction)
DML 语句1;
DML 语句2;
DML 语句3;
...
事务结束语句(commit或者rollback)
如把上面的上衣价格上调和裤子价格下调创建出来的事务代码如下:
start transaction;
-- 将上衣单价上调100元
update show set syi=syi+100 where show_mei="上衣"
-- 将裤子单价下调100元
update show set kuzi=kuzi-100 where show_mei="裤子"
commit
事务的结束需要用户明确地给出指示,事务的结束指令有以下的两种:
-
commit——提交处理
commit是提交事务包含的全部更新处理的结束指令,相当于文件处理中的覆盖保存,一旦提交,就无法恢复到事务开始前的状态,因此,在提交之前一定要确定这些操作是否需要进行更新
万一由于误操作提交了包含错误更新的事务,就只能重新回到新建表格、重新插入数据这样子繁琐的老路了,所以在处理事务之前一定要注意,尤其是delete语句的commit尤其要小心 -
rollback——取消处理
rollback是取消事务包含的全部更新处理的结束执行,相当于文件处理中的放弃保存,一旦回滚,数据库就会回复到事务开始之前的状态,通常回滚并不会像提交那样子造成大规模数据的损失。
ACID特性