ORACLE 基础学习.docx
- 文档编号:29347168
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:23
- 大小:250.65KB
ORACLE 基础学习.docx
《ORACLE 基础学习.docx》由会员分享,可在线阅读,更多相关《ORACLE 基础学习.docx(23页珍藏版)》请在冰豆网上搜索。
ORACLE基础学习
Øspool
Ø例子:
spoole:
\aa.sql
Ø从上面的语句开始打印查询到的文字到aa.sql到spooloff结束
⏹使用oracle:
◆在运行栏中输入:
sqlplusw
◆直接运行
◆进入dos中运行:
在运行栏中输入sqlplus
ØCREATEUSERXIAOMINGIDENTIFIEDBYM123
Ø建立用户小明同时设置密码M123密码必须以字母开头
Ø删除用户dropuser用户名
Ø修改别人的密码(必须是管理员):
Ø①alteruserxiaomingidentifiedbym123
Ø②password用户名
Ø修改自己的密码:
直接输入passw
Ø连接系统用户connsystem/rootpasswordxiaoming
Ø断开连接:
disc
Ø新创建的用户是不能登录数据库的需要为其指定相应的权限
ØGRANTCONNECTTOXIAO
Østart和@都可以运行sql脚本(运行sql脚本里面写的sql语句)
Ø例如:
@d:
\a.sql或者startd:
\a.sql
Øedit可以编辑指定的sql脚本
Øeditd:
\a.sql
Ø&(交互式命令)可以替代变量
Øselect*fromempwherejob=’&job’;
Ø系统权限>>是指用户对数据库的相关权限,建库,建表等,登陆数据库,修改密码
Ø对象权限>>是指用户对其他用户的数据对象操作的权限。
SELECT,INSERT,UPDATE,DELETE,ALL,CREATE,INDEX
Ø数据对象>>用户创建的表,存储过程,触发器,序列,同义词等都是数据对象
Øsys用户:
超级管理员权限最高他的角色dba
Øsystem用户:
是系统管理员权限也很高他的角色dbaoper
Øscott用户:
普通用户
Øsys与system
Øsys有createdatabase的权限,而system没有,其他类似
Øsys用户必须以assysdba或assysoper形式登录,不能以normal方式登录数据库
Ø连接数据库
Øconn用户名/密码[assysdba]
Ø在删除用户时,如果要删除的用户已经创建了表,那么就需要在删除时
Ø带一个参数CASCADE比如DROPUSER用户名CASCADE
Ø读写事物处理
Øsettransactionreadwrite
Ø只读事物处理
Øsettransactionreadonly设置只读事物后在他之后发生的事物都只能查询
Ø给新建用户登录权限
Øgrantcreatesessiontoxiaoming
Ø希望新创建的用户可以查询已经创建用户的东西
ØGRANTselectonemptoxiaoming
Ø修改权限
ØGRANTupdateonemptoxiaoming
Ø只修改列权限例如(sal)
Øgrantupdateonemp(sal)tomonkey
Ø把所有的权限给xiaoming
Øgrantallonemptoxiaoming
Ø收回权限
ØREVOKESELECTONEMPFROMXIAOMING
Ø希望小明可以把这个权限给别人
ØGRANTSELECTONEMPTOXIAOMINGWITHGRANTOPTION
Ø查询用户名去除重复distinct
Øselectdistinctdnamefromscott.dept
Ø系统权限不级联回收,对象权限级联回收
Ø如果是系统权限往下面派发是用admin
Ø如果是对象权限往下面派发是用grant
Øwithadminoption,withgrantoption
Øascii('a')把字符转换成Ascii码
Øexists:
强调的是是否返回结果集,不要求知道返回什么,比如:
SELECTID,NAMEFROMAWHEREEXISTS(SELECT*FROMBWHEREA.ID=B.AID)
Øand与or或not非
Ø不等于操作符<>
Ø打开显示操作时间的开关
Settimingon
Øselect*fromempwherecommisnull
Øselect*fromempwherecommisnotnull
ØLIKE语句
Ø%表示任意0到多个字符_表示任意单个字符
Ø例:
如何查询首字符为S的员工的姓名和工资
ØSELECTSAL,ENAMEFROMEMPWHEREENAMElike'S%'
Ø名字当中不含有R的
Øselect*fromempwhereenamenotlike'%R%'
Ø使用profile管理用户口令
ØProfile是口令限制,资源限制的命令集合,当建立数据库时,oracle会自动建立名称为default的profile。
当建立用户没有指定profile选项时,那oracle就会将default分配给用户。
一个案例,最多允许用户输出3次错密码,输错后锁定2天
Ø使用:
首先创建profile文件(规则),
ØCreateprofile规则名称limitfailed_login_attempts3password_lock_time2;
Ø然后把这个规则指定给某一个用户
ØAlteruser用户名profile规则名称
Ø
Ø终止口令>>为了让用户定期修改密码可以使用终止口令的指令来完成。
Ø例如:
要求用户每隔十天就修改一次密码,宽限期为2天。
ØCreateprofile名字limitpassword_life_time10password_grace_time2;
ØAlteruser用户名profile名字
Ø
Ø口令历史>>如果希望用户在修改密码时,不能使用以前使用过得密码就可以使用口令历史,这样oracle就会将口令修改的信息存放到数据字典中,这样当用户修改密码时,oracle就会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。
Ø一个例子:
先建立profile
ØCreateprofile规则名称limitpassword_life_time10password_grace_time2password_reuse_time10
ØAlteruser用户名profile规则名
ØPassword_reuse_time10指定口令可重用的限制时间是10天,10天后可重用。
Ø删除profile
ØDropprofile规则名[cascade]
Ø锁定账号ALTERUSER用户名ACCOUNTLOCK
Ø解锁ALTERUSER用户名ACCOUNTUNLOCK
Øchar查询速度快
Øvarchar2节省空间
Ø。
。
。
。
。
。
。
。
。
。
◆复制一个表
◆Createtableemp2asselect*fromemp
◆修改一个表
◆ALTERTABLESCOTT.TESTRENAMETOTEST1--修改表名
ALTERTABLEempRENAMECOLUMNNAMETONAME1--修改表列名
ALTERTABLEempMODIFYNAME1NUMBER(20)--修改字段类型
ALTERTABLEempADDADDRESSVARCHAR2(40)--添加表列
Øaltertablestudentmodify(xmvarchar2(20))
Ø修改字段的类型或者名字,不能有数据哦
Øaltertablestudentdropcolumnsal
Ø删除一个字段
Ø用insertinto插入多行数据
Øinsertintokkk(myid,myname,mydept)selectempno,ename,deptnofromempwheredeptno=10
Ø用update语句更新多个数据
ØUPdateempset(job,sal,comm)=(selectjob,sal,commfromwhereename='SMITH')
ØWHEREENAME='SCOTT'
Ø修改日期格式
Øaltersessionsetnls_date_format='yyyy-mm-dd';
Ødroptable删除表的结构和数据
Øtruncatetable删除表的数据,结构还在,不写日志,无法找回数据,删除速度快
Øselectcount(*)fromtable可以查看一共有多少条记录
ØORDERBY
ØSELECT*FROMEMPORDERBYSAL(asc)按照工资由低到高的顺序显示
ØSELECT*FROMEMPORDERBYSALDESC从高到低
Ø默认为由低到高
ØGROUPBY
Ø分组查询分组函数只能出现在选择列表,having,orderby里面
ØSELECTAVG(SAL),MAX(SAL),DEPTNOFROMEMPGROUPBYDEPTNO
Øselectavg(sal),min(sal),deptno,jobfromempgroupbydeptno,job
Øhaving分组查询中的条件查询
Ø如果在select语句中同时包含有groupby,having,orderby那么他们的顺序是groupby,having,orderby
Ø显示每个部门的平均工资,和最高工资,并且最高工资大于2000
Øselectdeptno,avg(sal)fromempgroupbydeptnohavingavg(sal)>2000;
Ø函数
Ø数字函数
ØABS(N)绝对值函数
ØCEIL(N)用于返回大于等于数字N的最小整数
ØFLOOR(n)小于等于数字N的最小整数
ØMOD(M,N)取模取余数m/n
Øround(n)四舍五入
Øround(n,m)精确到小数点后面m位m是负数四舍五入到小数点前m位
Øsign(n)判断当前的值是正负n<0返回-1n>0返回10返回0
Øtrunc(n)截取n到整数位
Øtrunc(n,m)截取到小数点后m位
Ø如果m<0,-2则截取n的个位和十位为0同时让n为整数
Clear清屏命令
Ø字符函数
Øinstr(c1,c2)搜索字符函数c1为被搜索的字符集,c2为被搜索的字符
Øchr(n)将数字转换成字符串
Øconcat(a,s)用于连接字符串等价于||
Ølower('n'),将字符转换成小写
Øupper('n')将字符转换成大写
Ølength('dddd')返回字符串的长度
Øreplace(char1,search_string,replace_string)用来替换字符的函数
Øsubstr(char,m,n)截取字符串的字串从第m个字符开始截取,截取n个
Øinitcap('ddd')使字符串的首字符大写
ØLPAD(A,N,D)往A前添加D到长度为N个字符RPAD同上,往右面添,如果A本身大于N则删除对应方向的字符到N的长度
ØLTRIM('FDDD',F')删掉左端F
ØRTRIM()同上,删右端的
Ø日期函数
ØOracle中默认添加日期的格式为日月年例如:
11-11月-1988
Øinsertintoemp(hiredate)values(to_date('1988-12-12','yyyy-mm-dd'))
Øsysdate当前日期
ØCURRENT_DATE返回当前会话区的日期
ØCURRENT_TIMESTAMP同上
Øadd_months(d1,n)返回在日期d1基础上再加上n个月后的新日期
Øselectsysdate,add_months(sysdate,3)fromdual
Ø返回:
2008-11-5,2009-2-5
ØEXTRACT(YEARFROMSYSDATE)提取当前的年份
Ølast_day(sysdate)返回当前月最后一天
ØMONTHS_BETWEEN(日期1,日期2)两个日期相差月数
Ønext_day(sysdate,'星期五')返回下一个星期五是多少号
Øsysdate-hiredate可以查到SYSDATE距离HIREDATE的天数
Øto_char(hiredate,'yyyy-mm-ddhh24:
mi:
ss')设置指定的日期格式也可以只写YYYY或者MM或者DD只查出来对应的年或者月或者日
Øto_char(sal,'L999,999.99')查看薪水并在前面加¥
Ø
Ø系统函数
Ødecode(expr,search1,result1,search2,result2default)如果search1匹配与expr则返回result1如果search2匹配expr则返回sesult2依此类推如果都不满足则返回default
Ø截取第一位的字符(K)方法,查找第一位为k的值
Øsubstr(ename,1,1)
Øselectinstr(ename,'k')fromemp
Øselectascii('k')fromemp
Øselectlpad(ename,1)fromemp
Ø
Ø判断是否是null值操作的函数
Oracle中进行操作(加减乘除)只要有一个是null值,操作的结果就是null了。
Nvl(comm,0)如果comm为null就返回0,否则返回comm
Ø查询约束
Ødescuser_constraints
Øselectconstraint_name,constraint_typefromuser_constraintswheretable_name='EMP'
Ø显示约束列
Øselectcolumn_name,positionfromuser_cons_columnswhereconstraint='约束名'
Ø内嵌视图把子查询当成一个表来使用
Ø当在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫做内嵌视图,当在from子句中使用子查询时,必须给子查询指定别名。
并且不能加AS
Ø分页
⏹rownum
Øselect*fromemp
Ø显示rownum
Øselecta1.*,rownumrnfrom(select*fromemp)a1
Ø挑选出前十条
Øselecta1.*,rownumrnfrom(select*fromemp)a1whererownum<=10
Ø在挑选出后5条
Øselect*from(selecta1.*,rownumrnfrom(select*fromemp)a1whererownum<=10)wherern>=6
Ø在分页中不能使用and和betweenand,rownum只能用一次
Ø几个查询的变化
⏹指定查询列只需修改最里层的select查询
⏹排序也只修改最里层的
Ø二、根据ROWID来分页
Ø三、按分析函数来分页
Ø用查询的结果来创建一张新表
ØCreatetablemyemp(id,ename)asselectempno,enamefromemp;
Ø合并查询
Ø有时候在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号union,unionall,intersect,minus
Øunion
该操作符用于取得两个结果集的并集。
当使用该操作符时,会自动去掉结果集中的重复行
Øselectename,sal,jobfromemp
Øwheresal>2500union
Øselectename,sal,jobfromemp
Øwherejob='MANAGER'
Øunionall
Ø该操作赋予union相似,但是它不会取消重复行,而且不会排序
Øintersect
Ø使用该操作符用于取得两个结果集的交集
Øminus
Ø使用该操作符用于取得两个结果集的差集,它只会显示存在第一个集合中,而不存在第二个集合中的数据
Ø表的自连接查询
Ø例如:
显示emp表中雇员名和他的上级名
Øselectclerk.ename,boss.enamefromempclerk,empbosswhereclerk.mgr=boss.empno;
Ø创建数据库使用工具向导
ØOracle10G_home>>ApplicationDevelopment>>ConfigurationandMigrationTools>>databaseconfigurationassistant
Ø用odbc方式连接oracle数据库不需要扎包
Ø首先我们要先配置一个数据源
ØClass.forname(“sun.jdbc.odbc.JdbcOdbcDriver”);
ØConnectionct=DriverManager.getConnection(“jdbc:
odbc:
shujuyuan”,”scott”,”root”);
Ø注意:
shujuyuan为您的数据源名称
用odbc方式连接数据库,你的java文件要和数据库在一个服务器上,因为它没有写IP地址。
Ø用jdbc的方式连接oracle数据库需要扎包
Ø加载驱动
ØClass.forname(“oracle.jdbc.driver.OracleDriver”);
ØConnectionct=DriverManager.getConnection(“jdbc:
oracle:
thin:
@localhost:
1521:
myorcl”,”scott”,”root”);
注意上面myorcl为你要连接的那个数据库名字
Ø子查询>>多个select语句在一个select语句里面
Ø单行子查询>>只返回一行数据的子查询
Ø多行子查询>>返回多行数据的子查询
Ø查询工资比30号部门所有员工的工资高的员工的姓名(all的用法)
ØSelectenamefromempwheresal>all(selectsalfromempwheredeptno=30);
Ø查询工资比30部门的任意一个员工的工资高的员工的姓名(any的用法)
ØSelectenamefromempwheresal>any(selectsalfromempwheredeptno=30);
Ø返回多列的子查询
Ø查询出与smith部门号和职位都相同的员工的信息,下面的代码都可以查出,但是效率不同,下面的代码效率要高一些,因为它只查询了2次,上面的查询了3次
Øselect*fromempwheredeptno=(selectdeptnofromempwhereename='SMITH')andjob=(selectjobfromempwhereename='SMITH');
Øselect*fromempempp,(selectemp.deptnosdeptno,emp.jobsjobfromempwhereemp.ename='SMITH')sempwhereempp.deptno=semp.sdeptnoandempp.job=semp.sjob;
Ø第三种方法貌似也没有第二种方法效率高
Øselect*fromempwhere(deptno,job)=(selectdeptno,jobfromempwhereename='SMITH');
事务:
提交事务:
commit会删除保存点当退出数据库的时候就会自动提交
回退事务:
rollbacktoa1
取消全部事务:
rollback
保存点:
savepointa1
Java中加入事务处理:
Connectionct=null;
ct.setAutoCommit(false);//设置不能默认提交;
然后在你想提交的地方设置提交mit();
如果发生了异常就回滚ct.rollback();
Ø查看数据库
Ødescv$database
Ø%type一个变量
Ø%rowtype一行变量rowtype前面可以接表明也可以接游标名
Ø调用存储过程
Øexec存储过程名
Øcall存储过程名
Øbegin存储过程名end;
Ø查看已经存储的东西
Ødescuser_source
Øselecttextfromuser_source
Øwherename='存储过程名'
关闭数据库shutdown启动数据库startup
初始化参数
初始化参数用于设置实例或是数据库的特征
显示初始化参数showparameter
Ø在导入和导出的时候要到ORACLE的主目录bin目录下
Ø运行cmd到ORACLE的BIN目录下在运行下面的代码
Ø数据库的备份和恢复
Ø逻辑备份是指使用工具export将数据对象的结构和数据导出到文件的过程,逻辑恢复是指当数据库对象被误操作而损坏后使用工具import利用备份的文件把数据对象导入到数据库的过程。
物理备份即可在数据库open的状态下进行也可以在关闭数据库进行,但是逻辑备份和恢复只能在open的状态下。
Ø导出自己的表
Øexpuserid=scott/root@orcltables=(emp,dept)file=d:
\e1.dmp
Ø导出其它方案的表
Ø如果要导出其它方案的表,需要DBA的权限
Øexpuserid=system/root@orcltables=(scott.emp)file=d:
\e1.dmp
Ø导出表的结构
Øexpuserid=scott/root@orcltables=(emp,dept)file=d:
\e1.dmprows=n
Ø使用直接导出的方式导出表结构
Øexpuserid=scott/root@orcltables=(emp,dept)file=d:
\e1.dmpdirect=y
Ø这种方式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ORACLE 基础学习 基础 学习