Oracle入门笔记

 

目录

创建用户

角色与权限

事务

      约束

表空间

增删改查

序列

伪列

修改表结构

特殊字符

操作函数

属性

高级查询

匿名块

条件语句

视图

同义词

游标

存储过程

复制表

自定义函数

Java与数据库

触发器


序言

本文章内容为同步Oracle笔记,方便在线查看,由问题还请指出,随时更新。

第一章

创建用户

一个实例只有一个SID号,

dba数据语法格式:

  1. 创建用户:

sys,system(尽这两个用户有权限)

Create user 用户名 identified  by  “密码”  Default  tablespace  用户表空间  Temporary  tablespace 临时表空间

 

 

角色与权限

角色(一组权限的集合):

分类:1.系统权限

                   Create table (创建表)

                  

            2.对象权限(自己创建的东西都是对象)

                   对数据进行操作(增insert、删delete、改、查)

                   查:select  *  from  用户名.表

DML 数据操作语言

常见角色:

  1. 连接(connect)
  2. (resource)
  3. 管理员权限(dba)

sys和system可给用户分配角色、权限

分配角色:grant 角色 1,角色2  to 用户名

回收角色:revoke 角色1,角色2  from 用户名

分配系统权限:grant 系统权限 to 用户名

回收系统权限:revoke 系统权限 from 用户名

分配对象权限:grant 对象权限 on 表 to 用户名(grant 对象权限 on  用户名1.表 to 用户名)

回收对象权限:revoke 对象权限 on  表  from  用户名

 

权限的传递:分配对象权限 + 用户名 with  grant  option

回收传递权限:回收对象权限 + 用户名 with grant option

Eg:分配所有权限给一个用户: grant  all  on 表 to 用户名

 

 

修改密码:在oracle 数据中用户只能修改自己的密码 而管理员可以修改任何人的密码

语法:alter user 用户名 identified by “新密码”

 

账号加锁(超级管理员):alter user 用户名 account  lock

解锁账号(超级管理员):alter user 用户名 account  unlock

删除账号(超级管理员):drop  user 用户名(该用户只能为空用户)

                                               drop user 用户名 cascade(删除非空用户)

 

事务

事务(保证的数据的 完整性、一致性)

  1. 显性事务(默认的。没有提交前其他用户看不到,只有提交后才能看到,没有提交前只在本会话期间可见)

提交指令:commit

回滚指令:rollback

  1. 隐性事务(当进行ddl和dcl时内部隐藏了一个commit命令)
  2. 自动提交事务(不提倡,不安全)

设置自动提交:set.autocommit  on|off

(一条sql语句只能选择一种,一般为显性事务)

Eg:1.创建用户 tiger 密码 123 分配角色 connect 和 resource 系统权限create user

 

SQL(一种语言,符合ANSI,能操作数据库)

增:create table  表名(字段1 数据类型[约束], 字段2 数据类型[约束])

删:delete from 表名

改:update

查:select

备注:中括号的内容可以省略

数据类型:int ,bigint(长整型),char,varchar2(存放字符串,默认50字符最大3000),number(m,n)(放小数,m=小数+整数,n=小数),boolean布尔型,

date(日期)。

      约束

分为字段级和表级

         primary key       主键(联合主键,逻辑主键,表级约束),标识一条记录,设在字段(字段唯 

                  且不为空)中。

Unique     唯一约束 允许字段为空

外键约束   B数据表中的主键在A数据表中为普通字段,则这个字段为B的外键或B关联A的外键。A(主、--父表---) B(从、---子表---)

Not null    非空(字段级约束)

Null                   空(字段级约束)

检查约束        check

Default             默认约束

                  注:一个字段可以拥有多个约束

 

SQL.PULS(一个环境,是oracle的一个属性,不能操作数据库)

Save保存文件               路径:文件  

Conn 连接数据库        用户/密码

Discon 断开数据库

查表信息列表

查字段信息

查约束信息

Data数据

Metadata 元数据

 

数据表加主键:

alter table表名 add constraint 主键名(pk_) primary  key (字段)

 

主外键:名称可以不一样,数据类型必须一样(在父表中是主键,在子表中是字段)

alter table 子表 add  constraint 外键名(fk_子表_父表) foreign  key(子表中的字段) reference 父表(父表中的字段)

 

唯一约束:

Alter table 表名 add constraint 约束名(uq_) unique(字段)

检查约束:

Alter table 表名 add constraint 约束名 check(表达示)

 

删除约束:

Alter table 表名 drop constraint 约束名

删除数据表:

drop table 表名

 

表空间

创建表格空间(只能用sys用户建立)

         创建用户(数据)表空间:

create tablespace 表空间名 datefile ‘路径+文件名1.dbf’ size 值1,……. ‘路径+文件名n.size 值n

         创建临时表空间:

create  temporary tablespace 表空间名 tempfile‘路径+文件名1.dbf’ size 值1,……. ‘路径+文件名n.size 值n

         索引表空间:

                  语法与数据表空间一样,用名字来区分。

修改表空间大小

         修改(用户)数据表空间:

                  Alter database datafile ‘路径+文件名.dbf’resize值

         修改临时表空间:

                  Alter database tempfile ‘路径+文件名.dbf’resize值

         追加(用户)数据表空间大小:

                  Alter database 表空间名 add datafile ‘路径+文件名.dbf’size 值

         追加临时表空间:

                  Alter database 表空间名 add tempfile ‘路径+文件名.dbf’size 值

删除表空间(sys权限操作):

         删除空表空间:Drop tablespace 表空间

         删除非空表空间:drop tablespace 表空间 including  contents

         Drop tablespace 表空间 includeing contents and datafiles(sql输入攻击数据库)

完整建表格式:

Create table 表名(

         字段1 数据类型 【约束】,

         字段2 数据类型 【约束】

         )

【Tablespace 表空间】

 

 

 

命名规范:字母、数字、下划线、并且只能以字母开头,所有对象命名方式应该以驼峰方式命名(首字母小写其他大写eg:studentName)

 

 

 

 

 

 

 

 

第二章

增删改查

新增操作:

         Insert  into 表名(字段1,字段2……字段n)      values(值1,值2,……值n)

删除操作:

         Delete from 表名 [where 条件表达式] 删除符合条件的数据

         Delete from 表名  删除当前数据表中的所有记录

更新操作:

         Update 表名 set 字段1=值1,字段2=值2……字段n=值n  [where 条件表达式]

查找操作:

         Select 字段1,字段2,……字段n            from 表1,表2,……表n   [where 条件表达式]   [group  by 字段1,字段2……字段n  having 条件表达式]  [order by字段1,字段2……字段n  asc|desc]

备注:group by A havingB  A分组按照条件B

                   Order by 排序 asc升序 desc降序

                  Select  * from 表名  查询这个表中的全部记录

序列

1.序列是独立对象。2.可产生连续且唯一的编号。3.一张表只用一个序列

创建序列:

         Create sequence 序列名

                  Increment by 值----增量

                  Start with 值----初始值

                  Maxvalue 值-----最大值

                  Minvalue 值-----最小值

                  Cycle|no cycle------是否循环

                  Cache 值|no cache-----是否缓存

伪列

         Nextval-----下一个值

Currval----当前值

Select 序列名.nextval  from dual       查询虚拟表中序列的下一个值

备注:第一次使用currval之前必须进行一次nextval取值。

带序列向数据表中插入数据:

         Insert into 表名(字段1,……) values(序列名.nextval……)

Sysdate (系统当前时间)

子表中的记录在主表中有定有,在主表中有的在子表中不一定有。

外键值被引用了,在主表中不能删除。

 

修改表结构

         增加一列:

                  Alter table 表名 add 字段 数据类型 [default 表达式]

         增加多列:

                  Alter table 表名 add (字段1 类型 [约束],字段2 类型 [约束])

         修改列:

                  修改字段数据类型、默认值:

                           Alter table 表名 modify 字段 数据类型 [default表达式]

         删除字段:

                  Alter table 表名 drop column 字段

 

 

特殊字符

||----表示字符串连接

%----匹配一个多个或零个字符

_-----只能匹配一个字符

>-------大于

< ---------小于

<>------不等于

= ------等于

a>=18 and a<=28     a between 18 and 28    a=18 or 19 ……or 28  

in-----或者 in(“张三”,“李四”)

all -----全部所有

any----任何一个

 

操作函数

nvl (判断字段值是否为空)

nvl(表达式1,表达式2)当表达式1的值为非空时整个nvl的值等于表达式1的值否则整个nvl的值等于表达式2的值。

Count(求记录数)

         Select count (*) from emp  在emp表中查询出所有的记录数

         Select count (ename)from emp 在emp表按照ename列的数来查询统计数

Max(最大值),min(最小值)

         Select max(sal) from emp 从emp中找出工资最大的金额

         Select * from emp where sal=max(sal) 在emp表中找到工资最大金额的记录

Avg(平均值)

         Select avg(sal)from emp 计算emp表中工资的算术平均值

Sum(求和)

         Select sum(sal) from emp 在emp中把所有工资做和

Distinct(去掉重复记录)

         Select distinct ename from emp 按姓名合并、删除重复记录

Union(并为)

         Select ……

         Union

         Select……

将查询语句1和查询语句2的结果取并集并且删掉重复记录

         Union all 只合并不删除重复记录

Intersect(求交集)

         Select……

         Intersect

         Select……

将查询语句1和查询语句2的结果取交集。

Minus(补集)

除去a和b重复的部分只留a的记录。(在a中去掉与b重复的部分)

 

字符串函数

Upper()

         Upper 表达式 将表达式中的字符全部变为大写

Lower()

         Lower 表达式 将表达式中的字符全部变为小写

Length()

         Length 表达式 取表达式中字符串的长度

Substr()

         Substr (表达式,m,n)取子串  在表达式中第m个位置取n个字符长度

Concat

         concat(表达式1,表达式2)连接字符串

initcap

         initcap (表达式) 将表达式的首字母变为大写

replace(替代)

replace(表达1,表达式2,表达式3)用表达式3代替表达式2在表达1出现的字符串

instr

         instr(表达式1,表达式2) 求表达式2在表达式1中的位置若未找到返回值为0(从0下标开始计数)

trim

         trim(表达式) 去掉表达两端的空格 ltrim 去掉左端的空格 rtrim 去掉右端的空格

ascii

         ascii(字符) 返回字符的ASCII码值

 

lpad(左填充函数)

         lpad(目的字符串,填充后字符串的长度,被填充的字符串) 左填充函数

         select lpad (‘adcde’,10,‘F’)from dual           FFFFFabcde

         select lpad (‘adcde’,3,‘F’)from dual            adc

rpad(右填充)

 

替代函数不等价于填充函数

 

 

备注:Select ename en from emp ==select ename as en from emp    ename的小名为en

 

数学操作函数:

Abs(表达式)

         取表达式的绝对值

Mod(表达1,表达式2)

         表达式1对表达式2取余

Trunc(表达式,m)

         Trunk(表达式) 取整

         截取m位的小数(不四舍五入)

Round(表达式,m)

         对表达式第m位小数进行四舍五入,

 

日期函数:

Sysdate()

         取系统当前时间

Add-month(表达式,m)

         给表达式加上或减少,m个值

Months_between(表达式1,表达式2)

         求表达式1和表达式2的差值,以月为单位返回,不够时自动进1

To_char(表达式,’格式’)

         将表达式转换为字符

         yyyy------年份用4位表示

         mm-------月份2位

         dd-----天,日2位

         day-----星期几

         hh12------12进制表示小时

         hh24------24进制表示小时

         mi-----分钟

      ss-----秒

oracle 默认为日月年

to_date(表达式,‘格式’)

         将表达式转换为日期

         ‘yyyy-mm-dd  hh:mi:ss’

属性

Is null (属性)

         Eg:ename is null   查询ename的值为空的字段

         Eg:ename is not null 查询ename的值不为空的字段

Rownum 

         Eg:select * from emp where rownum <=3 或者<3 查询前三条记录

Depton in(10,20,30)-----depton的值为10,20或者30  == depton=10 or depton=20 or depton=30

Like ------模糊查询            like ‘%王%’

字符串区分大小写,命令不区分大小写

字符串:

第三章

高级查询

笛卡尔积(将表1的序列数乘表2的序列数)

