`
阅读更多

一、oralce数据库

首先明白,oracle数据库、实例、和表空间的关系。

 

Oracle数据库和传统说的数据库不一样,一个相当于管理系统,而且只有一个。

实例:实例是后台进程和和内存结构,oracle数据库可以有很多个实例

每个实例下面有自己的用户,和数据库对象(表、同义词、序列、视图、索引)。

表空间:

用户可以创建自己的表空间,或者使用系统的表空间。

一个用户只能对应一个表空间。一个表空间可以对应多个用户。

1/表空间是数据库中最大的逻辑单位,一个 Oracle 数据库至少包含一个表空间,就是名为SYSTEM的系统表空间。

2/

每个表空间是由一个或多个数据文件组成的,一个数据文件只能与一个表空间相关联。3/表空间的大小等于构成该表空间的所有数据文件大小之和。

 

 

二、创建用户和表

 

创建数据库实例之后,在实例下创建用户

--注意:创建了用户,必须给用户赋予登陆权限和使用存储空间的权限,不然新创建的用户无法登陆

--允许用户连接数据库并创建数据库对象

grant connect to lmj;

--允许用户使用数据库中的存储空间

grant resource to lmj;

--创建表和插入数据,查询数据

--在数据库中,变量名写在前面,变量类型写在后面,与java程序相反

create table student

(

  sname varchar2(30),

  sid   number not null

);

 insert into student values('zhansan',1);

 select * from student;

 

三、数据库对象

数据库对象包括:表、同义词、序列、视图、索引。

数据库对象是每个用户拥有的,自己拥有自己的数据库对象,同义词、序列、索引都是独立于表存在的。

 

1、同义词,他就相当于查询表的时候使用的别名,给表创建一个同义词可以简化复杂的表名方便引用,还可以提高表的安全性,也可以给同一个表创建多个同义词分配给不同的用户,那么大家看到的表名都是不一样的。

 

同义词分为公有和私有,公有大家可见,私有自己可见

----同义词的创建和使用代码

--定义私有同义词

create synonym e for emp;

--使用同义词查询表

Select * from  e

 

--删除同义词

drop synonym e;

 

--赋权限

grant select on dept to zhangsan;

 

--定义公共的同义词

create or replace public synonym e for emp;

 

 

2、序列:自增长的一个变量,它独立于表存在,每次的值都保存下来,下次使用的时候接着增长或者减少。

 

--创建序列

create sequence seq_num 

start with 1

increment by 2

maxvalue 20

minvalue 1

NOCYCLE

CACHE 2

 

 

 

3、视图

视图就是查询语句的封装,它的不存储数据,所有的数据都来自表,他的具体列来自查询语句。

--创建视图

create view v_emp as select empno,ename,job from 

emp;

--创建一个视图,名字为v_emp 他的列来自emp

 

视图使用:

Select * from v_emp;

--现在得到的就是select empno,ename,job from  emp;的数据

视图就相当于一个虚拟表,视图主要是用于查询。

 

4、索引

它是为了提高查询效率,他根据rowid创建,rowid是保存了每一行数据的内存地址,所以找到了行的rowid就找到了整个行。

索引也是独立于表存在的,它由数据库自动维护,每次更新表的数据,索引都会重新创建,所以建立索引会降低更新的效率。

 

为什么索引可以提高效率?

 

比如在查找 where name=zhangs” and id=11;

如果id建立了索引,就可以直接先匹配每一行的id,提取出满足id的行

再匹配name,就可以不用全部匹配每一行的nameid

如果id没有索引,就会一行一行的,全部匹配每一行的nameid

 

语法:

唯一索引和组合索引

Create index my_index on student(sid);

Create index my2_index on student(sid,sname);

 

 

 

 

 

 

 

 

 

 

PL/SQL

PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言。

一、为什么需要PL/SQL编程。

原来我们操作数据库的方式

 

 

每次发送一个字符串给oracle,数据库都要编译在运行,这样效率很慢,而且在网络中字符串容易被串改。

利用PL/SQL编程,将操作过程都写在oracle中,编译好后放在那里,只等着java应用来调用,这样效率和安全性都得到提高。

缺点:

移植性差,数据库操作都写在oracle,如果需要换成sql2005数据库,那么将无法移植需要全部重写数据库操作。

 

1PL/SQL 分为三个部分,声明部分、可执行部分和异常处理部分

   [DECLARE 

    declarations]

    BEGIN

    executable statements

    [EXCEPTION 

    handlers]

END;

 

Begin end的内容成为块;

 

过程:可以重复调用

创建过程的语法:

 

CREATE [OR REPLACE] PROCEDURE 

   <procedure name> [(<parameter list>)]

IS|AS 

   <local variable declaration>

BEGIN

   <executable statements>

[EXCEPTION

   <exception handlers>]

END;

  create or replace procedure pro_1 is

    begin

       insert into student values('zhangsanfeng',6);

     end;

执行的时候需要输入/再按回车

调用的命令

--调用过程

exec pro_1

 

2、打开输出

set serveroutput on;

打印

 begin

    dbms_output.put_line('aaaaa');

    end;

   /

3、将查询结果输出

--声明变量

--变量名在前,类型在后

 set serveroutput on;

 

 declare

  myname varchar2(20);

     myid  number(10);

   begin

       select sname,sid into myname,myid from student where sid=1;

      dbms_output.put_line('姓名'||myname||'编号'||myid);

       end;

 

带输入的查询

declare

   myname varchar2(30);

   myid   number(10);

   

   begin

     select sname,sid into myname,myid from student where sid=&aa;

     dbms_output.put_line('姓名:'||myname||'编号:'||myid);

     end;

注意:

通过&aa,aa随便取名,用来接收输入的数据,如果是字符串输入要加‘’

 

 

异常处理:(找不到数据)

declare

   myname varchar2(30);

   myid   number(10);   

   begin

     select sname,sid into myname,myid from student where sname=&aa;

     dbms_output.put_line('姓名:'||myname||'编号:'||myid);

     exception 

      when no_data_found 

        then

          dbms_output.put_line('没有该学生'); 

              end;

 

带有参数的过程

create or replace procedure my_pro(name varchar2)

is myid number(10);

begin

  select sid into myid from student where sname=name;

  dbms_output.put_line('编号:'||myid);

  exception

    when

      no_data_found

      then

        dbms_output.put_line('没有该学生');

        end;

 

 

 

<!--EndFragment-->
  • 大小: 15.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics