oracle数据库基础知识汇总—30天(一)

解锁scott:mysql

打开SQLPLUS(是oracle的自带的工具软件,主要用于执行SQL语句,pl\sql块),也能够在“运行”里面输入“sqlpus或sqlplusw"   输入:用户名(如system),密码linux

输入 alter user scott account unlocksql

PL/SQL developer属于第三方软件,主要用于开发,测试,优化oracle pl/sql的存储过程。这款软件用的不少,须要单独安装。数据库

企业管理器windows

  1.  oracleDBConsoleorcl(通常不启动)服务是启动状态才能够启动企业管理器
  2. 在浏览器中输入:http://ip:1158/em

oracle 经常使用的sql plus命令浏览器

  • show user 能够用来显示当前的用户名
  • conn 用户名/密码 切换用户,可用于链接
  • disc  断开和oracle数据库的链接,可是不退出sql*plus窗口,exit是断开与oracle的链接,同时退出窗口
  • passw/password 用于修改用户的密码。若是给本身修改密码则不须要用户名,给别人修改密码则须要带用户名
  • & 交互命令 select * from emp where job=‘&job';能够本身输入值代替&进行查询
  • set linesize 140;设置每行显示多少个,默认是80个字符;set pagesize  30;设置一而显示多少条数据。
  • edit 用于编辑脚本。如:edit D:/a.sql ; 
  • spool 把屏幕上显示的记录,保存到文件中 。首选 spool D:/a.sql建立一个文件,而后点select * from emp;将查询数据写入,最后关闭 spool off;数据就写入了。

分配权限session

  • 建立用户:create user 用户名 identified by 密码 。如:create user xm identified by m123 【只有system/sys有权限建立用户,普通用户没法建立】
      • 表空间:表存在的空间,是一个逻辑的概念。 sql> create user demo identify by m123     default tablespace users  temporary tablespace temp quota 3m on users
      • identified by 代表该用户demo将用数据库方式验证,default tablespace users //用户的表空间在users上。 temporary tablespace temp //用户demo的临时表健在temp空间quota 3m on users//代表用户demo创建的数据对象(表、索引、视图,pl/SQL块 ...)最大只能是3M
      • sql> grant/revoke  [connect|resource|DBA|create session]  to demo 受权或移除受权。create session 是权限,其它的是角色。
      • connect和resource是两个系统内置的角色,和dba是并列的关系。DBA:拥有全部特权,是系统最高权限,仅仅有DBA才干够建立数据库结构。RESOURCE:拥有Resource权限的用户仅仅可以建立实体,不可以建立数据库结构。CONNECT:拥有Connect权限的用户仅仅可以登陆Oracle,不可以建立实体,不可以建立数据库结构。
  • 修改密码:password 用户名,具备dba的权限或者拥有alter user的系统权限;alter user 用户名 identified by 新密码
  • 删除用户:drop user 用户名,当咱们删除一个用户的时候,若是这个用户本身建立有数据对象时,那么咱们在删除该用户的时候须要加选项 cascade ,表示把数据对象一块儿删除。

方案(schema)oracle

理解:当一个用户建立好后,若是该用户建立了任意一个数据对象,这时咱们的dbms就会建立一个对应的方案与该用户对应,而且该方案的名字和用户一致。app

赋权:grant  [select |delete|insert|update|all] on 表名 to 用户名   with grant option; with grant option 表示获得权限的用户能够把权限继续分配。如:grant all on scott.emp to stu;若是是管理员权限则带 with admin option
ssh

查询:select * from   scott.emp 

收回权限:revoke [select |delete|insert|update|all] on 表名 from 用户名 

 

oracle用户管理

profile管理用户口令:profile是口令限制,资源限制的命令集合,当创建数据时,oracle会自动创建名称为default的profile,当创建用户没有指定profile选项,那oracle就会将default分配给用户。

使用profile文件对口令进行管理,

建立: create profile 文件名 limit failed_login_attemptspassword_lock_time 2   ,

使用:  alter 用户名 profile 文件名;解锁:alter 用户名  account unlock;

终止口令:create profile 文件名 limit password_life_time 10 password_grace_time 2 10天修改密码,密码的宽限是2天

