ITPub博客

首页 > 数据库 > Oracle > [Oracle]学习Oracle数据库的简单笔记(未完待续)

[Oracle]学习Oracle数据库的简单笔记(未完待续)

Oracle 作者:onimekyou 时间:2013-12-07 20:05:03 0 删除 编辑

第一局部


0.经过过程system经管员去解锁用户:

alter user scott account unclock ;

1.连接下令:

a) 可以用去显示当前用户名是甚么:

Show user ;

b)该下令经经常利用于切换用户。建议操纵通俗用户登录。假设确真需求system用户则可以操纵该下令切换为经管员用户:

conn[ect] 用户名/暗码@聚集[as sysdba/as sysoper] ;

c)用于断开当前用户与oracle连接可是其真不退出sqlplus窗心:

disc[onnect] ;

d)用于断开当前用户与oracle连接同时退出sqlplus窗心:

exit ;

 e)用户名修正暗码:

passw[ord] ;

f)交互下令:

select from emp where 列名 "&abc" ;

g)编辑sql文本的下令:

edit d:/aa.sql ;

h)需求如下,把屏幕上显示的记真保存到文件中,以供当前分析。尾先spool on,然后spool 文件途径,然后实施sql操做,末端spool off。

2. sql plus 下令

a) 设置宽度:

set linesize 120 ;

b)设置每页显示几多行:

set linesize 120 ;

3.用户经管

a) 创坐用户,不能用数字开尾,并且必需求有创坐用户的权限。

create user 用户名 identified by 暗码 ;

b)需求具有dba的权限,大体具有修正暗码的系统权限:

alter user 用户名 identified by 新暗码 ;

c)表空间指表存正在的空间,指背具体的数据文件。相干创坐用户的细节如下:

Identified by 疏解该用户将用数据库编制考证

default tablespace users 用户的表空间正在user上

temporary tablespace temp 用户的暂时表建正在temp空间 

quota 3m on users 疏解用户成坐的数据对象最大只能是3兆。

d)方才创坐的用户是出有权限的,以是需求dba给该用户受权:

grant connect to 用户名 ;

假设您希视该用户建表出有空间限制:

grand resource to 用户名 ;

假设您希视该用户成为dba:

grant dba to 用户名 ;

仅仅可以登录:

grand create session to 用户名 ;

e)付与/收出  权限/足色  的语法不异:

grand/revoke 权限/足色 to 用户名 ;

综开案例:

创坐用户小明,然后给她分配两个足色,可以登陆,创坐表,可以操做(crud)本人创坐表,然后收受接管足色,末端删除用户。

A)操纵system创坐xiaohong:

Create user xiaohongidentified by 1223 ;

B)给xiaohong分配两个足色:

Grant connect to xiaohong ;

Grant resource to xiaohong ;

C)xiaohong登陆:

Connect xiaohong/1223 ;

D)修正暗码:

Password xiaohong ;

E)xiaohong创坐一张最简单的表:

Create table users (int number) ;

F)收受接管权限战足色:

revoke connect from xiaohong ;

revoke resource from xiaohong ;

G)删除用户:

Drop user xiaohong [cascade] //中括号示意可选可不选。

PS:当我们删除一个用户的时辰,假设这个用户已创坐过程数据对象,那么我们正在删除该用户的时辰需求减这个选项:cascade。示意删除该用户的同时把该对象一并删除。

PS2:打算之小本事:假设希视看到某个打算有甚么数据对象,操纵PL/SQL登陆,即可以看到十足的数据对象。出有新建数据对象便出有对应的用户打算。

真例操纵1:

要求:完成一个成果,让xiaohong用户去查询scott emp表。

A)Conn scott/1223 ;

B)Grant select/update/delate/indert/all on emp to xiaohong ;

C)Conn xiaohong ;

D)Select from scott.emp  //要带上这个打算名,要不然便是本人的打算名。

真例操纵2:

A)创坐用户tea,stu,并给这两个用户resource战connect足色。

Conn system/1WHYwhy1223 ;

Create user tea identified by tea ;

Grant resource to tea ;

Grant connect to tea ;

Create user stu identified by stu ;

Grant resource to stu ;

Grant connect to stu ;

B)操纵scott用户把emp表的select权限给tea

