C/C++教程

oracle学习笔记

本文主要是介绍oracle学习笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Oracle的四个主要用户

  1. 超级管理员 sys/change_on_install

  2. 普通管理员 system/manager

  3. 普通用户 scott/tiger

  4. 大数据用户 sh/sh
    简单查询

  5. 查询表结构 DESC 表名

  6. 简单查询 SELECT [DISTINCT] |[字段 [别名]] [,字段 [别名]] …
    FROM 表名 [别名]
    (1) 查询时也可以使用四则运算,如:SELECT (字段
    x)+y FROM 表名
    (2) 可以使用“||”连接字段与字符串,如:
    select '工作与工资:' || job || sal 工作工资 from emp
    执行结果:

  7. 限定查询 SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] …
    FROM 表名 [别名]
    [WHERE 条件(s)]
    (1) Where字句后可以增加多个条件,最常见的条件就是最基本关系运算:>、<、>=、<=、!=(<>)、BETWEEN…AND、LIKE、IN(指定范围)、IS NULL(为空)、AND(且)、OR(或)、NOT(非)。
    (2) 多个条件可以使用AND与OR连接。
    例如:select * from emp where sal>1300 and sal<4000
    (3) 范围判断BETWEEN…AND:BETWEEN 最小值 AND 最大值(大于等于最小值,小于等于最大值),BETWEEN…AND 对数字、日期都可以使用!!!
    例如:select * from emp where sal between 1300 and 4000
    例如:select * from emp where hiredate between '01-1月-1981' and '31-12月-1981'
    (4) 判断为空IS (NOT) NULL
    例如:select * from emp where comm is null
    例如:select * from emp where comm is not null
    例如:select * from emp where not comm is null
    (5) 指定范围的判断(NOT) IN
    例如:select * from emp where empno in(7369,7566,7799)
    例如:select * from emp where empno not in(7369,7566,7799)
    注意:如果NOT IN 范围里出现了NULL则查询不到任何结果!!!
    (6) 模糊查询LIKE,‘_’匹配一个字符。‘%’匹配任意个字符。
    例如:select * from emp where empno like '7%'
    例如:select * from emp where empno like '77__'

  8. 数据排序 SELECT [DISTINCT] *|[字段 [别名]] [,字段 [别名]] …
    FROM 表名 [别名]
    [WHERE 条件(s)]
    [ORDER BY [字段 [ASC | DESC]] [,字段 [ASC | DESC]] …]
    (1) “ORDER BY”子句是写在所有SQL语句最后的,排序时可以指定多个字段,ASC为升序是默认的,DESC是降序使用时需要指定。

单行函数

  1. 字符函数
    (1) 首字母大写:Initcap(char)
    例如:Select initcap(‘hello’) from dual
    结果:Hello
    (2) 转换为大写:Upper(char)
    例如:Select upper(‘sun’) from dual
    结果:SUN
    (3) 转换为小写:Lower(char)
    例如:Select lower(‘FUN’) from dual
    结果:fun
    (4) 左剪裁:Ltrim(char,set)
    例如:Select ltrim( ‘xyzadams’,’xyz’) from dual
    结果:adams
    (5) 右剪裁:Rtrim(char,set)
    例如:Select rtrim(‘xyzadams’,’ams’) from dual
    结果:xyzad
    (6) 按字符翻译:Translate(char, from, to)
    例如:Select translate(‘jack’,’j’ ,’b’) from dual
    结果:back
    (7) 字符串替换:Replace(char, searchstring,[rep string])
    例如:Select replace(‘jack and jue’ ,’j’,’bl’) from dual
    结果:black and blue
    (8) 查找子串位置:Instr (char, m)
    例如:Select instr (‘worldwide’,’d’) from dual
    结果:5
    (9) 取子字符串:Substr (char, m, n)
    例如:Select substr(‘abcdefg’,3,2) from dual
    结果:cd
    Oracle数据库的字符串的下标0或1都是指字符串的第一个字母,如:
    Select substr(‘abcdefg’,0,2) from dual
    结果:ab
    Select substr(‘abcdefg’,1,2) from dual
    结果:ab
    Substr (char, m, n)中参数n可以不写,不写表示截取完整个字符串,如:
    Select substr(‘abcdefg’,2) from dual
    结果:cdefg
    Substr (char, m)中参数m可以是负数表示从后截取字符串,如:
    Select substr(‘abcdefg’,-3) from dual
    结果:efg
    (10) 连接字符串:Concat (expr1, expr2)
    例如:Select concat (‘Hello’,’ world’) from dual
    结果:Hello world
    (11) 字符串长度:Length(char)
    例如:Select length(‘lizhiwei’) from dual
    结果:8
  2. 数字函数
    (1) 四舍五入:Round(m,n)
    例如:Select round(100.5) from dual
    结果:101
    例如:Select round(100.256,2) from dual
    结果:100.26
    当n=-1时,表示取整数的四舍五入,得到一个个位是0的整数,如下:
    例如:Select round(103.256,-1) from dual
    结果:100
    例如:Select round(105.256,-1) from dual
    结果:110
    (2) 截断:Trunc(m,n)
    例如:Select trunc(100.256,2) from dual
    结果:100.25
    (3) 取余数:Mod(m,n)
    例如:Select mod(10,3) from dual
    结果:1
  3. 日期函数
    (1) 可以使用SYSDATE取得当前日期,如:SELECT SYSDATE FROM DUAL。
    (2) 日期的运算:日期+数字=日期(若干天后的日期)、日期-数字=日期(若干天前的日期)、日期-日期=数字(两个日期之间的天数)。如:
    Select sysdate+300 from dual
    Select sysdate-300 from dual
    Select sysdate-hiredate from emp
    (3) 返回指定日期当月的最后一天的日期值: Last_day(d)
    例如:Select last_day('23-8月-07') from dual
    结果:2007-8-31
    (4) 下一个星期几的日期(1<=integer<=7): Next_day(d,[day|integer])
    例如:Select next_day('5-5月-08','星期三') from dual
    结果:2008-5-7
    注意:integer =1对应的是星期日,则星期三对应的integer=4。
    例如:Select next_day('5-5月-08',4) from dual
    结果:2008-5-7
    (5) 求若干月后的日期,d是日期,n表示月数: Add_months(d,n)
    例如:Select add_months(sysdate,12) from dual
    结果:2008-8-1 19:47:57
    (6) 返回两个日期之间的月数:Months_between(d1,d2)
    例如:Select months_between('06-5月-13','06-5月-08') from dual
    结果:60
  4. 转换函数
    (1) 数字日期格式化:To_char( d | n [,fmt] )
    注意:d表示日期,n表示数值,fmt为转换的格式
    例如:Select to_char(sysdate,'yyyy"年"MM"月"fmDD"日" hh24:mi:ss' from dual
    结果:2007年08月01日 16:40:54
    注意:加入“fm”可以除去多余的0,“hh24”表示24小时制格式
    例如:Select to_char(sysdate,'yyyy"年"fmMM"月"fmDD"日" hh24:mi:ss') from dual
    结果:2007年8月01日 16:40:54
    注意:使用数字格式化是“9”表示一位数字,“L”表示当前语言环境下的货币符号!
    例如:Select to_char(1234567890,'999,999,999,999') from dual
    结果:1,234,567,890
    例如:Select to_char(1234567890,'L999,999,999,999') from dual
    结果:¥1,234,567,890
    (2) 字符串转换为日期数据类型:To_date( char [,fmt] )
    例如:Select to_date('2007-8-1','yyyy-mm-dd') from dual
    结果:01-08月-07
    (3) 将数椐字符串转换为 number 数据类型:To_number(char)
    例如:Select to_number('100')+ to_number('123') from dual
    结果:223
    注意:不使用此函数也可以完成运算!
    例如:Select '100'+ '123' from dual
    结果:223
  5. 通用函数
    (1) 处理NULL的函数:NVL(字段,值)
    注意:当某字段为NULL时,则此字段经过四则运算后的就结果也为空!使用了NVL(字段,值)后,当字段为空时Oracle就会使用用户为字段设置的值进行计算!
    例如:select ename , NVL(comm,10)*12 from emp
    (2) 多值判断函数:DECODE(数值|字段,判断值1,显示值1 ,判断值2,显示值2,…)
    例如:Select DECODE('li','li','李','zhi','志') from dual
    结果:李
    例如:select job,decode(job,'CLERK','办事员') from emp

复杂查询

  1. 多表查询 SELECT [DISTINCT] |[字段 [别名]] [,字段 [别名]] …
    FROM 表名 [别名] [,表名 [别名]] [,表名 [别名]]…
    [WHERE 条件(s)]
    [ORDER BY [字段 [ASC | DESC]] [,字段 [ASC | DESC]] …]
    注意:当不知道一个表中的数据量时,应先查询表中的数据量,若查询所有的数据,当表中的数据量很大时就很容死机!查询数据量的语句如下:
    SELECT count(
    ) FROM 表名
    (1) 多表查询时,当多个表中有相同的字段时,要使用该字段应该在字段前加上表名,即“表.字段”。
    例如:SELECT * FROM emp , dept WHERE emp.deptno=dept.deptno
    (2) 但查询的表名较长时,可使用表的别名来简化查询的代码。
    例如:SELECT e.empno, d.deptno FROM emp e , dept d WHERE e.deptno=d.deptno
    注意:当表的数据量很大时,使用多表查询的性能将会很低,应尽量避免使用。
    (3) 多表查询的限定条件不止能用“=”还可用其他的判断条件。
    例如:SELECT e.ename,s.grade FROM emp e , salgrade s WHERE e.sal BETWEEN s.losal AND s.hisal
  2. 左、右连接
    (1) 左、右链接意义:当多表查询的限定条件含有的字段在数据表里存在某些数据元素的该字段为空值时,即使这些数据元素的其他字段不为空,则查询结果里就不会有这些数据元素。相应的使用左、右连接就可以在查询结果里显示这些数据元素。
    (2) 左、右链接规则:在使用多表查询时,若限定条件使用了“=”就可以在“=”的左右边加上“(+)”;“(+)=”表示右连接,“=(+)”表示左连接。
    注意:“(+)=、(+)”这种左右连接表示方法是Oracle数据库的独有的。
    (3) 左右连接的标准SQL语句(SQL的1999年语法)
    交叉连接:SELECT * FROM 表1 CROSS JOIN 表2(用于产生笛卡尔积)
    例如:SELECT * FROM emp CROSS JOIN dept
    自然连接:SELECT * FROM 表1 NATURAL JOIN 表2(自动匹配关联字段)
    注意:自然连接时,设置关联字段需要使用约束制定。
    例如:SELECT * FROM emp NATURAL JOIN dept
    自定义关联字段:SELECT * FROM 表1 JOIN 表2 USING(字段)
    例如:SELECT * FROM emp JOIN dept USING(deptno)
    自定义关联条件:SELECT * FROM 表1 JOIN 表2 ON(关联条件)
    例如:SELECT * FROM emp JOIN dept on(emp.deptno=dept.deptno)
    自定义连接方向:SELECT * FROM 表1 [LEFT | RIGHT | FULL OUTER] JOIN表2 ON(关联条件) (其中LEFT:左连接,RIGHT:右连接,FULL:全连接)
    例如:SELECT * FROM emp LEFT OUTER JOIN dept on(emp.deptno=dept.deptno)
    例如:SELECT * FROM emp RIGHT OUTER JOIN dept on(emp.deptno=dept.deptno)
    例如:SELECT * FROM emp FULL OUTER JOIN dept on(emp.deptno=dept.deptno)
  3. 统计函数与分组查询
    (1) 统计函数
    统计查询结果数:COUNT(字段 | *)
    例如:SELECT COUNT(ename) FROM emp
    统计平均值:AVG(字段)
    例如:SELECT AVG(sal) FROM emp
    求和:SUM(字段)
    例如:SELECT SUM(sal) FROM emp
    求最大值:MAX(字段)
    例如:SELECT MAX(sal) FROM emp
    求最小值:MIN(字段)
    例如:SELECT MIN(sal) FROM emp
    注意1:使用统计函数当统计的字段都为空时,只有COUNT函数一定会返回结果(可能是0),而其他的函数可能不会返回结果!!!
    注意2:统计函数可以在没有分组的时候单独使用,而不能与其他字段同时使用,如:select sum(sal) ,ename from emp就是sum函数与ename字段同时使用而导致查询出错。
    (2) 分组查询
    SELECT [DISTINCT] *|[[分组字段1 [别名]] [,分组字段2 [别名]]…]|统计函数
    FROM 表名 [别名] [,表名 [别名]] [,表名 [别名]]…
    [WHERE 条件(s)]
    [GROUP BY 分组字段1 [,分组字段2]…]
    [ORDER BY [字段 [ASC | DESC]] [,字段 [ASC | DESC]] …]
    例如:select job,max(sal),min(sal) from emp group by job
    例如:select d.deptno, d.dname, d.loc,count(e.empno),nvl(avg(e.sal),0)
    from dept d,emp e
    where d.deptno=e.deptno(+)
    group by d.deptno, d.dname,d.loc
    注意1:在使用分组查询时,SELECT子句后只能出现分组字段和统计函数,而不能出现其他字段,如:select job,ename,max(sal),min(sal) from emp group by job中select子句含有非分组字段ename而导致查询出错。
    注意2:统计函数可以嵌套,但是嵌套之后的统计函数不能与任何字段同时使用,如:select job,max(avg(sal)) from emp group by job中就是因为job字段与嵌套的统计函数同时使用而导致查询出错的。
    (3) 使用HAVING进行分组后的过滤查询
    SELECT [DISTINCT] *|[[分组字段1 [别名]] [,分组字段2 [别名]]…]|统计函数
    FROM 表名 [别名] [,表名 [别名]] [,表名 [别名]]…
    [WHERE 条件(s)]
    [GROUP BY 分组字段1 [,分组字段2]…]
    [HAVING 分组后的过滤条件(可以使用统计函数)]
    [ORDER BY [字段 [ASC | DESC]] [,字段 [ASC | DESC]] …]
    例如:select job,max(sal),min(sal),avg(sal)
    from emp
    group by job
    having avg(sal)>2000
    注意:WHERE与HAVING的区别,where是使用在group by之前的过滤条件,having是使用在where与group by之后的过滤条件。
  4. 子查询
    SELECT [DISTINCT] *|[[分组字段1 [别名]] [,分组字段2 [别名]]…]|统计函数
    (,子查询)
    FROM 表名 [别名] [,表名 [别名]] [,表名 [别名]]…(,子查询)
    [WHERE 条件(s) (,子查询)]
    [GROUP BY 分组字段1 [,分组字段2]…]
    [HAVING 分组后的过滤条件(可以使用统计函数)]
    [ORDER BY [字段 [ASC | DESC]] [,字段 [ASC | DESC]] …]
    (1) 当子查询在where子句中,则此时子查询会返回单行单列、多行单列、多行单列的数据。
    例如:select * from emp where sal>(select avg(sal) from emp)(返回单行单列)
    例如:select * from emp where (job,sal)=(select job,sal from emp where ename= 'ALLEN ')(返回单行多列,此类型出现很少)
    例如:select * from emp where sal in(select sal from emp where job='MANAGER')
    (返回多行单列)
    注意:但返回多行单列时需要使用判断符:IN、ANY、ALL,IN表示指定范围;>ANY表示大于其中的最小值,<ANY表示小于其的最大值,=ANY表示等于其中的任何值;>ALL表示大于其中的最大值,<ALL表示小于其中的最小值。
    (2) 当子查询在from子句中,则此时子查询会返回多行多列。
    例如:select d.deptno,d.dname,d.loc,temp.con,temp.av
    from dept d,( select deptno dno,count(empno) con,avg(sal) av
    from emp
    group by deptno) temp
    where d.deptno=temp.dno(+)
    注意:此例使用多表查询也可以达到效果,但使用嵌套查询可以大大的提高性能。
  5. 数据的更新操作
    (1) 数据增加:INSERT INTO 表名 [(字段1,字段2…)] VALUES (值1,值2…)
    (使用Oracle的复制表操作复制emp表:CREATE TABLE myemp AS SELECT * FROM emp)
    例如:insert into myemp (empno,ename,hiredate,sal,mgr,job,comm)
    values (1234, '李志伟',to_date(' 1993-06-11', ' yyyy-mm-dd'),8000,7369, ' 程序员',1000)
    (2) 数据修改:UPDATE 表名 SET 字段1=更新值1, 字段2=更新值2… [WHERE 条件(s)]
    例如:update myemp set sal=10000 where empno= '7369'
    若更新数据时没有更新条件,则表示更新所有。但最好不要这样使用,因为当表中的数据很大时,这样更新会很慢,性能极低!
    (3) 数据删除:DELETE FROM 表名 [WHERE 删除条件(s)]
    例如:delete from myemp where ename= '李志伟'
    注意:数据的查询要比数据的更新安全!所以更新时一般要进行事务处理。
  6. 事务处理
    (1) 事务的回滚与提交
    回滚命令:ROLLBACK,更新操作回到原点。
    提交命令:COMMIT,提交数据的更新,一旦提交后就无法回滚了。
    (2) 需要注意的是:每一个用户的每一次与数据库连接都相当于与数据库的一次会话(session),当前会话的数据更新未提交时,其他用户的更新操作就需要等待当前的数据更新提交后才能进行,以确保数据的安全。(这就是死锁)
  7. 数据伪列
    (1) ROWNUM
    例如:select rownum,ename,sal from emp where rownum<10
    rownum就是查询结果所在的序号数,其应用主要是分页显示。
    例如:select * from (
    select rownum rn,ename,sal from emp
    where rownum<=10) temp
    where temp.rn>5(显示结果的第6—10行)
    (2) ROWID
    rowid表示数据库里每条数据保存的物理地址,所以每条数据的rowid都不会重复。
    例如:select rowid,ename,sal from emp
    执行结果:

以AAAR3sAAEAAAACXAAA为例,说明rowid的组成:
数据对象号:AAAR
相对文件号:3sAAE
数据块号:AAAACX
数据行号:AAA
rowid的应用:如果某次操作向数据库里插入了大量重复无用的数据,则可以利用“插入越早的数据其rowid就越小”的特性找到刚插入的无用的数据并删除。
8. 集合操作
(1) UNION:连接两个查询,相同部分不显示。
(2) UNION ALL:连接两个查询,相同部分显示。
(3) INTERSECT:返回两个查询中相同的部分。
(4) MINUS:返回两个查询中不同的部分。
例: select * from emp where comm is null
UNION
select * from emp where comm is not null

DDL与DCL

  1. 表的创建及管理
    (1) 创建表时常用的数据字段
    数据类型 关键字 描述
    字符串 Varchar2(n) n表示字符串所能保存的最大长度,基本上保存200个左右的类容
    整数 Number(n) N表示最多可以保存的整数数,有时可以用int代替
    小数 Number(n,m) 其中m为小数位n-m为整数位,有时可以用float代替
    日期 Date 存放日期-时间
    大文本 Clob 可以存放海量文字(4G)
    大对象 Blob 用于存放二进制数据
    在开发之中blob很少用,因为blob可以存放最大4G的二进制数据,使得数据库庞大且读取不方便。
    (2) 表的创建
    Create table 表名(
    字段1 数据类型 [default 默认值],
    字段2 数据类型 [default 默认值],

    字段n 数据类型 [default 默认值],
    );
    例如:create table member(
    Name varchar2(50) default '无名氏',
    Age number(3),
    Birthday date default SYSDATE,
    Content clob
    );
    (3) 表的复制
    Create table 复制表名称 as 子查询
    例如:create table emp20 as select * from emp where deptno=20
    注意:当子查询无结果时,只会复制表的结构。
    (4) 表的重命名
    Rename 旧的表名称 to 新的表名称(Oracle独有)
    例如:rename member to person
    重命名后可以使用以下代码查看当前的表名称:
    Select * from tab;(查看当前所有表)
    Select * from user_tables;(查看当前所有表的信息)
    (5) 截断表
    截断表与删除表数据不同,删除表数据可以进行事物的回滚(即删除表后不会立即释放数据的资源),但是截断表会彻底释放一张表所占用的全部资源(表空间、索引等等)且无法回滚!操作代码如下:truncate table 表名称,但是此语法是Oracle所独有的。(删除表数据:delete from 表名称)
    (6) 表的删除
    Drop table 表名称
    a) 当用户使用“drop table 表名”删除表后,再通过“select * from tab”查询时虽然发现被删除的表没有了,但是留下了一些痕迹。这就是Oracle 10g之后为了防止用户误删除表而提供的回收站功能,用户可以通过回收站而进行表的恢复操作,这种技术称为“闪回技术”。
    b) 查看回收站操作:select * from user_RECYCLEBIN
    c) 恢复删除的表操作:flashback table 表名称 to before drop
    d) 删除回收站里的表:purge table 表名称
    e) 清空回收站:purge recyclebin
    f) 如果想彻底删除一张表,不希望其到回收站可用:drop table 表名 purge
    (7) 修改表结构
    a) 向表中增加字段:
    alter table 表名称 add(
    字段1 数据类型 [default 默认值],
    字段2 数据类型 [default 默认值],
    …)
    b) 修改已有字段结构:
    alter table 表名称 modify(
    字段1 数据类型 [default 默认值],
    字段2 数据类型 [default 默认值],
    …)
    注意:最好不要修改表的结构,因为修改表结构可能会影响性能。应该删除表后重建新的表。
    (8) 表字段的约束
    a) 约束的定义方式:
    例如,定义无名约束:
    create table member(
    Name varchar2(50) default '无名氏',
    Age number(3) UNIQUE,
    Birthday date default SYSDATE,
    Content clob
    );
    例如,定义有名约束(名为“UK_age”):
    create table member(
    name varchar2(50) default '无名氏',
    age number(3),
    birthday date default SYSDATE,
    content clob,
    constraint UK_age UNIQUE(age)
    );
    注意:定义有名的约束,当增加的数据不满足约束时,数据库会提示出错的位置!
    b) 非空约束:NOT NULL(NK),表示数据不为空。
    c) 唯一约束:UNIQUE(UK),表示数据不能重复。
    d) 主键约束:Primary Key(PK),主键约束=非空约束+唯一约束。
    e) 检查约束:Check(CK),主要是对数据字段的约束。
    例如:constraint ck_sex Check (sex IN ('男','女'))
    例如:constraint ck_age Check (age between 0 and 150)
    f) 外键约束:Foreign Key(FK),定义外键的字段值是参照其它表的主键值的。例如:
    (9) 修改表的约束
    a) 为表增加约束:alter table 表名称 add constraint 约束名 约束类型(字段)
    b) 删除表约束:alter table 表名称 drop constraint 约束名
    c) 可以发现如果要维护约束,一定要给约束取名。
    注意:非空约束是一个特殊的约束,无法对它进行修改。也最好不要修表的约束,因为修改表的约束可能会降低性能。
    (10) 查询约束
    查询所有约束名:select * from user_constraints
    查询所有约束的字段:select * from user_cons_columns
    (11) 序列的设置
  2. 视图
    (1) 视图的介绍:视图就是用来包装SQL的查询语句的,把复杂的查询语句包装起来有利于程序的设计,而这些查询语句的结果就是视图的内容,所以视图是一种虚拟的表,所以最好不要修改视图的内容。
    (2) 创建视图的语法 create [or replace] view 视图名称 as 子查询
    例如:create view myemp as select * from emp where sal>1500(创建视图)
    例如:create or replace view myemp as select * from emp where sal>2000(若视图“myemp”存在则替换视图,不存在则创建视图)
    (3) 删除视图:drop view 视图名
    (4) 创建视图时可以使用的两个选项:
    a) 当视图创建后,可以使用以下语法来更新视图里的数据(很类似修改表数据):
    update 视图名 set字段1=更新值1, 字段2=更新值2… [where条件(s)]
    b) 第一个选项:with check option
    创建视图是加上该选项,就不能更新视图条件了!
    例如,视图的创建语句如下:
    create view myemp as select * from emp where sal>1500 with check option
    若使用以下语句更新视图就不会成功:
    update myemp sal=1000 where ename is not null
    c) 第二个选项:with read only
    创建视图是加上该选项,就不能更新视图内容了(即只读视图)!创建视图时建议使用该选项。
  3. 同义词
    (1) 同义词的概念说明:在Oracle中“同义词”就是一种别名,例如给emp表起一别名“myemp”,则select * from emp与select * from myemp效果相同。但在Oracle中把myemp叫做emp的同义词。
    (2) 创建同义词的语法 create [public] synonym 同义词名 for 用户名.表名
    例如:create synonym myemp for scott.emp
    说明:没有加public则表示此同义词“myemp”只能当前用户使用,若加上public则所有用户可以使用。
  4. 索引
    (1) 索引的概念说明:索引的主要功能就是提升数据库的性能。在Oracle中创建索引存在两种方式:主键约束,Oracle会自动给一张表的主键创建索引;手动创建,通过SQL语句创建。
    (2) 创建索引 create index 索引名 on 表名(字段)
    注意:虽然索引会增加数据查询的性能,但是当一张表需要频繁的修改时增加索引会降低其修改数据的性能,此时最好不要加索引。
  5. 用户管理
    (1) 创建用户 create user 用户名 identified by 密码
    创建用户需要登录具有创建用户权限的system与sys两个用户进行操作,但是新创建的用户没有任何的权限,甚至不能登录,这就需要授权了。
    (2) 授权操作 grant 权限 to 用户名
    例如:grant create session to mydb(授予登录权限)
    例如:grant create table to mydb(授予建表权限)
    例如:grant select,insert on scott.emp to mydb(授予mydb用户查询、增加scott用户emp表的数据权限)
    但是这种权限很多,授权就很麻烦,这时候就可以使用角色,每个角色会包含很多权限。
    (3) 给予角色 grant 角色1 [,角色2]… to 用户名
    例如:grant connect,resource to mydb
    (4) 用户密码管理
    a) 修改用户密码 alter user 用户 identified by 新密码
    b) 让用户密码失效 alter user 用户名 password expire
    c) 锁定用户 alter user 用户名 account lock
    d) 解锁用户 alter user 用户名 account unlock
    (5) 回收权限 revoke 权限1 [,权限2]…from 用户名
    (6) 删除用户 drop user 用户名 [cascade]
    加上cascade表示级联删除,会删除用户数据
  6. 数据备份
    (1) 数据的导出
    a) 进入Windows的cmd,用cd命令把目录设置到导出文件的位置
    b) 输入exp命令,再输入要导出的用户数据的用户名和密码
    c) 设置导出的文件名,在按回车默认导出数据设置直到开始导出数据。
    (2) 数据的导入
    a) 在Windows的cmd下使用cd命令进入要导入的文件位置
    b) 输入imp命令,再输入要把数据导入的用户的用户名和密码
    c) 按回车键,直到出现“导入整个导出文件(yes/no):no>”输入yes回车后开始导入。
    (3) 数据表的冷备份
    a) 数据库的冷备份概念的说明:就是关闭数据库实例,再备份数据库文件。如要进行冷备份,则要备份数据库的核心文件,如:控制文件、重做日志文件、数据文件、表空间文件、核心操作的配置文件。
    b) 找到备份数据库的核心文件可以通过以下方式(在sys用户下找):
    控制文件:select * from V$CONTROLFILE
    重做日志文件:select * from V$LOGFILE
    数据文件:select * from V$DATAFILE
    表空间文件:select * from V$TABLESPACE
    核心操作的配置文件:show paramter pfile
    c) 在找到数据库的核心文件之后,关闭数据库实例,使用:shutdown immediate
    d) 备份数据库的核心文件之后,启动数据库实例,使用:startup(备份完成)
这篇关于oracle学习笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!