删除drop profile 文件名 【cascade

 

oracle数据库的启动流程

 linux里的ssh远程登陆工具,systeminfo能够显示系统的基本信息

windows操做系统:

lsnrctl start(启动监听)

oradmin -startup -sid orclhsp (启动实例)

unix操做系统/linux系统: 和windows相差不大

 

oracle登陆认证方式

conn ***/***  as sysdba  //可以链接成功,只要as sysdba 后系统不会去验证用户名和密码就自动登陆。

  1. 操做系统认证
    • 若是当前用户属于本地操做系统的ora_dba组(对于windows操做系统而言),便可经过操做系统认证。
  2. oracle数据库验证(密码文件验证)
    • 对于普通用户,Oracle默认使用数据库验证
    • 对于特权用户(好比sys用户),oracle默认使用操做系统认证,若是验证不经过,再到数据库验证(密码文件验证)。经过配置sqlnet.ora文件,能够修改Oracle登陆
      • SQLNET.AUTHENTICATION_SERVICES=(NTS)是基本操做系统验证
      • SQLNET.AUTHENTICATION_SERVICES=(NONE)是使用数据库验证
      • SQLNET.AUTHENTICATION_SERVICES=(NTS,NONE)是二者共存
  3. 管理员密码丢失
    • 恢复办法:把原有密码文件删除,生成一个新的密码文件
    • 步骤以下:
      • 搜索名为PWD数据库实例名.ora文件,如(PWDORACLE.ORA)
      • 删除该文件,为预防万一,建议你们备份
      • 生成新的密码文件,在dos控制台输入命令:orapwd file=原来密码文件的全路径\密码文件名.ora password=新密码 entries=10;//entries:容许几个特权用户 ,密码文件名必定要和原来的密码文件名同样。如:orapwd file=D:\app\admin\product\11.2.0\dbhome_1\database\PRDorcl.ora password=123 entries=10
      • 从新启动数据库实例

 

 数据库基本概念

1.数据类型

 select *,dump(name) from table ; dump查看字段的详细信息(编码,长度等)

char(size),size不能超过2000,是定长。若是是英文字母,能存放size个字符,若是是中文,占用两个字符空间。

varchar2(size),varchar2的性能更优,是变长,最长可存放4000个字符,字母占一个字节,中文占两个字节。

nchar(size),是unicode数据类型,定长,最大2000字符。不论是英文仍是中文,能存放size个字符。unicode的好处:为了知足各国不一样大小容量的文字。

nvarchar2(size),unicode数据类型,变长,最大4000个字

clob(character large object),字符型大对象,最大8tb

blob(binary large object),二进制数据,能够存放图片/声音8tb

number(p,s),数值类型,变长,p为整数,s为小数位 ;范围:1<=p<=38,-84<=s<=127,保存数据泛微-1.0e-130<=number1.0e+126,p为有效位,从左往右数每个非0的数就是每个有效位如number(5,2) 范围-999.99-999.99;number 什么都不写,保持原数;number(6,-2),存123.55——存入100,167.98——存入200;

date,日期型,默认的日期格式是美国格式(“DD-MM-YY"),若是要用习惯的格式的话要用oracle函数,timestamp(n)游戳类型,当数据更新时,日期自动更新;日期类型必须加单引号。to_date(string,'format');

 

2.基本语法

 修改表名:rename 旧表名 to 新表名

查看表结构:desc 表名

修改列名:alter table 表名  modify (列名 列类型); 当写where语句为空时 where name is null

删除列名:alter table 表名 drop(列名1,列名2);

增长列名:alter table 表名 add(列名 列类型);

删除行后找回:delect * from mytable ;找回数据 先 savepoint a;而后rollback to a ;   truncate table 表名 删除之后没法找回。

查询:select [distinct] * from mytable;distinct去重复数据。sql语句(如表名、字段名)不区分大小写,内容是区分大小写的。

soundex:返回一个与给定的字符串读间相同的字符串。select * from table1 where soundex(name)=soundex(‘weather’);

ABS:返回指定值的绝对值。select abs(price),abs(-100) from dual;

ACOS:给出反余弦的值。ATANT:返回一个数字的反正切值。COS:返回一个给定数据的余弦。select cos(-3.1415926) from dual ;———— -1

CEIL:返回大于或等于给出数字的最小整数。 select ceil(3.14) from dual;FLOOR:对给定的数据取整数;LN:返回一个数据的对数;

3.基本运算

 nvl(字段名,0):用于处理数据为null时的问题,若是字段为空时不取0,若是不为空取自己值。

||   链接字符串。 select name ||”年龄是“|| age from table1;  // 张三年龄是25

alter user scott account lock;用户锁定之后,只是不能登陆,可是表仍是能够访问

to_char:字符格式的转换;//如:where to_char(birthday,'yyyy-mm-dd')>'1995-1-1';  4月出生的:to_char(birthdat,'mm')='4'

like:%表示0到多个字符,_ 表示一个字符;

order by:是对查询结果进行排序。默认是升序asc。支持别样查询。order by后面是能够加表达式的。

数据分组:max、min、avg、sum、count,当返回一个值时能够放 在一块儿查询,当返回的结果条数不同时一块儿查询会出错;avg(SAL),当SAL为null时不会统计。//统计带空的时 select sum(SAL)/count(*) from table1; count统计时也会排除null的项。

 SQL语句的执行顺序:一、默认状况下是从右向左执行;

group by 和 having:group by 用于对查询的结果分组统计,group by 字段1,字段2  ;having子句用于过滤分组显示的结果,即至关于group by的查底结果where 的做用。

自查询:select * from table1 t1,table1 t2 where t1.name1=t2.grad1(+);必定要取别名不然会出错。(+)是外联的附号,(+)写在左边是右外联,写在右边是左外联。

4.子查询

单行子查询:子查询只返回一条记录。

 多行子查询:子查询返回多条记录。any指结果中的任一一条数据都知足条件。

多列子查询:查询查询结果知足两列条件  //如查询与smith的部门和岗位彻底相同的全部雇员 :select * from emp where (detpno,job)=select (depno,job)from emp; 

注:oracle支持数字排序,可是不能数字不能超过列数;子查询的时候必须指定别名;where上面取个别名,前面的语句将没法识别;desc显示表结构。

//显示部门最高工资的人的详细信息

 

 分页查询:

mysql分页:select * from 表名 where limit  从第几条取,条数

sql server分页:select top 10 * from (select rownum,tb1.* from tb1 where rownum>=10 );

oracle分页:三层过虑 select t2.* from(select t1.* ,rownum rn  from (select * from emp) t1 where rownum<=6) t2  where t2.rn>=4;

显示上级的个数(distinct mgr)去掉重复的了再统计;count(列名)统计一列;

 

 

 模拟10W条数据

  1. 建立一张表:create table mytest as select empno,ename,sal,comm,deptno,job from emp;
  2. 自我复制:insert into mytest (empno,ename,sal,comm,deptno,job) select empno,ename,sal,comm,deptno,job from mytest;

 5.合并查询

union:取得两个结果集的并集。会自动去掉结果集中的重复行。

union all:和union类似,可是不会去掉重复行,也不会排序。

intersect:取交集

minus:取差集,A1集合-A2集合。cube立方体 select avg(sal),deptno,job from emp group by cube(empno,job)先对empno分组、再组job分组,再对empno和job分组

6.内链接和外链接

内链接:就是利用where子句对两张表的迪卡尔集进行筛选。 select ... tb1 inner join tb2 where tb1.id=tb2.id;(只有两张表两边都匹配的时候才被选择

外链接:左外连,右外连,彻底外连 。

left join...on(左侧的表彻底显示);另一种写法select * from stu ,emam where stu.id=exam.id(+)

right join...on (右边的表彻底显示);另一种写法select * from stu ,emam where stu.id(+)=exam.id;

full join...on (左边的表和右边的表都显示);

 7.小结

  1. 分组函数(avg...)只能出如今选择列表、having、order by子句中
  2. 若是在select语句中同时包含group by,having,order by那么他们顺序是group by,having,order by
  3. 在选择列中若是有列、表达式和分组函数,那么这些列和表达式必须有一个出如今group by子句中,不然会出错。
相关文章
相关标签/搜索