多表查询:需要利用多张数据表通过一定条件将表连接起来进行查询

         Eg:select *from emp,dept where emp.deptno=dept.id

         从emp表和dept表中查询出符合emp表中deptno的值等于dept表中id的值

内部连接:

         Select 表1.*,表2.* from 表1 inner join

                                            表2 on a.字段=b.字段

         内连接值返回满足符合条件的字段

等值连接:

         Select *from emp

外连接:

         不仅返回满足条件的记录也返回不满足条件的记录

左连接:

         Select a.*,b.* from 表1(左表) a left join 表2(右表) b on a.字段=b.字段

         不仅返回满足条件的记录也返回左表不满足条件的记录,右表以空填充

右连接

         Select a.*,b.* from 表1 a right join

         不仅返回满足条件的记录也返回右表不满足条件的记录,左表以空填充

全连接

         Select a.*,b.* from 表1(左表) a full join 表2(右表) b on a.字段=b.字段

         上面的返回满足条件的记录,中间放左连接的记录,下面返回右连接的记录

 

子查询

         Select a.*,b.* from ()where a.depton=b.id and a.enam=()

         Select emp.* from emp where emp.deptno =(select id from dept)

         Select *from emp where sal>any(select sal from emp where deptno =20)

         Select *from emp where sal>all(select sal from emp where deptno =20)

         在一个select语句中使用另一个select语句作为它的条件或数据来源

不相关查询

         子查询不依赖于主查询,子查询可以独立运行

相关查询:

         子查询依赖主查询,子查询不可以独立运行。把主查询作为子查询的条件

 

 

Oracle 操作

数据字典

        

匿名块

         将一组sql语句放到一个匿名块中执行。

         关键字声明:

                  Declare

                          变量声明

                  Begin      

                          执行部分

                  End;

         在匿名块存储过程函数中每条sql语句结束后必须加英文分号

 

变量声明:

直接声明:

变量名 数据类型;        

(一条sql语句只可以声明一条语句 )(代表数据表中的一个据的值)

         列变量(与某张数据表的某一列的数据类型完全相同):

                  变量名 数据表.列%type;(代表数据表中的一列)

         行变量:

                  变量名 数据表%rowtype;(代表数据表中的一行)

变量赋值:

         直接赋值:

 a:=1; 赋值1给a

         交互式赋值:       

                  a:=&a;数值型

                  a:=’&a’字符串型

         查询赋值:

                  Select 字段1,……字段n into 变量1,……变量n

                          From 表 where 条件;(每个字段只能返回一条记录)

异常:

         No_data_found  没有找到数据

         Too_many_rows 返回多条记录异常

         Others 其他异常(必须放在所有异常最后)

 

Dbms_output.put_line(表达式); 输出

条件语句

If 表达式 then

sql语句

         end if;

 

 

if 表达式 then

         sql语句

else

         sql语句

end if;

 

 

if表达式 then

         sql语句

elsif表达式 then

         sql语句

elsif 表达式 then

         sql语句

end if

 

 

循环语句

Loop

         Sql语句

Exit when 表达式;

End loop;

(先执行再判断,不满足退出)

 

 

While 表达式

         Loop

         Sql语句

         End loop

(先判断再执行)

 

 

For 变量 in 最小值..最大值

         Loop

                  Sql语句

         End loop;

不需要声明变量,不需要打开游标,不需要读取记录,不需要判断结束,不需要关闭游标

 

Case

         When 表达式1 then 值1

         When 表达式n then 值n

         Else

表达式 n+1

End case

 

Decode(表达式1,条件1,结果1,

表达式1,条件n,结果n,

表达式2,条件2,结果2,

表达式n,条件n,结果n)

        

批处理文件:一次点击执行多条指令

 

视图

视图是一个虚拟表只存放select语句,数据来源于数据表

虚拟的数据表称为视图,视图不是用来存放数据的,数据表用于存放数据

视图优点:1.安全性好

                    2.可重复利用

         新建视图:

                  Create or replace view 视图名

                  As

                  Select 语句

                  若重名覆盖掉原来视图,数据来源于select语句

视图的数据与数据表的数据一一对应。

同义词

创建私有同义词:

         Create synonym 同义词名 for 数据表|视图

