第一局部
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 3
password_lock_time 2 ;
Alter user scott profile myProfile1 ;
b)给账户解锁。
Alter user scott account unlock ;
c)遏制心令。让用户定期修正暗码。需求:一个账号的暗码最多
用十天,宽限期为两天。到时必需设置新暗码。
Create profile myProfile2 limit password_life_time 10
password_grace_time 2 ;
Alter user scott profile myProfile1 ;
d)心令历史。修正暗码是禁绝操纵以前操纵的暗码。
Create profile myProfile3 limit password_life_time 10
password_grace_time 2 password_reuse_time 1 ;
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
l 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!") ;
l update修正操做:
UPDATE table_name SET col_name = expr1 WHERE 条件
1.可以用新值更新原有表行中的各列。
举例:update students set *** = "女" where name ="郑志秋" ;
2.where出格寄望限制,update战delete的遗得数据不成撤消。
l 案例update要求:
n 将十足人薪水改为5000元
n 将姓名为张三的同教薪水改为3000元
n 将李四的薪水正在正本的根蒂根基上增减1000块钱
n 将出有奖教金的同教改为10元
update students set fellowship=10 where fellowship is null ;
l delete语
句:delete from table_name where 条件。只能删除一行,删除数据本身,可是不能删除表的构造。假设删除一列则要操纵
update语句。而要删除全部表单需求drop语句。(假设一不妥心删除,操纵savepoint aa然后输进rollback回滚到保存面)。
l truncate table 表名:速度很快可是不能找回,出有记真,没法裁撤。
l 查询语句select的操纵(重面):
操纵emp,dept,salgrade三张表。
n select [distinct] *|{列名1,列名2...} from 表名[where {条件}] ;中括号示意可选,大括号示意必挖,|示意或。distinct可选:裁撤重复行(记真的各个字段都不异才算是重复行)。
PS:表名、字段等语句本身不区分巨细写,只有对数据内容区分巨细写。
n select可以先操纵算术表达式进行数据处理责罚再显现出去:
select ename ,sal*13+comm from emp;
寄望,null减减乘除随便任性值均为null。操纵nvl函数:
select ename ,sal*13+nvl(comm,0)*13 from emp;
假设comm为空null则返回0。
n 操纵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 ;
l where子句的用法:
n 如何显示工资下于3000的员工?
select * from emp where sal>3000 ;
n 如何查找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";
n 如何查找工资正在2000~2500的员工的环境?
select * from emp where sal between 2000 and 2500 ;
between是一个闭区间
l 操纵like查询(模糊查询)
n 如何显示尾字母为S的姓名战工资?
select ename ,sal from emp where ename like "S%" ;
n 如何显示第三个字符为大写O的十足员工?
select ename ,sal from emp where ename like "_ _o" ;
(%示意0-多个字符,_示意1个随便任性字符)
l where里面如何操纵in
select * from emp where empno =123 or empno =345 ;
=select * from emp where empno in (123,345) ;
l is null 显示出有相应列数据的数据。
l 操纵逻辑运算符:or 战and
l 操纵order by 对成果进行排序:
select * from emp order by ename [asc];
asc:升序布列,默许外形。desc:倒序布列。
l oracle撑持操纵别名排序:
select ename,sal*13 年薪 from emp order by "年薪";
第四局部:
l Oracle 重大表查询
n 数据分组: -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) ;
n 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不撑持别名)
l 寄望事项:
n 1.分组函数(avg)只能出此刻选择列表、having、order by子句中。
n 2.假设select中同时呈现,次第是:group by、having、order by,次第不能堕落。
n 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;
l 自连接:
显示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 (+) ; 其中,减号是中连接。