Conn scott/1223 ;

Grant select on emp to tea ;

C)操纵tea查询scott的emp表

Conn tea/tea ;

Select from scott.emp ;

D)操纵scott用户把emp的十足权限给tea

Conn scott/1223 ;

Grant all on emp to tea ;

E)操纵scott收出权限

Conn scott/1223 ;

Revoke select on emp from tea ;

Revoke all on emp from tea ;

F)让tea把本人具有的对scott.emp的权限转给stu。

Conn scott/1223 ;

Grant all on emp to scott.emp to tea with grant option 

//with grant option对象权限。

//with admin option系统权限。

Conn tea/tea ;

Grant select on cott.emp to stu 

4.操纵profile文件对心令进行经管。

a) 需求:只许可某个用户最多尝试登陆三次。假设三次出有告成则锁定两天。两天后才华从头的登陆。

根基语法:

Create profile myProfile1 limit failed_login_attempts  password_lock_time ;

Alter user scott profile myProfile1 ;

b)给账户解锁。

Alter user scott account unlock 

c)遏制心令。让用户定期修正暗码。需求:一个账号的暗码最多 用十天,宽限期为两天。到时必需设置新暗码。

Create profile myProfile2 limit password_life_time 10  password_grace_time ;

Alter user scott profile myProfile1 ;

d)心令历史。修正暗码是禁绝操纵以前操纵的暗码。

Create profile myProfile3 limit password_life_time 10  password_grace_time password_reuse_time ;

e)删除profile心令经管。删除后用户不遭到约束。

Drop profile myProfile ;

PS windows 的 dos下输进 systeminfo打印当前操做系统疑息。

5.启动oracle的流程。

a) (dos节制台下运行)lsnrctl start ;//用于启动监听效劳

b) oradim-startup-sid 数据库真例名 //用于启动数据库真例。 

6.特权用户,默许是以操做系统认证的,比如:conn system/orlhsp as sysdba   dbms一看到as sysdba则觉得要以特权用户登录。前面的用户名战暗码不看。

7.丢得经管员暗码:

a) 搜刮名为    PWD数据库真例名.ora  文件。数据库真例名是按照真际环境定的。

b)删除该文件。为以防万一,建议提前备份。

c)天生新 的暗码文件。(假设需求新的暗码生效则需求从头启动数据库真例)正在dos输进:

orapwd file 正本暗码文件的齐途径暗码文件名.ora  password=暗码 entries 登陆sys的最多用户数量;  

讲堂演习:给scott用户分配一个profile,要求如下:

A)尝试登录最多四次

B)若四次均输进破绽,则锁定用户2天

C)暗码每隔五天修正一次,宽限天数为2天

D)演习如何给用户解锁

E)接洽如何删除profile




第二局部:


1.创坐表:

Create table table_name (

id number ,

name varchar2(32),

password varchar2(32),

birthday date ;

2.oracle根基数据典范榜样讲解。

A) Char(size):寄存字符,最大2000字符,是定长。固定对比,速度快,假设寄存数据长度波动则char对比便捷。

B) Varchar2(size):变长,最大可以寄存4000个字符。假设寄存数据长度转变则char对比便捷。

C) Nchar(size):定长,操纵unicode编码,不管中英文均是当作一个字符。而一其中文字要占用两个char的字节。最大字符2000。

D) Nvarchar2(size):变长,操纵unicode编码。最大可以寄存4000个字符。

E) Clob:(character large object):字符型大对象。变长。最大8TB。只能存储字符型

F) Blob:(binary large object):变长,二进制大对象。寄存图片、声音。最大8TB。

G) Number:变 长。 ①可以寄存整数,可以寄存小数。②number(p,s)中,p:有用位,s:保存到小数面第几位。比如:number(5,2)范 围:-999.99~999.99。超越小数位的四舍五进。假设s是背数则正在整数局部起头细确。③原则:真际开收中,我们有明白要求保存到小数面第几位, 则明白指定。假设出有即可以以间接操纵number。④举例:0.00000000000000023:p=2 s=17。

H) Date:日期典范榜样,默许格局DD-MM月-YYYY。添减的时辰要操纵默许格局。PS:借助oracle函数可以改成操纵本人风俗的日期典范榜样。出格注释:中间数字的月字不能少!

I) TIMESTAMP(n):邮戳典范榜样,主动更新日期。N为日期中的小数位数。不引荐。

建表综开案例:

成坐一个教生表:

Create table students(

Id number ,

Name varchar2(64) 

Sex char(2) ,

  Birthday date ,

  Fellowship number(10,2) ,

  Resume clob );  

Create table class_(

Id number ,

Name varchar2(32) 

);

PS:末端一个数据不要减逗号!

3.表的经管战修正表。

//添减一个新的字段

ALTER TABLE 表名 ADD (新的列名 列的数据典范榜样) ;

//修正字段的典范榜样

ALTER TABLE 表名 MODIFY(列名 列的数据典范榜样) ;

//删除一个字段

ALTER TABLE 表名 DROP COLUMN 列名 

//给表修正名字

RENAME 旧表的名字 TO 新表的名字。

真例利用:

1.给教生表添减班级编号:

Alter table students add(classId number) ;

(PS:desc 表名:查看表构造。)

2.教生姓名改成varchar2(30):

Alter table students modify( name varchar2(30)) ;

3.教生姓名变成char(30):

Alter table students modify( name char(30)) ;

4.删除教生表的felloship字段:

Alter table students drop column fellowship ;

5.把教生表名student改成stu:

ename students to stu;

6.删除教生表:

Drop table stu ;



第三局部:


Oracle的增删改查

CRUD CREATE READ UPDATE +DELETE

insert 增减操做:

INSERT INTO table_name (colunms_name) VALUES(columns_values) ;

1.插进数据该当与字段的数据不异。

2.数据的巨细该当正在规定局限内。

3.正在value中列出的数据位置必需与列的布列位置对应。

4.字符战日期典范榜样必需搜罗正在单引号里面。

5.插进空值,不指定或操纵null。正在oracle的字段中,‘单个空 格’=null。

6.假设齐部添减,可以不减列名。

PS:select age,dump(age) from test_table ;这个dump显示 本列的具体疑息。

具体案例:背students里面添减几条数据。

insert into students 

values (1 "汪海洋","男","11-11月-2012",1000,"Hello,World!") ;

update修正操做:

UPDATE table_name SET col_name expr1 WHERE 条件

1.可以用新值更新原有表行中的各列。

举例:update students set *** "女" where name ="郑志秋" ;

2.where出格寄望限制,update战delete的遗得数据不成撤消。

案例update要求:

将十足人薪水改为5000元

将姓名为张三的同教薪水改为3000元

将李四的薪水正在正本的根蒂根基上增减1000块钱

将出有奖教金的同教改为10元

update students set fellowship=10 where fellowship is null ;

delete语 句:delete from table_name where 条件。只能删除一行,删除数据本身,可是不能删除表的构造。假设删除一列则要操纵 update语句。而要删除全部表单需求drop语句。(假设一不妥心删除,操纵savepoint aa然后输进rollback回滚到保存面)。

truncate table 表名:速度很快可是不能找回,出有记真,没法裁撤。

查询语句select的操纵(重面):

操纵emp,dept,salgrade三张表。

select [distinct] *|{列名1,列名2...} from 表名[where {条件}] ;中括号示意可选,大括号示意必挖,|示意或。distinct可选:裁撤重复行(记真的各个字段都不异才算是重复行)。

PS:表名、字段等语句本身不区分巨细写,只有对数据内容区分巨细写。

select可以先操纵算术表达式进行数据处理责罚再显现出去:

select ename ,sal*13+comm from emp;

寄望,null减减乘除随便任性值均为null。操纵nvl函数:

select ename ,sal*13+nvl(comm,0)*13 from emp;

假设comm为空null则返回0。

操纵as+双引号,显示正在列头的的别名:

select ename ,sal*13+nvl(comm,0)*13 as "年薪" from emp ;

select ename||sal*13+nvl(comm,0)*13 as "年薪" from emp ;

操纵||拼接多列数据做为一列返回:select ename||sal*13 from emp ;

面试题:

我们希视删除用户,同时保存该用户的数据对象,怎样处理责罚?

1.锁定该用户:alter user scott account lock 

2.这时候该用户已不能登录到数据库了。可是我们的system用户依旧可以操纵他的数据典范榜样。

