oracle 基础笔记
sqlplus / as sysbda;-- 运行命令
conn scott/tiger [as sysdba];-- 登录
show user;查看当前用户
alter user scott account lock;-- 锁定用户
alter user scott account unlock;-- 解锁
create tablespace nn_test datafile 'd:\database\nntest.dbf' size 10M;-- 创建表空间,指定路径和大小
alter tablespace nn_test detafile 'd:\database\nntest.dbf' resize 20m;-- 修改表空间
-- 删除表空间
drop tablespace nn_test;-- 逻辑删除
drop tablespace nn_test including contents;--逻辑删除表空间和段
drop tablespace nn_test including contents and datafiles;--物理删除表空间和数据文件
--创建表空间
create tablespace stuPace datafile 'd:\database\zxx.dbf' size 10M;
--创建用户 用户名zxx 密码 指定表空间和临时表空间
create user teacher identified by "123456" default tablespace stuPace temporary tablespace temp;
drop user teacher;-- 删除用户
-- oracle数据库
-- 1,屋里存储:数据文件:数据存放后期产生的数据;控制文件:才能放数据库本身相关的数据;日志文件:操作过程中的日志记录。
--2,逻辑存储结构:按照层次进行管理
数据库-->表空间-->逻辑对象-->数据段-->数据区间(最小存储单元)-->数据块(逻辑管理的最基本的单元)
一个表空间可以有多个数据文件,一个数据文件只属于一个表空间
-- 系统权限
三个常用的角色:DBA 拥有操作数据库的所有权限;connect 数据库的连接权限;resource 应用程序的开发角色权限。
-- 对象权限
对表的操作权限(基本操作)
select,update,delete,insert,references(表外键关联权限操作),flashback(回滚到某个点),debug,query,rewrite,commit,refresh 等
grant connect,resource to teacher;-- 赋权限
grant select on scott.emp to teacher;--赋对象权限
grant all privileges on scott.dept to teacher;-- 表的全部权限
revoke insert on scott.emp from teacher;-- 权限回收
revoke all privileges on scott.emp from teacher;
-- DDL create table 表名,alter table 表名,truncate table 表名,drop table 表名。
-- DML select insert update delete
-- DCL grant / revoke
-- 创建表
create table studentinfo111 (
stuid number(3) not null,
stuname varchar2(10) not null,
stusex varchar2(3) check(stusex='男'or stusex='女') not null,
stubirthday date
);
-- 使用序列自增长stuid
create sequence stu_id
start with 1
increment by 2
maxvalue 5
minvalue 0
cycle
cache 2;
-- 插入数据
insert into studentinfo111 values(stu_id.nextval,'小白','女',sysdate);
insert into studentinfo111 values(stu_id.nextval,'小白','女',sysdate);
insert into studentinfo111 values(stu_id.nextval,'小白','女',sysdate);
insert into studentinfo111 values(stu_id.nextval,'小白','男',sysdate);
insert into studentinfo111 values(stu_id.nextval,'小白','女',sysdate);
commit;
select * from studentinfo111;
select * from scott.emp;
select sal*12 年薪 from scott.emp;
select * from scott.emp;
select * from scott.dept;
-- 部门为 SALES RESEARCH 的员工列出
select * from scott.emp where deptno in
(select deptno from scott.dept where dname='SALES' or dname='RESEARCH')
-- 上级是 BLAKE 的员工
select * from scott.emp where mgr in
(select empno from scott.emp where ename='BLAKE');
-- 同义词synonym
create [or replace] [public] synonym stu for studentinfo111;--建同义词即是给表studentinfo111取个别名
create synonym stu for studentinfo111;
select * from stu;--默认是私有的
drop public synonym stu;
--视图操作view
create [or replace] view v_sut
as
select * from sif;
create view view_stu
as select stuid,stuname from studentinfo111;
select * from view_stu;
drop view view_stu;
-- 给表建立索引:索引是表中数据和相应存储位置的列表,index
索引是一种树状结构,从逻辑设计和屋里设计实现两方面进行分类,
逻辑设计:分为单索引列、组合索引、唯一索引、非唯一性索引和基于函数的索引等。
物理实现:分区索引、非分区索引、B树索引、正向索引、反向索引、位图索引等
create unique index i_stuid on studentinfo111(stuid);--创建唯一性索引,不能是null,不能重复,
create bitmap index i_stusex on studentinfo111(stusex);--创建位索引
alter index i_stuid rebuid;-- 重建索引
alter index i_stuid coalesce;-- 合并索引
drop index i_stusex;
--序列:sequence
create sequence sql_sid2
start with 1
increment by 1
minvalue 0
maxvalue 5
cycle -- 入股序列达到最大值,会重最小值开始写 (默认 nocycle)
cache 3 -- 缓存量,默认20,(默认 nocache)
create table scroinfo(
sid number(5) not null,
score number(5,2) not null
);
-- 使用序列添加数据
select * from scroinfo;
-- 事务处理
事务用于确保数据库数据的一致性,事务处理和锁是两个紧密联系的概念。
oracle中的事务默认开启,需数据持久化则手动提交,提交后事务就结束;
--事务的ACID属性
原子性 atomicity:要么全部进行,要么全部撤销
一致性 consistency :事务处理要将数据库从一种状态转变为另一种状态
隔离性 isolation :事务处理提交之前,事务处理的效果不能由系统中其他事务处理看到
持久性 durability :表示一旦提交了事务处理,它就永远生效。
insert into scroinfo values(sql_sid2.nextval,782);
insert into scroinfo values(sql_sid2.nextval,781);
insert into scroinfo values(sql_sid2.nextval,782);
savepoint poiOne;-- 设置保存点
insert into scroinfo values(sql_sid2.nextval,783);
insert into scroinfo values(sql_sid2.nextval,784);
insert into scroinfo values(sql_sid2.nextval,785);
savepoint poiTwo;
select * from scroinfo;
rollback to poiOne;--回滚到poiOne点,如果中间提交了事务则不能回滚
select * from scroinfo;
commit;
rollback;-- 取消全部事务
-- 修改序列递增值,不能修改序列的start with
alter sequence sql_sid2
increment by 2;
drop sequence sql_sid2; -- 删除
--常用函数
select lower('Java35') 小写 from dual;
select upper('Java35') 大写 from dual;
select ltrim(' Java35 ') 左空格 from dual;
select rtrim(' Java35 ') 右空格 from dual;
select trim(' Java35 ') 空格 from dual;
select length('Java35') 长度 from dual;
select replace('小白小小白小白小小白小白小小白小白小小白','小','黑') 替换 from dual;
-- 数学函数
select abs(-589) 函数 from dual;
ceil()向上取整 floor()向下取整 round()四舍五入 trunc(n,[m])截取数字
select 'trunc:' || trunc(1234.423) from dual;
select 'trunc:' || trunc(1234.423,2) from dual;
select 'trunc:' || trunc(1234.423,-2) from dual;
-- 函数转换
select to_number('3.1415') 函数 from dual;
select to_char(sysdate,'yyyy-MM-dd HH:mi:ss') 函数 from dual;
select to_date('10:25:52','hh:mi:ss') 函数 from dual;
select nvl(expr1,expr2) 函数 from dual; -- 如果expr1是null,则返回expr2.两者可以是任意类型,但两者的数据类型必须要匹配。
-- 如果expr1不是null,则返回expr2;如果expr1是null,则返回expr3;
select nvl2(expr1,expr2,expr3) 函数 from dual;
-- 执行过程插入表中数据
create or replace procedure pro_insertEmp(empno number,ename varchar2,sal number)
is
begin
insert into scott.emp(empno,ename,sal) values(empno,ename,sal);
end;
-- 调用有参存储过程
declare
empno number;
ename varchar2(10);
sal number;
begin
pro_insertEmp(2003,'dhuisdu',5200);
end;
begin
pro_insertEmp(empno => 2004,ename =>'小白',sal=>2344);
end;
-- 存储过程输出系统当前时间
create or replace procedure pro_sysdate
as
begin
dbms_output.put_line(to_char(sysdate,'yyyy-MM-dd hh:mi:ss'));
end;
-- 调用
begin
pro_sysdate;
end;
-- 输出参数的存储过程
create or replace procedure pro_add(value1 number,value2 out number)
is
begin
value2:=value1+20;
end;
-- 调用并输出
declare
re number;
begin
pro_add(10,re);
dbms_output.put_line(re);
end;
declare
re number;
value1 number;
begin
value1:=25;-- 赋值
pro_add(value1,re);
dbms_output.put_line(re);
end;
-- 函数
create or replace function fun_selectEmp(namev varchar2)
return number -- 返回类型
as
gz number; --返回变量
begin
select sal into gz from scott.emp where ename=namev;
return gz;--返回值
end;
-- 调用函数,输出返回值
declare
namev varchar2(30):='SMITH';--参数变量
returnv number;--返回变量
begin
-- namev:='SMITH';--赋参数值
returnv:=fun_selectEmp(namev);
dbms_output.put_line('smith的工资为:'|| returnv);
end;
-- 命名规范
v_变量名 c_常量名 pro_过程名 fun_函数名 view_视图名 i_索引名 seq_序列名
declare
v_name varchar2(20);
c_tax constant number(5,2);
v_sal number(6,3):=233.232;
flag boolean not null default true;-- 定义布尔变量必须制定默认值
-- oracle 分三块
declare
/*定义部分*/
begin
/*执行部分*/
exception /*异常处理块*/
end;
declare
v_name scott.emp.ename%type;
v_sal scott.emp.sal%type;
begin
select ename,sal into v_name,v_sal from scott.emp where empno=&输入员工编号;
dbms_output.put_line('姓名:'||v_name);
dbms_output.put_line('工资:'||v_sal);
exception
when no_data_found then
dbms_output.put_line('输入的员工编号不正确');
end;
drop procedure pro_sal;
-- 条件语句
create or replace procedure pro_empsal(v_name varchar2)
as
v_sal number;
begin
select sal into v_sal from scott.emp where ename=v_name;
if v_sal<2000 then
update scott.emp set sal=v_sal+500 where ename=v_name;
commit;
end if;
exception
when no_data_found then
dbms_output.put_line('该用户不存在');
end;
--
declare
v_name varchar2(20):='ALLEN';
begin
pro_empsal(v_name);
end;
select * from scott.emp;
--
create or replace procedure pro_comm(v_name varchar2)
as
v_comm number;
begin
select comm into v_comm from scott.emp where ename=v_name;
if v_comm >0 then
update scott.emp set comm=v_comm+100 where ename=v_name;
commit;
else
update scott.emp set comm=v_comm+500 where ename=v_name;
commit;
end if;
exception
when no_data_found then
dbms_output.put_line('无此用户');
end;
--
declare
v_name varchar2(20):='ALLEN';
begin
pro_comm(v_name);
end;
-- case条件语句
create or replace procedure pro_jobcomm(v_id number)
as
v_job varchar2(30);
begin
select job into v_job from scott.emp where empno=v_id;
case v_job
when 'SALESMAN' then
update scott.emp set comm=nvl(comm,0)+2 where empno=v_id;
commit;
when 'MANAGER' then
update scott.emp set comm=nvl(comm,0)+3 where empno=v_id;
commit;
when 'CLERK' then
update scott.emp set comm=nvl(comm,0)+4 where empno=v_id;
commit;
else
update scott.emp set comm=nvl(comm,0)+5 where empno=v_id;
commit;
end case;
exception
when no_data_found
then dbms_output.put_line('查无此人');
end;
--
begin
pro_jobcomm(7902);
end;
-- 循环语句
create table teacher_info(
tea_id number,
tea_name varchar2(20)
);
select * from teacher_info;
-- loop循环
declare
i int:=1;
begin
loop
insert into teacher_info values(i,'小白'||i);
commit;
i:=i+1;
exit when i>10;
end loop;
end;
-- while 循环
declare
i int:=11;
begin
while i<20
loop
insert into teacher_info values(i,'小白'||i);
commit;
i:=i+1;
end loop;
end;
-- for 循环
declare
i int :=1;
begin
for i in 1..10 loop -- 1到10之间,每次自动增加1
dbms_output.put_line(i);
end loop;
end;
-- 游标
-- 使用游标提取部门no 为 20 的全部员工姓名个工资
declare cursor emp_cursor(id number)
is
select ename,sal from scott.emp where deptno=id;
v_name scott.emp.ename%type;
v_sal scott.emp.sal%type;
begin
if not emp_cursor%isopen then
open emp_cursor(20);
end if;
loop
fetch emp_cursor into v_name,v_sal;
exit when emp_cursor%notfound;--退出
dbms_output.put_line('第'||emp_cursor%rowcount||'个员工.'||'姓名:'||v_name ||',工资:'||v_sal);
end loop;
close emp_cursor;
end;
select * from scott.emp;
-- 使用游标更新和删除,游标的for循环简化了处理,会隐士打开和关闭游标
declare cursor update_cursor
is
select sal from scott.emp for update;-- 必须加上for update
begin
for emp_record in update_cursor loop
if emp_record.sal <1000 then
update scott.emp set sal=sal+500 where current of update_cursor;
elsif emp_record.sal<=2000 and emp_record.sal>1000 then
delete from scott.emp where current of update_cursor;
end if;
end loop;
commit; -- 统一提交
end;
select * from scott.emp;
--分页查询
select * from ( select rownum rw,e.* from scott.emp e order by e.empno desc ) where rw>0 and rw<6 ;
--按照工资排序后,取出第二页的条数。每页5 条 ROWNUM为序列值1,2,3,。。。
SELECT *
FROM (SELECT A.*, ROWNUM RN
FROM (SELECT *
FROM scott.emp
ORDER BY sal DESC) A
WHERE ROWNUM <= 5)
WHERE RN >= 1;
-- 数据优化方案:
查询时,尽量少使用*,
多表查询时,尽量使用连接查询(勿用笛卡尔积)
数据量比较大时,考虑添加索引字段,
对于更新类操作比较频繁情况,多使用commit提交事务,释放事务所占资源,
查询中多用 exists 替换 in。
-- 连接oracle 数据库
驱动driver: oracle.jdbc.driver.OracleDriver
连接url: jdbc:oracle:thin:@localhost:1521:orcl
用户名: scott
密码: tigger
oracle 基础笔记的更多相关文章
- Oracle基础笔记
=====================================第一章:oracle数据库基础============================================= Or ...
- Oracle基础学习笔记
Oracle基础学习笔记 最近找到一份实习工作,有点头疼的是,有阶段性考核,这...,实际想想看,大学期间只学过数据库原理,并没有针对某一数据库管理系统而系统的学习,这正好是一个机会,于是乎用了三天时 ...
- oracle学习笔记第一天
oracle学习笔记第一天 --oracle学习的第一天 --一.几个基础的关键字 1.select select (挑选) 挑选出显示的--列--(可以多列,用“,”隔开,*表示所有列),为一条 ...
- 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子
1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...
- Oracle基础知识汇总一
Oracle基础知识 以下内容为本人的学习笔记,如需要转载,请声明原文链接 https://www.cnblogs.com/lyh1024/p/16720759.html oracle工具: SQ ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- oracle基础教程(8)oracle修改字符集
oracle基础教程(8)oracle修改字符集 1.用dba连接数据库 -->sqlplus / as sysdba 2.查看字符集 -->SELECT parameter, value ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- php代码审计基础笔记
出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 --------------------------- ...
随机推荐
- java里面的标识符、关键字和类型
1. 注释 Java中有三种注释: (1) // -单行注释,注释从“//”开始,终止于行尾: (2) -多行注释,注释从““结束: (3) -是Java特有的doc注释,这种注释主 ...
- js中的substr和substring区别
js中的substr和substring区别 Substring: 该方法可以有一个参数也可以有两个参数. (1) 一个参数: 示例: var str=“Olive”: str.substring( ...
- 实现CTF智能合约题目的环境部署
本文章是参考一位大佬博客学来的. 智能合约题的环境主要包括两部分:一个是智能合约的部署,另一个就是监听合约事件进而发送flag的脚本. 智能合约部署 这里写的合约是指solidity合约,使用Remi ...
- 微信朋友圈评论/回复/cell/键盘谈起
微信朋友圈评论功能的细节考虑及实现 微信朋友圈回复tableview iOS 实现微信朋友圈评论回复功能(一)
- FreeRTOS-05任务相关API函数
根据正点原子FreeRTOS视频整理 单片机:STM32F207VC FreeRTOS源码版本:v10.0.1 任务相关API函数: 1. main.c /* * */ #include " ...
- 论文阅读 | ExtremeNet:Bottom-up Object Detection by Grouping Extreme and Center Points
相关链接 论文地址:https://arxiv.org/abs/1901.08043 论文代码:https://github.com/xingyizhou/ExtremeNet 概述 ExtremeN ...
- 3-----Docker实例-安装MySQL
Docker 安装 MySQL 方法一.docker pull mysql 查找Docker Hub上的mysql镜像 runoob@runoob:/mysql$ docker search mysq ...
- Vue触发input选取文件点击事件
CSS .upload-btn-box { margin-bottom: 10px; button { margin-right: 10px; } input[type=file] { display ...
- SpringBoot + Spring MVC国际化使用示例
项目中需要显示中英文两种语言,所以需要对显示的内容进行国际化,如下是一个示例程序. 程序文件结构,如下图,后面详细列出各文件的代码. 1. 编写maven的pom.xml文件,如下: <proj ...
- MYSQL分表与分区
什么是分表分区分表分区的区别实现方式上数据处理上提高性能上实现的难易度上mysql分表和分区的联系如何分区概述分区技术支持分区类型及举例注意应用场景示例订单表比预想中扩张速度快坑爹的日志表每半月一个分 ...