oracle基础操作 |
您所在的位置:网站首页 › oracle的jdbc设置超时时间 › oracle基础操作 |
oracle
一.概念
字符串/字符 、日期 : 单引号 1.大小写问题: a.命令/关键字:不敏感(不区别) b.数据:敏感(区分) 2.运算符: 操作运算符: + - / * % 关系运算符: > >= < 0 nvl:if nvl(comm,0 ) 4.distinct:对查询出的结果集去重例:select distinct deptno from emp 5.修改oracle默认的日期格式 :默认:DD-MON-RR 修改: alter session set NLS_DATE_FORMAT = ‘yyyy-mm-dd’ ; 6.显式转换:字符->字数 select to_number(‘¥123,456.7’, ‘L999,999.9’) from dual ; 字数->字符 字符-日期 日期-字符 to_char 7.多行函数:组函数、 聚合函数:count/max/min/avg/sum 8.SQL语句的类型:DQL:数据查询语言select DML:数据操作语言,insert delete update --》可以回退(可以进行事务操作) DDL :数据定义语言 create/drop /truncate /alter table DCL:数据控制语言 grant, revoke 二.操作 1.创建emp(员工表) 和 DEPT(部门表)CREATE TABLE EMP( EMPNO NUMBER(4), ENAME VARCHAR(20), JOB VARCHAR(10), HIREDATE DATE, SAL NUMBER(4), DEPTNO NUMBER(5), PRIMARY KEY(EMPNO) ); create table dept( deptno NUMBER(5), dname varchar(10), primary key(deptno) ); 2.插入数据(当前时间在oracle 当中是sysdate)INSERT INTO EMP VALUES(001,‘张三’,‘保洁’,sysdate,‘90’,601); INSERT INTO EMP VALUES(002,‘李四’,‘保洁’,sysdate,‘90’,601); INSERT INTO EMP VALUES(003,‘王五’,‘保安’,sysdate,‘100’,603); INSERT INTO EMP VALUES(004,‘刘六’,‘电工’,sysdate,‘150’,606); INSERT INTO EMP VALUES(005,‘葛二蛋’,‘跑腿’,sysdate,‘60’,602); INSERT INTO EMP VALUES(006,‘龟孙’,‘保安’,sysdate,100,‘603’); 3.全表查询SELECT * FROM EMP; 4.更新语句(把员工号为005的员工的部门编号改为607)UPDATE EMP SET DEPTNO = 607 WHERE EMPNO = 5; 5.分组:group by查询各个部门的平均工资: SELECT DEPTNO , AVG(SAL) FROM EMP GROUP BY DEPTNO; 6.where 和 having对行筛选用where 对组进行筛选用Having 可以在Having使用多行函数count min avg 但是 不能在where中使用多行函数 例:查询各个部门的平均工资高于90的部门编号(其实就是先查各个部门平均薪资,然后使用having再找高于90的) SELECT DEPTNO , AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) > 90; 7.any:“只需要满足一个即可,存在一个就可以”例如以下两条语句是等价的: select *from emp where sal > any(select sal from emp) ; select *from emp where sal > (select min(sal) from emp) ; 8.all:全部“必须满足所有”例如以下两条语句是等价的: select *from emp where sal > all(select sal from emp) ; select *from emp where sal > (select max(sal) from emp) ; 9.in:在某些范围内(多行操作符,在子查询中常用)例:查询部门编号为601和607的员工信息 select *from EMP where DEPTNO in (601,606); 10:子查询(子查询的结果中不要有NULL!!)例:查询保洁部,跑腿部的员工信息 select * from emp where deptno in (select deptno from dept where dname=‘保洁’ or dname=‘跑腿’); 例:查询工资大于张三的所有员工信息 select *from emp where sal > (select SAL from emp where ename = ‘张三’ ); 11.多表连接查询: 1.交叉连接(笛卡尔积):所有情况的组合 ,不推荐使用select * from emp ,dept ; 2.内连接 :多张表通过 相同字段进行匹配,只显示匹配成功的数据a. select * from emp e ,dept d where e.deptno = d.deptno ; b. select * from emp e inner join dept d on e.deptno = d.deptno 不等值连接(一般不用) select * from emp e ,dept d where e.deptno 复制 mytab 把emp表所有数据都批量插入mytab表CREATE TABLE mytab AS SELECT * FROM emp; 把emp表部分字段数据都批量插入mytab表CREATE TABLE mytab2 AS SELECT ename , job FROM emp; 把薪资小于100的员工某些字段的信息导入mytab3表create table mytab3 as select empno,ename ,job from emp where sal < 100; 还可以用于快速创建表结构:(创建一个mytab4空表,但字段与emp表一致)create table mytab4 as select *from emp where 1=0 ; 使用begin…endbegin insert into emp values(1221,‘LISI’,‘MANAGER’,7788,‘19-9月 -88’,9998,1000,10); insert into emp values(1223,‘LISI’,‘MANAGER’,7788,‘19-9月 -88’,9998,1000,10); end ; 删除deletedelete from 表名 ; delete from emp where empno >7900; 1.加where 2. delete from 表名 ; 全表删除: delete from emp ; 可以回退 truncate table emp ;不能回退 原因: DML:insert update delete ->可以回退, 而truncate属于DDL2.测试二者执行时间 打开执行时间: set timing on/off 对于少量数据: delete 效率高 ,一行一行删除 对于海量数据:truncate效率高 , a.drop table 丢弃整张表 ,b.重新创建表 3.delete支持闪回, truncate不支持闪回 4.delete不会释放空间 (换两个地方存储数据[undo空间]),trucante会 5.delete会产生碎片,truncate不会 如果碎片太多,需要整理碎片:a. alter table 表名 move ; b.导出导入 修改updateupdate 表名 set 字段名1=字段名1 , 字段名2=字段名2,字段名3=字段名3… where … update emp set ename = ‘x’ ,job =‘y’ where empno>7900; 四.DDL:数据定义语言 create/drop /truncate /alter table 创建表create table mytab6 ( id number , name varchar(10), age number ) ; 注意事项: 1.权限和空间问题 2.表名的规定: a.必须以字母开头 b.表名只能包含: 大小写字母、数字、_、$、# c.长度 1-30个字符 d.不能与数据库中其他对象重名(表,视图、索引、触发器、存储过程…) e.不能与 保留字重名 查看保留字:DBA账户 sqlplus / as sysdba 查看保留字: select *from v$reserved_words order by keyword asc ; 设置某个字段的宽度:字符 col KEYWORD for a10 数字 col LENGTH for 9999 修改表:a.追加新列 alter table mytab6 add myother varchar2(10) ; b.修改列 修改列的长度 alter table mytab6 modify myother varchar2(20) ; 修改列的类型 alter table mytab6 modify myother number ; 注意: blob/clob不能修改 ->先删除此列,重新追加 alter table mytab6 add myother2 blob ; alter table mytab6 modify myother2 number ;c删除列 alter table mytab6 drop column myother2 ; d重命名列 alter table mytab6 rename column myother to myother3 ; 删除表 select *from tab; 表以及回收站中的表 drop table mytab6; -->放在了回收站 查看回收站 show recyclebin; 清空回收站 purge recyclebin; 还原回收站 闪回 删除表 并清空: drop table test02 purge ; 五.事务概念:作为单个逻辑工作单元执行的一系列操作 四大特性:ACID 转账: zs->ls 1000 :update : zs -1000 ls +1000 Atomicity原子性:要么都成功,要么都失败。 Consistency:一致性 :事务执行前后 ,总量保持一致 Isolation隔离性:各个事务并发执行时,彼此独立 Durability:持久性:持久化操作。事务的生命周期: (MySQL: 自动提交,自动将每一条DML语句直接commit ) Oracle:手工提交 事务的开始标识: 第一条DML 事务的中间过程: 各种DML操作 结束: a.提交 i.显示提交:commit ii.隐式提交(自动提交):正常退出exit(ctrl+c)、DCL(grant …to…, revoke …from )、DDL(create … ,drop …) b.回滚 i.显示回滚:rollback ii.隐式回滚:异常退出(宕机、断电)保存点savepoint: 打游戏: 10 : 1 ,2(savepoint) , 3,4,5 (savepoint) ,6,7,8 -->rollback 语法: x a b savepoint 保存点名字insert into xx values(1,‘zs’); insert into xx values(2,‘ls’); savepoint initdate ; insert into xx values(3,‘ww’); rollback to savepoint initdate ; 事务的隔离级别: 多个事务会产生很多并发问题: 1.脏读:当一个事务正在访问数据,并对此数据进行了修改(1->2),但是这种修改【还没有提交到数据库(commit)】; 此时,另一个事务也在访问这个数据 。本质: 某个事务(客户端)读取到的数据是 过时的。 2.不可重复读: 在一个事务内(客户端)内,多次读取同一个数据,但结果不同。 本质:就是事务A拿到了 被其他事务B修改并提交后的数据 3.幻读(虚读):在一个事务内(客户端)内,多次读取同一批数据,但结果不同。 不可重复读和幻读的区别: a.不可重复读指的是对于“同一条”数据的查询操作 a ->b 幻读对于“多条数据”的查询操作,数据量数: 20条 -> 18条 b.不可重复读:update 幻读:insert|delete四种隔离级别的程度 依次递进(解决 并发的效果,越来越 稳定) ,但是性能越来越低。 并发性 、可用性 本身就是矛盾的。 Oracle只支持其中两种:Read Committed(默认),Serializable (oracle自身扩种了一种 read only,实际 read only隶属于 Serializable级别 ) 切换四种隔离级别: set transaction isolation level Serializable; 切换read only: set transaction read only ; MySQL 支持全部的四种 六.索引索引: 类似于书的目录 索引类型 默认B树索引(默认)、位图索引 create 类型 名字 create index 索引名create index myindex on emp(deptno) ; 主键默认 就是索引 create index myindex on emp(deptno ,sal ) ; 什么时候 适合建立索引: 数据集中的列,经常在where中使用的列, 数据量大 数据集中的列:主键列(empno,id)不集中,但是因为 会被频繁使用 ,因此也适合建索引 empno : 1 2 3 empno,ename ,job,sal…20 select *from emp where age = 23 ; 字段:字典 deptno : 1000 -> 10 empno : 1 2 3 删除索引drop index 索引名 drop index myindex ; 数据库对比 1.时间函数:在数据库表中添加bai默认的当前日期列du: 表中添加日期列,在其默认zhi值中,填上默认日期的dao函数即可。 oracle 当中是sysdate! sql server中是GETDATE() MySQL:curdate() ’yyyy-mm-dd’的格式返回今天的日期,可以直接存到date字段中。 不包括当前的时间 只显示年月日:需要你读取出来的时候,删除掉后面的时间部分。 因为数据库会自动加上 0:00:00 的。 2.关键字约束(数据类型)oracle中的数字类型都用number,但是mysql就要具体详细分int,long等等。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |