3.1数据更新操作
3.3.1SQL语句分为三类
1.DML(CRUD)—create read update delete 增删改查
1)SELECT —>查询不会引起数据改变
2)数据更新操作
INSERT----->插入
UPDATE---->更新
DELETE------>删除
2.DDL
3.DCL
对于查询而言,需要进行一些分析,但更新操作相比较查询而言容易一些,其操作语法也是固定的。
注意:插入数据/更新数据/删除数据----》以上操作都会引起数据表数据的变化,因此在Scott用户下默认的表不要直接对emp/dept/salgrade/bonus做修改。
可以从原数据表创建一个练习使用的数据表,在练习表上做操作。
3.3.2SQL语句----复制表
1.复制表的基本语法
CREATE TABLE +新表名 AS SELECT * FROM 原表名;
新表名必须以字母开头
2.例如
1)创建一个名为yynemp的表
SQL> CREATE TABLE yynemp AS SELECT * FROM emp;

2)查询新创建的yynemp的表
SQL> SELECT * FROM tab;

3)查看yyntmp表中的数据

3.3.3SQL语句----数据跟新操作
- SQL中数据更新操作分为三类
1)增加INSERT
- 修改UPDATE
- 删除DELETE
2.SQL数据更新----》INSERT
1)INSERT语法格式
A.INSERT 完整语法—推荐使用
INSERT INTO 表名(字段1,字段2,字段3。。。。)VALUES(值1,值2,值3。。。。。)
a)例如:向yynemp表中插入一条数据
yynemp字段有:empno,ename,job,mgr,sal,hiredate,comm,deptno
SQL> INSERT INTO yynemp (empno,ename,job,mgr,sal,hiredate,comm,deptno)
2 VALUES (8888,‘YYN’,‘DBA’,7839,3000,TO_DATE(‘2020-10-20’,‘yyyy-mm-dd’),null,20);


b)查看新插入的数据


c)注意
新建的数据必须要在新建的窗口执行各项操作,换到其他窗口新建的数据就不存在,无法使用。
如果某些字段不需要设置,可以将值设置为NULL
B.INSETT简化语法----不推荐使用
INSERT INTO 表名 VALUES (值1,值2,值3,值4,值5。。。。)
如果使用这个语法插入数据,保证values后定义的值的顺序跟表中字段顺序完全一致。
a)例如:向yynemp表中插入一条数据
INSERT INTO yynemp
VALUES (8889,‘YYN’,‘DBA’,7839, 3500 ,TO_DATE(‘2020-10-20’,‘yyyy-mm-dd’),null,20);

这个方式可以使用,但是不建议使用,因为使用之前必须要记住字段的顺序。
2)不需要写入值对应NULL
有些情况下,某些字段我们可能并不需要写入值,这时候,可以用两种方式来写入NULL
A)不标记字段,未写明的字段默认为NULL
a)在增加的时候不设置具体的字段内容
INSERT INTO yynemp (empno,ename,job)
VALUES (8899,‘hhp’,‘self’);


B)指定字段,显示为设置的内容为NULL
INSERT INTO yynemp (empno,ename,job)
VALUES (8866,‘anna’,NULL);----加了‘’引号相当于job赋值为NULL


在以后编写的时候增加语句都写上完整格式,不需要的字段可以不写,默认为NULL值
3)插入整个表的语句
insert into h3.hy3 select * from h3.hy3;----》自己的数据自己在插入

- SQL数据更新----》UPDATE
数据修改也是数据的更新处理操作,修改的命令是使用UPDATE语句完成
1)UPDATE 语法格式
A)固定基础语法----不能用
UPDATE 表名 SET 字段1=值1,字段2=值2,字段3=值3,。。。。
如果在更新的时候没有写更新条件,则表示表中的所有数据行的信息都会同时更新,
a)例如:
UPDATE yynemp SET sal=5000;
----》表示将表中的sal列所有值修改为5000
B)结合WHERE 子句使用
UPDATE 表名 SET 字段1=值1,字段2=值2,字段3=值3,。。。。
【WHERE 更新条件1,更新条件2.。。。。。】
更新完之后需要提交,否则别人无法使用此表
若写上了更新条件,则只更新满足条件的数据行,这些条件可以像之前限定查询那样进行各种运算符的整合,或者使用子查询完成更新操作。
a)将20部门的雇员的薪资上调30%
SQL> UPDATE yynemp SET sal=(1+0.3)*sal
2 WHERE deptno=20;

b)查看20部门的雇员的薪资上调30%