删除私有同义词:

         Drop synonym 同义词(谁创建的谁删除)

创建公有同义词:

         Create public synonym 同义词名 for 数据表|视图 (sys权限)

删除公有同义词:

         Drop public synonym

 

游标

游标:内存区域,可以通过指向记录的指针逐行返回记录

                  初始状态指向第一条记录的上方

 

创建游标:

         Cursor 游标名 is select 语句

应有游标:

open cur;--打开游标

myrow emp%rowtype;--定义行变量

fetch 游标名 into --行变量—将游标下移再读取游标中的值

close cur;--关闭游标

 

游标名%found---如果游标读取到记录,返回值true否则返回false

游标名%notfound—如果游标没有找到记录返回true否则返回false

游标名%ravcount—游标读取的记录数,打开游标后值为0,每fetch一次加一

游标名%isopen—判断游标是否打开,打开返回true否则返回false

带参数的游标:

Cursor 游标名(变量 数据类型) is select语句where 条件=变量;

         带有参数的游标 要先进行交互式赋值,再打开游标

Eg: 变量名为vempno 

vempno:=&vempno;

         Open e(变量名)

         游标中参数的数据类型不需要指明长度。

存储过程

存储过程是一组为实现某个目地的sql语句的集合

存储过程编译以后,就存放在数据库中了。

优点:

         统一操作流程

         重复利用

         安全性高

         降低I/O

        

声明存储过程

Create or replace procedure 存储名(形参列表)

As|is

         声明部分;

Begin

         执行部分;

         异常;

End;

         Eg:declare

                          声明;

                  Begin

                          存储过程(实参);

                          异常;

                  End;

实参与形参个数相同,相对应的实参、形参数据类型相同。

参数类型:

         In--输入参数(实参给形参传递值)

         Out--输出参数(空值传入代值传出)

         In out --输入输出参数(非空传入非空传出)

复制表

Crate table 表名 as( select 语句)

         当结果集为空时,只复制表结构,结果集非空时,不仅复制表结构也复制数据。

自定义函数

函数是由一组sql语句集合组成的,在函数中必须要有return语句。

函数有于存储过程相同的优势。

新建函数:

         Crate or replace function 函数名(形参列表)

                  Return 数据类型;

         As|is

                  变量声明部分;

         Begin

                  执行部分;

         Return语句;

                  异常处理;

         End;

存储过程没有返回值,函数必须有返回值,不需要有字符长度。

函数调用:

         变量=函数(实参列表);

Java与数据库

在Java中连接数据库:

.jar----架包

ClassesB.java------驱动包

Classforname(”oracle.jdbc.driver.oracledriver”);---加载驱动

Connection con=DriverManager.getconnection

 

conn=DriverManager.getConnection("jdbc:mysql5656://127.0.0.1:3306/iepdb?useUnicode=true&characterEncoding=UTF-8","root","123456");

                          // 指定驱动,指定服务器,指定数据库,设置登录名和密码

触发器

当执行某sql语句时可以触发其他sql语句。

级连删除:先删除子表中的数据,再删除主表中的数据。

触发器是一种特殊的存储器,不接收也不返回任何值,由特定的值触发。没有形参没有return语句,触发器分为:DML触发器,代替触发器。

DML触发器:

         Create or replace trigger 触发器名称

         Before|after  insert|delete|update on 表名

         For each  row

         Declare

                  变量声明;

         Begin

                  执行部分;

         End;

         行级触发器 影响一条记录执行一次。有两个伪列, :new.字段----新值

                                                                                                           :old.字段-----旧值

         语句级触发器 没有for each row 无论影响多少条记录触发器只执行一次。

触发器不能使用事务不能有提交,有错误会自动回滚。

 

 

New

Old

Update

Delete

Insert

 

 

 

 

 

 

 

代替触发器

         主要用于视图

语法:

         Create or replace trigger 触发器名

         Instead of insert|update|delete on 视图

         For each row

         Declare

                  变量;

Begin

         执行部分;

End;

用来代替dml触发器操作,因为对视图进行操作,所以可以对多张数据表进行操作。

 

删除触发器

         Drop trigger 触发器名

关闭

         Alter trigger 触发器名 disable

打开

         Alter trigger 触发器名 enable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值