oracle数据库01

马果老师整理

 

问题1:什么oracle?

  • oracle是美国甲骨文开发的一款数据库

问题2:oracle数据库的特点

  • 它的安全性高、运行稳定
  • 它的数据类型非常丰富,它提供了一些特殊的数据类型(伪列、大对象)
  • 它非常适合用于企业级项目(适用于中、大型项目)

问题3:oracle数据库有哪些版本?

  • oracle主要的版本有:7i,8i,9i,10G,11G,12C
  • 我们学习的版本是11G

问题4:安装oracle (oracle数据库官网可以免费下载)

oracle的安装版本有两种类型:

  • 完整版oracle:完整版的功能比较全,但体积较大,安装比较慢 
  • 简化版oracle:功能进行了简化,但基本功能都有,体积小,安装较快

问题5:安装oracle要注意的细节

  • oracle安装时,安装目录一定不能包含:中文字符与空格
  • 安装简化版oracle时,安装过程中,会有两处警告,忽略即可
  • 安装数据库时,在最后阶段,系统会提示指定:密码,这个密码不要忘记

问题6: 如何判断oracle数据库是否安装好

  1. 进入cmd
  2. 输入 sqlplus
  3. 分别输入system(这是系统账号)以及密码,如果可以登录成功,即表示:oracle安装成功(注意:在输入密码时,密码是不可见的)

问题7:oracle数据库运行时,比较消耗内存资源,建议大家将oracle的服务设置为:手动启动

问题8:要使用oracle数据库,需要开启哪些服务?

服务1:OracleServiceXE,只要开启这个服务就可以访问直接数据库

  • 如果是简化版该服务的名称是:OracleServiceXE
  • 如果是完整版该服务的名称是:OracleServiceORCL

此处的 XE 或者是 ORCL就是oracle的数据库名,要用代码连接时,数据库名称就需要指定为这个名称 

注意:如果只开启这一个服务,数据库可以直接通过控制台访问,但是不能用第三方工具,或者java代码访问

服务2:OracleXETNSListener ,这是oracle中的监听服务,开启该服务才可以用java代码或第三方工具连接数据库

  • 简化版该服务的名称是:OracleXETNSListener
  • 完整版该服务的名称是:OracleORCLTNSListener

问题9: oracle数据库的安全性很好,要执行对应的操作,一定要有对应的权限. oracle数据库有三种不同用户角色,这些角色拥有数据库权限也不同

角色1:sysdba (数据库管理员),它的权限等级最高,可以执行所有操作
        

  • 创建表空间、创建用户、分配用户权限
  • 创建表、以及对数据进行增删改的各种操作
  • 数据库装载、卸载
    装载数据库:让数据库恢复使用
    卸载数据库:让数据库暂停使用

角色2:sysoper (数据库操作员),它的权限等级仅次于sysdba,除了不能载、卸载数据库装,其他操作都可以

  1. 创建表空间、创建用户、分配用户权限
  2. 创建表、以及对数据进行增删改的各种操作

角色3: normal (普通用户),它的所有操作,都要经过授权才可以
    
注意,我们一般使用的是:normal角色的用户,之前的系统账号system的角色类型为: sysoper

oracle数据库服务器的基本结构:

在oracle中,所有数据表、数据都是存放在表空间(tablespace)中,oracle中的表空间的概念,就相当于mysql
中database的概念

我们使用oracle都是使用普通用户角色,所以,一般会首先创建一个普通用户:
    
要创建用户,必须有权限才可以 (sysdba,sysoper),使用system它是操作员权限,可以创建用户、创建表空间

@@@@@@@创建步骤:

先用system登录,登录方式有两种:

  1. cmd--->sqlplus--->分别输入用户名、密码
  2. cmd--->sqlplus system/system

创建表空间

  • 语法: create tablespace 表空间名称 datafile 'd:/xxx/xx.dbf' size 50m autoextend on next 20m;
  • 示例: create tablespace d91space datafile 'd:/data/d91.dbf' size 50m autoextend on next 20m;

注意:表空间的路径中不要包含中文与空格

创建新用户

  • 语法:create user 用户名 identified by 密码 default tablespace 表空间名称;

  • 示例: create user  d91   identified by  d91 default  tablespace d91space;

给新用户分配权限

  • 授权连接数据库的权限:grant connect to d91;
  • 授予操作资源的权限(可以创建对象、删除对象、增删改查):grant resource to d91;

默认情况下,对数据库执行增删改操作,都需要提交以后,才会真正保存到表空间中

  • commit;

将数据库的数据进行导出

  1. 在cmd模式下,执行exp(要执行该命令,要首先退出oracle---------exit)
  2. 输入要导出哪一个用户的数据
  3. 指定导出的文件位置,后缀名必须是: dmp
  4. 选择导出当前用户表空间下面的所有数据

将dmp文件的数据,导入到数据库中

  • 在cmd模式下,执行imp(要执行该命令,要首先退出oracle---------exit)
  • 指定要将数据导入到哪一个用户下(任意用户名都可以)
  • 整个导入过程中,只有一个地方需要更改: 导入整个导出文件,选择yes

表空间的操作

  • 查询表空间:select tablespace_name from user_tablespaces;
  • 创建表空间“create tablespace d91space datafile 'd:/data/d91.dbf' size 50m autoextend on next 20m;
  • 删除表空间:切记:不能直接删除dbf文件,如果直接删除这个文件,oracle数据库将无法登录

删除步骤:

  • 用语法删除表空间:drop tablespace d91space; -----这种删除方式,只能删除没有数据的表空间
  • drop tablespace d91space including contents;-------这种方式可以删除表空间及里面的数据
  • 再手动删除dbf文件

用户的操作

  • 查看有哪些用户:select username from all_users;
  • 创建用户:create user  d91   identified by  d91 default  tablespace d91space;
  • create user d92 identified by d92; //不指表空间,使用的是默认表空间 

删除用户

  • drop user d91;------------这种删除方式,只能删除没有数据的用户
  • drop user d91 cascade;------------这种删除,可以删除用户及其数据

修改用户密码

  • alter user 用户名 identified by 新密码;

-----------------------------------------------------------------------------------------------------
如果操作数据库时,在cmd窗口下写语句,非常的不方便。所以,我们一般会使用一个第三方工具操作oracle
    
oracle第三方工具很多,使用最多的是:  pl/sql (不用安装,解压缩即可)

注意:这个工具分为:32位版与64位,不同操作系统要求的版本有所不同:

导出数据,也可以使用plsql导出、导入 

---------------------------------------------------------------------------------------------------

使用java代码,连接oracle:

  • 注意:oracle数据库服务器启动后,会占用两个端口:  1521 与 8080
  • 由于tomcat的默认端口也是8080,这个端口号会与oracle冲突,所以,建议更改tomcat的端口号
  • 使用java代码连接时,是连接1521端口 

java连接oracle,mysql不同之处:

mysql:

  • url: jdbc:mysql://localhost:3306/数据库名称 
  • Class.forName("com.mysql.jdbc.Driver");

oracle:

  • url: jdbc:oracle:thin:@localhost:1521:数据库名称
  • Class.forName("jdbc.oracle.driver.OracleDriver");

oracle中的数据类型,可以分为五种类型:

数值类型 

  • int,float这些数值都可以正常使用,但oracle并不推荐使用这些类型
  • oracle推荐使用的数值类型是:  number

用法如下:

  • id number(11)-----------------id类型为数值类型,长度为11个长度,只能包含整数
  • salary number(11,2)-----------salary类型为数值类型,有效位数11位,其中,小数点之后可以保留2位
  • other number------------------other类型为数值类型,长度为38位,只能包含整数

字符类型

  • varchar,char 这些字符类型可以正常使用,但oracle中不推荐使用varchar
  • oracle中推荐使用的字符类型是:  varchar2,char(varchar2与varchar原理一样)
  • 在数据库中,一个汉字占3个字节长度

日期类型

  • oracle中推荐使用日期类型是date

date类型,既可以包含:年月日,也可以包含时分秒

注意

如下添加date类型的数据方式是错误的:insert into test3 values(1,'jack','2010-10-20');

正确添加方式:

  • insert into test3 values(1,'jack',date'2010-10-20');
  • insert into test3 values(2,'andy',sysdate);
  • 如果要添加指定数据的日期包含有时分秒,需要用函数转换: to_date()

大对象类型

特点:存储容量特别大,一个字段最多可存储:4GB的容量

推荐使用: CLOB、BLOB

  • CLOB:文本大对象(大容量的文本)
  • BLOB:二进制大对象 (存储的数据,以二进制的方式进行存储)---BLOB的数据,一般是通过程序来进行录入

伪列类型    

伪列,本身并不存在,它需要根据查询的结果动态产生

  • rowid:它用于描述,当前这一行数据,在oracle中的存储位置
  • rownum: 它用于给查询到的结果,生成一组连续序号(序号一定是从1开始排序)
  • 数据如果删除,序号依然连续

注意:在oracle中,要查询前几条数据,或者是要进行分页显示,必须要使用rownum

  • 在sqlserver查询前2条数据,语句是:select top 2 * from 表
  • 在mysql中,查询前2条数据,语句是:select * from 表  limit 0,2
  • 在oracle中,查询前2条数据,语句是:select * from 表 where rownum<=2;

mysql中的uuid

注意:在实际应用中,一般很少使用int类型作为主键,开发中,更多时候是使用uuid作为主键在mysql中,uuid是一个32位长度的随机字符串+ 4根横线 = 36位

    CREATE TABLE test1
    (
        id VARCHAR(36) PRIMARY KEY,
        NAME VARCHAR(20),
        score INT
    )

    INSERT INTO test1 VALUES(UUID(),'jack',99);
    INSERT INTO test1 VALUES(UUID(),'andy',89);
    INSERT INTO test1 VALUES(UUID(),'chris',80);