C)注意
a)实际在生产环境中不会使用全表更新数据的,因为当数据表的数据很大,要进行全表更新,数据库系统就会瘫痪,在更新期间任何人都不能对该表做操作,—事务控制。
b)一定要记住更新完数据库必须要使用commit命令,进行提交
4. SQL数据更新----》DELETE不能用
在以后的实际项目的开发中,数据的删除操作尽可能不要使用,(没有任何一个成熟的系统支持数据的删除的)。
A)删除语法格式
a)固定基础格式----不能用
DELETE FROM 表名
-----》删除指定数据表中的所有行记录
b)与WHERE子句格式----不能用
DELETE FROM 表名 【WHERE 删除条件1,删除条件2.。。。。】
-----》删除符合条件的数据行
Delete 表名 where 条件----
B)例如
a)删除雇员编号为8888的雇员信息
SQL> DELETE FROM yynemp
2 WHERE empno=8888;

更新成功后一定会返回更新行数,如果没有数据行被影响,则返回的更新行的结果为0
b)删除掉所有人的工资高于公司平均工资的雇员
SELECT AVG(sal)from yynemp;----->公司平均工资的

SQL> DELETE FROM yynemp
2 where sal>(
3 select avg(sal) FROM yynemp
3);
c)删除整个表
DELETE FROM yynemp;
这个操作会将表中的数据都删除,只是在当前终端看不到数据
但实际上我们打开新的终端连接数据库依然可以看到数据,这与事务有关系。
C)误删除找回数据—rollback
使用rollback的前提是没有commit
1.命令:rollback;
2.功能描述:将删除的数据找回,此语句只使用与没有提交(commit)前,如果提交操作了就无法找回,只要没有commit操作就可以使用此命令。
3.练习:删除hhp用户,在找回


使用rollback找回-----》使用的前提是删除操作没有commit如果一旦提交执行此命令无效。


5.替代DELETE删除的方法
在实际项目使用这样的方式执行删除操作,目的是为了保证数据安全。
1)数据的删除分类
A)物理删除(删就是真的删除)
物理删除:直接使用DELETE语句彻底删除干净
B)逻辑删除(删其实是没删)
逻辑删除:在表中设置一个逻辑位
对于数据库数据存在,对于用户而言数据不存在。
a)设计表结构时,设置一个FALG字段
1)逻辑位内容如下
FLAG=1 (非0=TRUE)----》表示数据已经被删除
如果数据要被删除则将flag的内容设置为1
FLAG=0(0表示FLASE)----》表示数据未被删除
2)练习
在设计表结构的初期,考虑到以后要对表做删除操作,往往会添加一个字段,字段用于存放数据状态,实现逻辑删除的操作。
1.设计emp表时,表结构为:flag=1不存在数据,flag=0存在数据
DEPTNO ENAME JOB FALG
20 SMITH CLERK 0
30 ALLEN SALESMAN 0
30 WARD SALESMAN 0
20 JONES MANAGER 0
30 MARTIN SALESMAN 0
30 BLAKE MANAGER 0
flag=1被删除,flag=0未删除
想要删除数据时,使用逻辑删除(数据并不会真正的被删除掉,而是被标记为删除状态)
2.删除smith雇员信息----》
使用update语句将要删除的语句标记为1
UPDATE yynemp SET flag=1 WHERE ename=‘SMITH’;
执行结果为:
DEPTNO ENAME JOB FALG
20 SMITH CLERK 1
FALG=1标记为删除状态
3.查找smith雇员的信息:
SELECT * yynemp WHERE enam=’SMITH’ AND flag=0;
这样是查找不到的,因为flag已经被标记为1,表示被删除。
4.这样做是为了防止用户删除数据后还可以找回数据,当该数据保留一段时间后确定用户不在使用此数据在进行物理删除即可。
2)实际开发中,都使用的是逻辑删除,所谓的删除操作只是一个更新处理。
不能使用delete操作,代码中不能提供这种功能,功能一旦提供,极有可能造成可怕的后果,这是SQL开发的原则。
7.没办法rollback的时候怎么办?
如果不小心删除数据,没办法rollback的时候,只要会话窗口在数据还可以找回来。
8.如果会话窗口关闭了/或者删除系统数据库的数据怎么办?
直接拔服务器电源,因为删除操作只是删除文件名,其数据还在,拔电源的目的是为了不覆盖数据,开机后在不监听的情况下静态恢复数据即可。
9总结
数据库更新操作----》INSERT UPDATE DELETE
INSERT INTO 表名 (字段1,字段2,字段3,,,,,)VALUES (值1,值2,值3)
UPDATE 表名 SET 字段1=值1,字段2=值2,字段3=值3。。。。
【where限定条件1,限定条件2。。。。。】
DELETE FROM 表名 【where限定条件1,限定条件2。。。。。】
DML数据操语言 增删改查-----》以上全部学完查看第二节和第三节
本文详细介绍了SQL中的数据更新操作,包括INSERT用于插入数据,UPDATE用于更新数据,以及DELETE用于删除数据。重点讲解了如何使用INSERT的完整和简化语法,UPDATE语句结合WHERE子句的使用,以及DELETE操作的注意事项。强调了在实际开发中避免使用DELETE,推荐使用逻辑删除以确保数据安全。
28万+

被折叠的 条评论
为什么被折叠?