3.解锁该用户:alter user scott account unlock 

where子句的用法:

如何显示工资下于3000的员工?

select from emp where sal>3000 ;

如何查找1982年11月当前进职的员工:select from emp where to_char(hiredate,"yyyy-mm-dd")>"1982.1.1";

【这时候大体oracle会提示格局不婚配的破绽,需求to_char函数】

where to_char(hiredate,"mm")>"6";

where to_char(hiredate,"yyyy‘)>"1988";

如何查找工资正在2000~2500的员工的环境?

select from emp where sal between 2000 and 2500 ;

between是一个闭区间

操纵like查询(模糊查询)

如何显示尾字母为S的姓名战工资?

select ename ,sal from emp where ename like "S%" ;

如何显示第三个字符为大写O的十足员工?

select ename ,sal from emp where ename like "_ _o" ;

(%示意0-多个字符,_示意1个随便任性字符)

where里面如何操纵in

select from emp where empno =123 or empno =345 ;

=select from emp where empno in (123,345) ;

is null 显示出有相应列数据的数据。

操纵逻辑运算符:or 战and

操纵order by 对成果进行排序:

select from emp order by ename [asc];

asc:升序布列,默许外形。desc:倒序布列。

oracle撑持操纵别名排序:

 select ename,sal*13 年薪 from emp order by "年薪";



第四局部:

Oracle 重大表查询

数据分组: -max,min,avg,sum,count

?如何显示十足员工中最下工资战最低工资?

select max(sal) from emp  (有多个成果也只显示一个)

select min(sal) from emp ;

select avg(sal) from emp   (有空值null则不参与运算)

select sum(sal)/count(*) from emp   (count计较行数)

?统计有几多员工?

select count(*) from emp ;(字段亦可,空值不参与运算)

?显示工资最下的员工的名字战工做岗亭?

(我们可以操纵子查询去完成1.先查询最大工资是几多2.查找谁的工资是最大工资)

select ename job from emp where sal (select max(sal) from emp)  (SQL语句默许从左往左实施)

?显示工资下于仄均工资的员工疑息?

select ename job from emp where sal (select avg(sal) from emp) ;

group by战having子句:

group by对成果进行分组统计,

having进行限制(过滤)分组显示成果,经常与group by 同时呈现。

?如何显示每个局部的仄均工资战最下工资?

select avg(sal),max(sal),deptno from emp group by deptno  

?先是每个局部每个岗亭的仄均工资战最低工资?

select avg(sal),max(sal) ,deptno ,job from emp group by deptno,job order by deptno ;

?显示局部仄均工资低于2000的局部战仄均工资?

select avg(sal),deptno from emp group by deptno having avg(sal)<2000 ;(having不撑持别名)

寄望事项:

1.分组函数(avg)只能出此刻选择列表、having、order by子句中。

2.假设select中同时呈现,次第是:group by、having、order by,次第不能堕落。

3.正在选择列中,假若有列,表达式,分组函数,那么这些列战表达式必需有一个出此刻group by中,不然会堕落。

多表查询:正在真际开收中不成遏制存正在对两张或多张表的重大查询。

1.我们看看多表查询的道理:

select from emp,dept ;

2.如何真现多表查询:

select emp.ename,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno ;

3.如何遏制笛卡我积:

多表查询的条件是 至少不能少于表的个数-1。

4.如何显示局部号为10的局部名、员工名战工资:

select emp.ename,emp.sal,dept.dname from emp,dept where emp.deptno=dept.deptno and emp.deptno=10 ;

寄望:我们建议人人正在进行多表查询的时辰操纵别名。

 select t1.ename,t1.sal,t2.dname from emp t1 ,dept t2 where t1.deptno=t2.deptno and t1.deptno=10;

自连接:

显示FORD的上级:select mgr from emp where ename="FORD" ;

显示FORD上级的疑息:select from emp where empno (select mgr from emp where ename="FORD" );

显示各员工的姓名战他的上级率领的姓名:select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno ;

把worker的职员齐部列出:select worker.ename,boss.ename from emp worker,emp boss where worker.mgr=boss.empno (+) 其中,减号是中连接。


<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23027506/viewspace-1115187/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-12-15