我本身就是一个oracle和sql的初学者,前段时间看了韩顺平老师的oracle视频教程,以为很深刻浅出,收获了不少。同时本身也作了很多笔记,如今想将纸质笔记以本身的话总结出来。俗话说得好:教学老是相得益彰,在总结的过程当中想必会加深本身的印象,可以巩固本身的学习过程。sql
oracle 用户部分:数据库
建立用户:create user user_name identified by user_password;session
此时用户并无链接数据库的权限。须要给其赋予链接权限oracle
赋予权限:权限分为对象权限和系统权限。ide
grant [select|updat|all] on table_name to user_name;--对象权限函数
grant connect to user_name with admin option; --系统权限工具
with admin option 表示这个user能够将此权限继续下发 学习
收回权限: revoke Quanxian on table_name from user_name;spa
链接数据库:conn user_name/user_password;日志
profile文件,能够限制某些用户的行为,如登陆尝试次数,密码输入错误次数等。
建立profile 文件: create profile profile_name limit failed_login_attempts m password_lock time n;
应用给某用户:alter user user_name profile profile_name;
在初次创建oracle数据库实例的时候,默认建立了几个用户,可是只有几个用户没有上锁,给某个用户解锁的步骤以下:
首先要以sysdba的用户登陆oracle数据库,须要打开sqlplus这个oracle安装自带的工具
cmd or terminal 下: sqlplus / as sysdba;
解锁用户:alter user user_name account unlock;
更改用户密码: alter user user_name identified by password;
这里,几个经常使用的用户的系统默认密码总结以下:
scott:tiger
system:manager
sys:change_on_install
sysdba 不须要密码登陆。
几个用户的权限具体如何等我总结到后面再补上,韩顺平老师这里讲的有点分散。
继续用户管理。
设置口令历史:修改密码时不能使用之前使用的密码
password_reuse_time n;--n 天后才能重用密码
按期修改密码:
create profile profile_name limit password_life_time m pasword_grace_time n;
m天修改一次密码,宽限期n天。
sql语句中的几种数据类型:
char(n) :定长字符串,最长2000,查询速度快
varchar2(n):变长字符串,最长4000,节省空间
clob(character large object) :字符型大对象,最大4G
number(m,n):m位有效数,其中n位小数
number(m) :m位整数
date:日期类型 年月日时分秒
timestamp:更精确
blob:图片类型,二进制数据 可存放图片,声音,最大4G(韩老师当时用的是9i,我用了个64位的12c版本,估计能支持最大8G的吧。。本身猜的)
显示表结构:desc table_name;
增长字段:alter table table_name add (colum_name,colum_type);\
修改字段: alter table table_name modify (colum_name,colum_type);
删除字段:alter table table_name drop colum colum_name;
删除表:drop table table_name;
date格式'日-月-年'
insert into table_name values(每一个字段的值,若是有非数字的字段值,须要用单引号对''括起来)
alter session set nls_date_format 'yyyy-mm-dd';
【注意】这个改的效果是临时生效的。
插入空值NULL(该字段容许为空才行)
查询空值:select xxx from xxx where colum_name is [NULL|NOT NULL];
更改表内容:update table_name set colum_name='xxx' where yyy;
删除数据:delete from table_name;--删除数据,表的结构还在,可恢复,删除速度略慢
truncate table table_name;删除表中全部的数据,表结构还在,可是因为不写日志,没法找回删除记录,好处是删除速度快。
恢复数据:
save point point_name;--建立恢复点
delete from table_name;
rollback to point_name;--恢复
删除表结构和数据:drop table table_name;--删除表的结构和数据
commit提交事物,提交后保存点会失效,要注意。
打开显示操做时间开关:set timming on;
nvl函数处理NULL值的状况:nvl(字段名,值),若是字段自己值为NULL,则改变其新值为逗号后面的那个,若是不是NULL,不作任何事。
where 语句后面的like关键字用于查找并匹配符合条件的字段:
%表示零到多个字符
下划线_ 表示任意单个字
in关键字表示从一个范围内选取
order by语句默认升序(ASC),若是想降序排列,能够这样:
select *** from table_name where xxx order by colum_name desc;
别名排序 select sss as xx from xxx之类的
数据分组函数:max,min,avg,sum,count
子查询:嵌入在其余sql语句中的select语句,也叫作嵌套查询。
分组查询:
group by | having
group by 用于对查询结果的分组统计 having用于限制分组显示的结果
select xxx,yyy from table_name where zzz group by xxx having (yyy的一些限制条件);
注意:分组查询的字段必须在查询的字段中出现,否则查询失败。
分组函数只能出如今选择列表,having,order by子句中
若是select语句中同时包含group by,having,order by那么顺序是group by-having-order by
在选择列表中若是有列,表达式和分组函数,那么这些列和表达式必须有一个出如今group by子句中,否则出错。
多表查询:以oracle自带的emp表和dept表结构为例
能够看到两个表共同的字段为deptno;
所以在查询中能够以这个为链接桥梁
好比我要查询分别位于两个表的ename,和loc,能够以下写。
在查询过程当中须要将选出来的表重命名,并用点符号选出相应的字段,如上所示。
分页查询:
采用rownum分页
第一步:oracle自带的rownum函数将每行查询出来的结果编号,以下:
第二步:选取rownum<=10的列,以上次选取的结果做为结果。
第三步,选取>=6的列,继续以上一次选取的为结果进行查询。
这样就选取了6-10的分页结果。
注意事项:全部的改动,只须要改变最里面那层select语句便可,即改变
select * from emp这个语句,外面两层select 语句是为了完成分页功能而已。
合并查询:将多个select语句的查询结果进行相关操做,相似于集合的求交集,并集,差集之类的。
老师讲的比较少,这里就先不写。
查询结果建立表:
create table table_name(colum_name1 colum_type1,colum_name2 colum_type2...)
as select colum1,colum2,...colum_n from table_name2;
JAVA链接oracle数据库:
Class.forName( "oracle.jdbc.driver.OracleDriver" );
Connection cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );