创建用户

概述:在oracle中要创建一个新的用户使用create user语句,一般是具有dba(数据库管理员)的权限才能使用。

create user 用户名 identified by 密码; (oracle有个毛病,密码必须以字母开头,如果不以字母开头,它不会创建用户)

给用户修改密码

概述:如果给自己修改密码可以直接使用

password 用户名

如果给别人修改密码则需要具有dba的权限,或是拥有alter user的系统权限

SQL> alter user 用户名 identified by 新密码

删除用户

概述:一般以dba的身份去删除某个用户,如果用其它用户去删除用户则需要具有drop user的权限。

比如 drop user 用户名 【cascade】

在删除用户时,注意:

如果要删除的用户,已经创建了表,那么就需要在删除的时候带一个参数cascade;

数据类型

字符类

char    定长 最大2000个字符。

例子:char(10)  ‘小韩’前四个字符放‘小韩’,后添6个空格补全 如‘小韩’

varchar2(20)  变长  最大4000个字符。

例子:varchar2(10) ‘小韩’ oracle分配四个字符。这样可以节省空间。

clob(character large object) 字符型大对象 最大4G

char 查询的速度极快浪费空间,查询比较多的数据用。

varchar 节省空间

数字型

number范围 -10的38次方 到 10的38次方

可以表示整数,也可以表示小数

number(5,2)

表示一位小数有5位有效数,2位小数

范围:-999.99到999.99

number(5)

表示一个5位整数

范围99999到-99999

日期类型

date 包含年月日和时分秒   oracle默认格式  1-1月-1999

timestamp 这是oracle9i对date数据类型的扩展。可以精确到毫秒。

图片

blob 二进制数据 可以存放图片/声音  4G   一般来讲,在真实项目中是不会把图片和声音真的往数据库里存放,一般存放图片、视频的路径,如果安全需要比较高的话,则放入数据库。

修改表


 添加一个字段

SQL>ALTER TABLE student add
(classId NUMBER(2));

修改一个字段的长度

SQL>ALTER TABLE student MODIFY (xm
VARCHAR2(30));

修改字段的类型/或是名字(不能有数据)
不建议做

SQL>ALTER TABLE student modify (xm CHAR(30));

删除一个字段  不建议做(删了之后,顺序就变了。加就没问题,应为是加在后面)

SQL>ALTER TABLE student DROP COLUMN sal;

添加数据

所有字段都插入数据n

INSERT INTO student VALUES ('A001', '张三', '男', '01-5月-05',
10);

oracle中默认的日期格式‘dd-mon-yy’ dd日子(天) mon 月份  yy  2位的年  ‘09-6月-99’ 1999年6月9日

修改日期的默认格式(临时修改,数据库重启后仍为默认;如要修改需要修改注册表)

ALTER SESSION SET NLS_DATE_FORMAT ='yyyy-mm-dd';

DELETE FROM student;

删除所有记录,表结构还在,写日志,可以恢复的,速度慢。

Delete 的数据可以恢复。

savepoint a; --创建保存点

DELETE FROM student;

rollback to a;  --恢复到保存点

一个有经验的DBA,在确保完成无误的情况下要定期创建还原点。

DROP TABLE student; --删除表的结构和数据;

delete from student WHERE xh = 'A001'; --删除一条记录;

truncate TABLE student; --删除表中的所有记录,表结构还在,不写日志,无法找回删除的记录,速度快。

如果列里面有一个分组函数,其它的都必须是分组函数,

group by 和 having子句n

group by用于对查询的结果分组统计,

having子句用于限制分组显示结果。

1 分组函数只能出现在选择列表、having、order by子句中(不能出现在where中)

2 如果在select语句中同时包含有group by, having, order by 那么它们的顺序是group by, having, order by

3 在选择列中如果有列、表达式和分组函数,那么这些列和表达式必须有一个出现在group by 子句中,否则就会出错。


(如果有N张表联合查询,必须得有N-1个条件,才能避免笛卡尔集合)

自连接

在这里需要说明的当在from子句中使用子查询时,该子查询会被作为一个视图来对待,因此叫做内嵌视图,当在from子句中使用子查询时,必须给子查询指定别名。  

合并查询

有时在实际应用中,为了合并多个select语句的结果,可以使用集合操作符号union,union all,intersect,minus

多用于数据量比较大的数据局库,运行速度快。

1). union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中重复行。

2).union all

该操作符与union相似,但是它不会取消重复行,而且不会排序。

3). intersect

  使用该操作符用于取得两个结果集的交集。

4). minus

使用改操作符用于取得两个结果集的差集,他只会显示存在第一个集合中,而不存在第二个集合中的数据。

创建数据库有两种方法:

1). 通过oracle提供的向导工具。√

   database Configuration Assistant  【数据库配置助手】

2).我们可以用手工步骤直接创建。

事务

事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml(数据操作语言,增删改,没有查询)语句要么全部成功,要么全部失败。

如:网上转账就是典型的要用事务来处理,用于保证数据的一致性。

dml 数据操作语言

银行转账、QQ申请、车票购买

 事务和锁n

当执行事务操作时(dml语句),oracle会在被作用的表上加锁,防止其它用户修改表的结构。这里对我们的用户来来讲是非常重要的。

.....其它进程排序,知道1号进程完成,锁打开,2号进程进入。依次进行,如果有进程级别较高的,可以插队。

 提交事务

当执行用commit语句可以提交事务。当执行了commit语句之后,会确认事务的变化、结束事务。删除保存点、释放锁,当使用commit语句结束事务之后,其它会话将可以查看到事务变化后的新数据。

保存点就是为回退做的。保存点的个数没有限制

 回退事务

在介绍回退事务前,我们先介绍一下保存点(savepoint)的概念和作用。保存点是事务中的一点。用于取消部分事务,当结束事务时,会自动的删除该事务所定义的所有保存点。当执行rollback时,通过指定保存点可以回退到指定的点,

 事务的几个重要操作n

1.设置保存点 savepoint a

2.取消部分事务 rollback to a

3.取消全部事务 rollback

注意:这个回退事务,必须是没有commit前使用的;如果事务提交了,那么无论你刚才做了多少个保存点,都统统没有。

如果没有手动执行commit,而是exit了,那么会自动提交

只读事务n

只读事务是指只允许执行查询的操作,而不允许执行任何其它dml操作的事务,使用只读事务可以确保用户只能取得某时间点的数据。假定机票代售点每天18点开始统计今天的销售情况,这时可以使用只读事务。在设置了只读事务后,尽管其它会话可能会提交新的事务,但是只读事务将不会取得最新数据的变化,从而可以保证取得特定时间点的数据信息。

 设置只读事务n

set transaction read only;

表空间

表空间用于从逻辑上组织数据库的数据。数据库逻辑上是由一个或是多个表空间组成的。通过表空间可以达到以下作用:

1. 控制数据库占用的磁盘空间

2. dba可以将不同数据类型部署到不同的位置,这样有利于提高i/o性能,同时利于备份和恢复等管理操作。

约束

维护数据的完整性

数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则,在oracle中,数据完整性可以使用约束、触发器、应用程序(过程、函数)三种方法来实现,在这三种方法中,因为约束易于维护,并且具有最好的性能,所以作为维护数据完整性的首选。

约束用于确保数据库数据满足特定的商业规则。在oracle中,约束包括:not null、
unique, primary key, foreign
key,和check五种。

索引

索引是用于加速数据存取的数据对象。合理的使用索引可以大大降低i/o次数,从而提高数据访问性能。索引有很多种我们主要介绍常用的几种:

为什么添加了索引后,会加快查询速度呢?

创建索引

 单列索引

单列索引是基于单个列所建立的索引,比如:

create index 索引名 on 表名(列名);

 复合索引

复合索引是基于两列或是多列的索引。在同一张表上可以有多个索引,但是要求列的组合必须不同,比如:

create index emp_idx1 on emp (ename, job);

create index emp_idx1 on emp (job, ename);

使用原则

1. 在大表上建立索引才有意义

2. 在where子句或是连接条件上经常引用的列上建立索引

3. 索引的层次不要超过4层

这里能不能给学生演示这个效果呢?

如何构建一个大表呢?

索引的缺点

索引有一些先天不足:

1. 建立索引,系统要占用大约为表1.2倍的硬盘和内存空间来保存索引。

2. 更新数据的时候,系统必须要有额外的时间来同时对索引进行更新,以维持数据和索引的一致性。

实践表明,不恰当的索引不但于事无补,反而会降低系统性能。因为大量的索引在进行插入、修改和删除操作时比没有索引花费更多的系统时间。

比如在如下字段建立索引应该是不恰当的:

1. 很少或从不引用的字段;

2. 逻辑型的字段,如男或女(是或否)等。

综上所述,提高查询效率是以消耗一定的系统资源为代价的,索引不能盲目的建立,这是考验一个DBA是否优秀的很重要的指标。


权限

权限是指执行特定类型sql命令或是访问其它方案对象的权利,包括系统权限和对象权限两种。

角色

角色就是相关权限的命令集合,使用角色的主要目的就是为了简化权限的管理,

过程


过程用于执行特定的操作,当建立过程时,既可以指定输入参数(in),也可以指定输出参数(out), 通过在过程中使用输入参数,可以将数据传递到执行部分;通过使用输出参数,可以将执行部分的数据传递到应用环境。在sqlplus中可以使用create procedure命令来建立过程。

create procedure sp_pro3(spName varchar2, newSal number) is

--不要写成number(3,2),表明类型就可以了,不需要大小。就好像Java写方法时的参数一样

Sql代码

  1. begin
  2. --执行部分,根据用户名去修改工资
  3. update emp set sal=newSal where ename=spName;
  4. end;
  5. /  begin 
    --执行部分,根据用户名去修改工资

update emp set sal=newSal where
ename=spName;

end;

/

public static void main(String[] args){

try{

//1.加载驱动

Class.forName("oracle.jdbc.driver.OracleDriver");

//2.得到连接

Connection ct =
DriverManager.getConnection("jdbc:oracle:thin@127.0.0.1:1521:MYORA1","scott","m123");

//3.创建CallableStatement

CallableStatement cs =
ct.prepareCall("{call sp_pro3(?,?)}");

//4.给?赋值

cs.setString(1,"SMITH");

cs.setInt(2,10);

//5.执行

cs.execute();

//关闭

cs.close();

ct.close();

}
catch(Exception e){

e.printStackTrace();

}

}

}



 
函数

  函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句。而在函数体内必须包含return语句返回的数据。我们可以使用create function来建立函数,实际案例:

Sql代码

  1. --输入雇员的姓名,返回该雇员的年薪
  2. create function annual_incomec(name varchar2)
  3. return number is
  4. annual_salazy number(7,2);
  5. begin
  6. --执行部分
  7. select sal*12+nvl(comm, 0) into annual_salazy from emp where ename=name;
  8. return annual_salazy;
  9. end;
  10. /

--输入雇员的姓名,返回该雇员的年薪

create function
annual_incomec(name varchar2)

return number is

annual_salazy number(7,2);

begin

--执行部分

select sal*12+nvl(comm, 0) into annual_salazy
from emp where ename=name;

return annual_salazy;

end;

/

如果函数创建过程有编译错误,可以使用show error;命令显示错误

在sqlplus中调用函数

Sql代码

  1. SQL> var income number
  2. SQL> call annual_incomec('scott') into: income;
  3. SQL> print income

SQL> var income number

SQL> call
annual_incomec('scott') into: income;

SQL> print income

同样我们可以在java程序中调用该函数

select annual_income('SCOTT') from dual;

这样可以通过rs.getInt(l)得到返回的结果。

触发器

  触发器是指隐含的执行的存储过程。当定义触发器时,必须要指定触发的事件和触发的操作,常用的触发事件包括insert,update,delete语句,而触发操作实际就是一个pl/sql块。可以使用create trigger来建立触发器。

特别说明:

我们会在后面详细为大家介绍触发器的使用,因为触发器是非常有用的,可维护数据库的安全和一致性。

declare

c_tax_rate number(3,2):=0.03;

--用户名

v_ename varchar2(5);

v_sal number(7,2);

v_tax_sal number(7,2);

begin

--执行

select ename,sal into v_ename,v_sal from
emp where empno=&no;

--计算所得税

v_tax_sal := v_sal*c_tax_rate;

--输出

dbms_output.put_line('姓名是:'||v_ename||'工资:'||v_sal||' 交税:'||v_tax_sal);

end;

/

视图

视图是一个虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。(视图不是真实存在磁盘上的)


视图与表的区别

 视图与表的区别n

1.表需要占用磁盘空间,视图不需要

2.视图不能添加索引(所以查询速度略微慢点)

3.使用视图可以简化,复杂查询

比如:学生选课系统

4.视图的使用利于提高安全性

比如:不同用户查看不同视图

创建/修改视图

 创建视图n

create view 视图名 as select 语句 [with read only]

 创建或修改视图n

create or replace view 视图名 as select 语句 [with read only]

 删除视图n

drop view 视图名

当表结构过于复杂,请使用视图吧!

--创建视图,把emp表的sal<1000的雇员映射到该视图(view)

Sql代码

  1. create view myview as select * from emp where sal<1000; create view myview as select * from emp
    where sal<1000;

    --为简化操作,用一个视图解决 显示雇员编号,姓名和部门名称

Sql代码

  1. create view myview2 as select emp.empno,emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno;

create view myview2 as select
emp.empno,emp.ename,dept.dname from emp,dept where emp.deptno=dept.deptno;

视图之间也可以做联合查询

Oracle常见名词解析的更多相关文章

  1. ffmpeg常见名词解析

    scan_all_pmts, 扫描全部的ts流的"Program Map Table"表.

  2. Oracle 监听器日志解析

    Oracle监听器是驻留在Oracle实例所在服务器上的独立进程.作为客户端进程连接实例的重要沟通组件,Oracle监听器扮演着重要的地位.本篇将从监听器日志入手,分析阅读监听器日志和日常监听器常见行 ...

  3. Oracle Tuning 基础概述01 - Oracle 常见等待事件

    对Oracle数据库整体性能的优化,首先要关注的是在有性能问题时数据库排名前几位等待事件是哪些.Oracle等待事件众多,随着版本的升级,数量还在不断增加,可以通过v$event_name查到当前数据 ...

  4. [CG编程] 基本光照模型的实现与拓展以及常见光照模型解析

    0.前言 这篇文章写于去年的暑假.大二的假期时间多,小组便开发一个手机游戏的项目,开发过程中忙里偷闲地了解了Unity的shader编写,而CG又与shaderLab相似,所以又阅读了<CG教程 ...

  5. 【原创】ORACLE常见使用问题解决

    ORACLE常见使用问题解决 一.安装了oracle客户端后,发现plsql客户端找不到之前已经配置过的TNS连接信息 或许大家再使用ORACLE软件的过程中,经常会遇到这样的问题: 问题现象描述: ...

  6. 区块链名词解析:ICO、IFO、IEO和IMO,分别是什么呢?

    区块链名词解析:ICO.IFO.IEO和IMO,分别是什么呢?本部分给出了标准答案,但其相当枯燥乏味,建议快进. ICO(Initial Coin Offering),首次代币发行,指区块链项目首次向 ...

  7. Access、SQLServer、Oracle常见SQL语句应用区别

    Access.SQLServer.Oracle常见SQL语句应用区别 关劲松 PMP 如果要兼容Access.SQL Server.Oracle三个数据库版本:我们在编写SQL语句的过程中,尽量使用一 ...

  8. Oracle SQL 硬解析和子游标

    Oracle SQL 硬解析和子游标 What reasons will be happening sql hard parse and generating new child cursors 在一 ...

  9. Data Base oracle常见错误及解决方案

    Data Base oracle常见错误及解决方案 一.TNS协议适配器错误: 原因: 此问题的原因都是由于监听没有配置好. 解决: 1.打开oracle工具Net Manager,删除服务及监听,重 ...

随机推荐

  1. [转]SQL Server字符串处理函数大全

    select语句中只能使用sql函数对字段进行操作(链接sql server), select 字段1 from 表1 where 字段1.IndexOf("云")=1;这条语句不 ...

  2. Lnux 16.04 VM下安装与汉化

    参考linux-公社: http://www.linuxidc.com/Linux/2016-04/130520.htm  U盘安装linux16.04 http://www.linuxidc.com ...

  3. Qt 4.x调试器问题,缺失调试助手。

    之前项目开发需要用到4.x环境,固定多少版本避免团队开发不协调,然后拿了同事的开发包安装[注:我本子上原来就有4.x版本跟5.x版本,只是对应的4.x跟需求的不一样] creator是2.4.1的,同 ...

  4. jsp去掉小数点

    <fmt:formatNumber value="${zyUser.user_gold}" pattern="0"/>

  5. list对象属性排序

    Collections.sort(list, new Comparator<ScRel>() { @Override public int compare(Object o1, Objec ...

  6. bootstrap框架 导航条组件使用

    本文记载boot 导航条组件使用方法 导航条组件 导航条是在您的应用或网站中作为导航页头的响应式基础组件.它们在移动设备上可以折叠(并且可开可关),且在视口(viewport)宽度增加时逐渐变为水平展 ...

  7. LINUX 虚拟机克隆与网络配置

    虚拟机克隆后,启动之后发现网卡没有启动.发现提示错误信息“Device eth0 does not seem to be present, delaying initialization.” 解决方法 ...

  8. shell学习

    set -x 进入调试模式,会把每一个命令实际执行的命令打印出来,也就是会把一些参数扩展后的样子打印出来. set +x 退出调试模式自定义变量:x=7,y=8echo `expr $x + $y` ...

  9. 非对称加密RSA的应用及在C#中的实现

    quote: http://www.cnblogs.com/happinessCodes/archive/2010/07/27/1786404.html   一说到数据的加密,常常会涉及到这几个单词: ...

  10. Eclipse安装与配置

    http://www.th7.cn/Program/java/201307/144477.shtml http://www.eclipse.org/ 我们下载J2EE版本:Eclipse IDE fo ...