create table test2
(      
       id  number(11) primary key,
       name varchar2(20),
       photo blob  --照片,类型是一个二进制大对象
)

select * from inf;
select * from test2;

select id,name,score,rowid from inf;

oracle中的uuid

create table test3
(
       id varchar2(32) primary key,
       name varchar2(20),
       score number(11)
)


insert into test3 values(sys_guid(),'jack',100);
insert into test3 values(sys_guid(),'andy',60);
insert into test3 values(sys_guid(),'chris',80);
insert into test3 values(sys_guid(),'bruce',93);

数据完整性

目的:保证数据表中的数据是准确的、有效的。每一条数据都可以被唯一的标识出来.

要保证数据的完整性,可以通过约束来实现

数据完整性,包含三个方面的完整性:

实体完整性

实体完整性,可以保证数据表中的每一条记录,可以被唯一的标识出来(当前字段的值,不允许出现重复值)

通过下列约束,可以保证实体完整

主键约束 primary key

特点:

  • 如果当前列,被标识为主键列,它的值必须唯一,不允许出现重复值
  • 数据表中的主键,可以被外键表引用

唯一约束 unique

特点:如果当前列,加入唯一约束,它的值必须唯一,不允许出现重复值 

域完整性

域完整性,它是为保证数据表中的值,准确、有效

通过下列约束,可以实现域完整性:

  • 非空约束 not null
  • 默认值约束 default
  • 检查约束 check

注意:mysql有检查约束,但是执行过程中,系统会忽略

在sqlserver和oracle中,检查约束会起作用

检查约束

  • score number(11) check (score between 0 and 100)
  • age number(11) check (age between 1 and 120)
  • gender char(3) check (gender='男' or gender='女'),

检查约束还可以判断,数据是否满足某一种数据格式(使用正则表达式进行验证)

  • tel varchar2(20) check (regexp_like(tel,'^1(3|5|7|8|9)[0-9]{9}$|^[0-9]{3}-[0-9]{8}$|^[0-9]{4}-[0-9]{7,8}$'))

程序:如果仅仅是前端验证是可以绕过去的,如果仅仅后台验证,也可以绕过去

实际应用: 前端验证+后台验证

在正则表达式中: 

  • ^:表达式的开始
  • $:表达式的结束

数据库中的正则表达式

  • [0-9]--------表示1个数字
  • [3-8]--------表示3-8之间的一个数字
  • [0-9]{3}-----表示3位数字
  • [0-9]{3,4}---表示3-4位数字
  • (3|5|7|9)----表示3,5,7,9中的任意一个数字
  • [a-z]--------表示一个小写母
  • [A-Z]--------表示一个大写字母
  • [a-z]{3}-----表示3个小写字母
^1(3|5|7|8|9)[0-9]{9}$         13123456789

^[0-9]{3}-[0-9]{8}$          027-12345678

^[0-9]{4}-[0-9]{7,8}$   0755-12345678   0710-1234567

引用完整性

目的:外键表引用的数据,在主键表中是存在的

通过下列约束,可以实现引用完整性:

外键约束  foreign key

mysql建立外键的语法:


                CREATE TABLE city 
                (
                    cid INT PRIMARY KEY,
                    cname VARCHAR(20),
                    pid INT,
                    FOREIGN KEY (pid) REFERENCES province(pid)  #创建外键
                )

oracle建立外键的语法:
              

 CREATE TABLE city 
                (
                    cid number(11) PRIMARY KEY,
                    cname VARCHAR2(20),
                    pid number,
                    FOREIGN KEY (pid) REFERENCES province(pid)  --创建外键
                )
或者是下面这种写法:
                CREATE TABLE city 
                (
                    cid number(11) PRIMARY KEY,
                    cname VARCHAR2(20),
                    pid number references province(pid)
                )

在oracle中,创建约束有两种方式:

方式1:创建表的时候,指定约束

        create table student
        (
               sid number(11) primary key,--主键约束
               sname varchar2(20) not null,--非空约束
               gender char(3) check (gender='男' or gender='女'),--检查约束
               idCard char(18) unique,--唯一约束
               className varchar(20) default 'D91', --默认值约束
               city number(11) references city(cid) --外键约束
        )

方式2:先建表,再添加约束    

---修改表结构,添加约束

        --修改tid,将类型改变number,同时添加主键约束
        alter table teacher modify tid number(11) primary key

        --将tname修改为varchar2
        alter table teacher modify tname varchar2(20)

        --添加检查约束
        alter table teacher modify gender char(3) check(gender='男' or gender='女');

        --添加新字段
        alter table teacher add age number(11) check (age between 1 and 120)

        --删除字段
        alter table teacher drop column other;

        --添加电话号码并且设置检查约束
        alter table teacher  add tel varchar2(20) check (regexp_like(tel,'^1(3|5|7|8|9)[0-9]{9}$|^[0-9]{3}-[0-9]{8}$|^[0-9]{4}-[0-9]{7,8}$'));

        ---添加外键约束 
        alter table teacher add city number(11) references province(pid)

 

你可能感兴趣的:(数据库)