day03: oracle的sql增 、删、改,事务处理
一 数据更新(重点)
===============
增删改 查
- 数据更新包括数据的增加、修改、删除。
- 为了做实验,我们将emp表复制一份,使用以下指令:
- create table myemp as select * from emp;
- 这种语法是oracle支持的,其他的数据库不一样
1、数据的增加(insert)
语法:
INSERT INTO 表名称 [(字段1,字段2,字段3,...)] VALUES(值1,值2,值3,...)注意:如果需要进行增加数据的话,则以下的几种数据类型要分别处理:增加数字:直接编写数字,如:123;增加字符串:字符串应该使用"'"声明;增加DATE数据:第一种:可以按照已有的字符串的格式编写字符串,如:‘20-6月-06’;第二种:利用TO_DATE函数将字符串变为DATE型数据;第三种:如果设置的时间为当前系统时间,则使用SYSDATE;
对于数据的增加有两种操作格式:完整型:
SQL> insert into myemp(empno,ename,hiredate, sal,mgr,job,comm)2 values (8888,'reyn',to_date('1990-11-13','yyyy-mm-dd'),8000,7369,'daza',1000);
SQL> insert into myemp (empno,ename,hiredate,sal,mgr,job,deptno) 2 values(8889,'hahah',sysdate,3000,7369,'daza',30);简单型:(不写列名称)
SQL> insert into myemp2 values(8890,'xixi',sysdate,3000,7369,'daza',40); XXXX
ORA-00947: not enough values正确:需要按照列名称的顺序来写,必须符合字段的要求,一般开发中不使用
SQL> insert into myemp values(2 8899,'xixi','daza',7369,sysdate,3000,null,30);
2、数据的修改(update)
语法:
UPDATE 表名称 SET 更新字段1=更新值1,更新字段2=更新值2,...[WHERE 更新条件(s)];SQL> update myemp set sal=7000,comm=3000,job='manager',hiredate=sysdate where empno=7369;//更新编号为7369的员工,工资为7000,奖金3000,职位 manager,职位更新时间为当前时间
SQL> update myemp set sal=7500; //更新所有员工工资为7500
SQL> rollback; //回滚数据
SQL> update myemp set empno=7788 where empno=7369; //更新编号为7369的员工部门为7788
3、数据的删除(dalete)
数据的删除
语法:
DELETE FROM 表名称 [WHERE 删除条件(s)];SQL> delete from myemp where to_char(hiredate,'yyyy')=1987; //删除1987年入职的员工注意:如果删除的时候没有相应匹配条件的时候,则更新记录为0,更新操作也一样。
SQL> delete from myemp; //删除myemp表中所有数据
SQL> select * from myemp;注意:对于删除操作,尽可能少使用,因为删除操作对于查询操作要危险许多。提示:对于删除操作,在开发时对于所有的删除操作之前先给出一个提示框,以防止误删除。
二 事务处理
=========
对于数据表的操作,查询要比更新操作更安全,因为更新操作有可能会出现错误,导致没有按照既定的要求正确的完成更新操作。
在很多时候更新可能由多条语句共同完成,如银行转账:
-判断A的账户上是否有5000W select yue+shouxufei>5000+sxf from zhanghu where id=a
-判断B的账户状态是否正常 select id,status from zhanghu where id=b
-从A的账户上移走5000W update zhanghu set yue-5000 where id=a
-向B的账户上增加5000W update zhanghu set yue+5000 where id=b
-向银行支付手续费5W update zhanghu set yue+shouxufei where id=yinhang
以上五个数据操作是一个整体,可以理解为一个完整的业务,如果其中第三点出错,其他操作该怎么办?
如果有操作出现错误,那么其他操作应该不再继续执行,并且都回归到最原始的状态,而这一个流程的操作实际上就是事务的操作。
#回滚之前的操作
rollback;
#再次查看myemp表,确认其中的数据情况
SQL> select * from myemp;所有的事务处理都是针对每一个会话进行的,在oracle中,把每一个连接到数据库的用户都称为一个会话,每一个会话之间彼此独立,互不通信,每一个会话独享自己的事务控制,而事务控制之中主要使用两个命令:事务的回滚:ROLLBACK,更新操作回到原点事务的提交:COMMIT,真正的发出更新请求,一旦提交后无法回滚eg:
#在会话1中删除一条数据,从另一个会话来查询数据会话1 delete from myemp where empno=7369;会话1 select * from myemp;会话2 select * from myemp;#在会话1中回滚之前的更新操作,再次删除数据,然后提交,再在两个会话中查询数据,在会话1中进行回滚发现已经无法回滚了。会话1 delete from myemp where empno=7369;会话1 commit;会话1 select * from myemp;会话2 select * from myemp;注意:这种事务控制会出现一些问题,例如,某一个会话在更新数据表的时候还没有提交事务,其他会话是无法进行更新的,必须等待之前的会话提交后才可以。
eg:
#死锁,会话1执行更新后,在没有提交之前,会话2进行更新会出现等待会话1 update myemp set sal=9000 where empno=7839;会话2 update myemp set sal=8000 where empno=7839;这种问题从大的方面来讲可以称作死锁,但是在oracle之中死锁有很多种类.所有的数据更新一定都会受到事务的控制。
三 数据伪列
ROWNUM(重点)
ROWNUM为每一个显示的记录都会自动的随着查询生成的行号。
SQL> select rownum,empno,ename,job,hiredate,sal from emp;//#查询emp表的rownum,empno,ename,job,hiredate和sal
该行号不是永久的,会随着查询的显示变化而变化SQL> select rownum,empno,ename,job,hiredate,sal from emp where deptno=30;//#查询emp表的rownum,empno,ename,job,hiredate和sal
SQL> select rownum,empno,ename,job,hiredate,sal from emp where rownum<=5;//#查询前五条记录#查询6-10行记录
错误查询:
SQL> select rownum,empno,ename,job,hiredate,sal from emp where rownum between 6 and 10;
//执行完成后并没有返回任何数据,因为rownum不是真实列,正确的思路是先查询前10条记录,然后再查询后5条记录,需要使用子查询
正确查询:
SQL> select * from (select rownum rn,empno,ename,job,hiredate,sal from emp2 where rownum<=10) temp where temp.rn> 5;
ROWID
ROWID表示的是每一行数据保存的物理地址的编号。
SQL> select rowid, deptno, dname, loc from dept;每一条记录的ROWID都不会重复,所以即使所有列的内容重复,ROWID也不会重复.
格式为:AAAL+XAAEAAAAANAAA其中: 数据对象号:AAAL+X相对文件号:AAE数据块号: AAAAAN数据行号: AAA
总结:
1、多表查询:在进行查询语句编写的时候,一定要确定所需要关联的数据表,而且只要是表的关联查询,就一定会存在笛卡儿积的问题,使用关联字段消除此问题。在使用多表查询的时候要考虑到左右连接的问题,oracle之外的数据库可以使用SQL1999语法控制左右连接。
2、所有的统计函数是用于进行数据统计操作的,而统计要在分组中进行/或者是单独使用,分组使用GROUP BY子句,是在某一列上存在重复数据的时候才会使用分组操作,而分组后的过滤使用HAVING子句完成,所有的分组函数可以嵌套,但是嵌套之后的分组函数之中不能再有其他的查询字段,包括分组字段。
3、子查询:结合限定查询、多表查询、分组统计查询完成各个复杂查询的操作,子查询一般在WHERE和FROM之后出现较多。
4、数据库的更新操作一定要受到事务的控制,事务的两个命令:COMMIT,ROLLBACK,每一个连接到数据库上的用户都用一个会话来表示。
5、数据表的分页查询显示依靠ROWNUM伪列,这个在以后的开发当中必定要使用。
day03: oracle的sql增 、删、改,事务处理相关推荐
- datatable更新到mysql_.NET_使用DataTable更新数据库(增,删,改),1、修改数据复制代码 代码如 - phpStudy...
使用DataTable更新数据库(增,删,改) 1.修改数据 DataRow dr = hRDataSet.Tables["emp"].Rows.Find(textBox3.Tex ...
- 表单的增 删 改 查
django单表操作 增 删 改 查 一.实现:增.删.改.查 1.获取所有数据显示在页面上 model.Classes.object.all(),拿到数据后,渲染给前端;前端通过for循环的方式,取 ...
- properties(map)增.删.改.查.遍历
import java.util.Map; import java.util.Properties; import java.util.Set;/*** properties(map)增.删.改.查. ...
- python学生姓名添加删除_python-函数-实现学生管理系统,完成对学员的增,删,改,查和退出学生管理系统。...
实现学生管理系统,完成对学员的增,删,改,查和退出学生管理系统. 要求1:使用一个list用于保存学生的姓名. 要求2:输入0显示所有学员信息,1代表增加,2代表删除,3代表修改,4代表查询,exit ...
- java stringbuilder 替换字符串_StringBuilder修改字符串内容,增,删,改,插
package seday01; /** * 字符串不变对象特性只针对字符串重用,并没有考虑修改操作的性能.因此String不适合频繁修改内容. * 若有频繁修改操作,使用StringBuilder来 ...
- PySpark︱DataFrame操作指南:增/删/改/查/合并/统计与数据处理
笔者最近需要使用pyspark进行数据整理,于是乎给自己整理一份使用指南.pyspark.dataframe跟pandas的差别还是挺大的. 文章目录 1.-------- 查 -------- -- ...
- oracle 主键 字典表,oracle 增 删 改 查 新建表 主键 序列 数据字典
------------数据字典------------ select * from dba_tab_cols a where a.table_name='DEMO' create table dem ...
- SQL语句(三) 更新语句(增 删 改)
一.插入 INSERT INTO 表名(列名1,列名2--)//列名可以省略,省略情况下是表格的所有列 VALUES(常量1,常量2--)//与上句中的列对应 二.修改 UPDATE 表名 SET 列 ...
- 简单的php数据库操作类代码(增,删,改,查)
数据库操纵基本流程为: 1.连接数据库服务器 2.选择数据库 3.执行SQL语句 4.处理结果集 5.打印操作信息 其中用到的相关函数有 •resource mysql_connect ( [stri ...
最新文章
- 【转】如何编译一个内核 - Ubuntu方式
- VM虚拟机 Windows虚拟机中linux鼠标不能动怎么办
- springboot:实现分页查询,以及翻页功能
- Ubuntu 建立tftp服务器
- Linux下内存泄露工具
- 5-3 神经网络算法预测销量高低(改进版,消除了一些warning)
- leetcode53. 最大子数组和(动态规划)
- 前端学习(148):html和xhtml的区别
- c++头文件包含问题
- 基于深度学习的图像风格转换
- 在java中使用ffmpeg将amr格式的语音转为mp3格式
- android studio或者IntelliJ代码样式的设置
- movcms能安装PHP吗,LzCMS-博客版 手动安装方法
- linux命令详解——sar
- 实践任务1:利用 HBuilderX制作产品展示模块+实践任务2:利用 HBuilderX制作公司网站首页+实践任务3: 利用 HBuilderX制作公司网站首页实现固定侧边菜单
- 2017.10.19 測試總結并今日總結
- qemu网络配置-桥接-IOT固件模拟
- linux命令后台执行方式
- winwebmail设置 小记
- 晴天科技冲刺上市:实控人丁一波系本科肄业,粤民投为其股东