Oracle数据库复习

第二章

物理存储结构 :每一个数据库主要包括四种类型文件:数据文件(dbf)、日志文件(log)、控制文件(ctl)、初始化参数文件(spfile.ora)

逻辑存储结构 :表空间、段、盘区、数据块

表空间是数据库中最大的的逻辑存储结构 。逻辑结构上的表空间与物理结构上的数据文件是有关联的:数据库中的表空间至少包含一个或多个数据文件,而一个数据文件只能属于一个表空间。这种关联实现了数据块的逻辑结构和物理结构的统一。

段:一个表空间被分成多个段,一个段有可以被分成若干个盘区。

盘区:逻辑存储结构中的一个重要概念,是Oracle最小的磁盘分配单元。

数据块:是Oracle最小的逻辑存储单元,是最基本的数据存取单位。

2.3.1进程结构

1.用户进程

2.服务进程

   用户进程和服务进程之间的对应关系是由Oracle的工作模式决定的,数据库通常有两种工作模式:专用服务器模式和共享服务器模式。

  (1)专用服务器模式:用户创建Oracle数据块是的,默认方式,也是多数数据库管理员运行数据库的方式,他为用户进程和服务进程提供了一对一的映射关系

  (2)共享服务器模式:数据库启动时创建几个共享的服务进程,这些进程可以为多个用户提供服务,他们之间是一对多的关系。

3.后台进程

2.3.2 内存结构

   1.系统全局区(SGA)

   SGA是所有Oracle进程都能访问的一组内存区域的集合,包含了Oracle服务进程的数据和控制信息。

     数据缓存区、重做日志缓冲区、共享池、java池、大型池

2.程序全局区

 PGA是提供各付存储自己的数据及控制信息的内存区域,与SGA相比,PGA是私有的。

2.4 网络配置文件

  1. sqlnet.ora

    指定数据库链接账号的验证方式以及链接字符串的解析方式。

  2. tnsnames.ora

    客户端链接远程主机服务器的主机字符串。

  3. listener.ora

    作用于Oracle数据库服务端是Oracle监听服务的配置文件。

第三章

3.1.1 用户与方案的概念

  1. 用户:Oracle通俗的讲就是访问数据库的人。每个用户都有口令和相应权限,使用正确的用户名和口令才能进入数据库进行数据的存取操作。

    2.方案:方案是一切逻辑数据结构或对象的集合。一个方案能被一个数据库用户拥有,并且方案的名称和这个用户的名称相同,当用户创建时,这个用户的方案也会被创建。Oracle中的方案是对数据库的局部逻辑描述。

    同一个方案中不能存在相同的表,但是可以在不同方案中有相同名字的表,只需要在使用时用方案名.表名就可以了。

3.1.2 方案对象与非方案对象

**方案对象** :是指属于某个方案中的数据库对象。Oracle中方案对象有:表、索引、索引表、簇、触发器、PL/SQl包、序列、同义词、视图、存储函数与存储过程、JAVA类与其他java资源。

**非方案对象** :有些数据库数据对象不属于任何方案,而属于整个数据库,这些对象被称为非方案对象。非方案对象有:表空间、用户、角色、回退段、概要文件。

3.2.2 用户创建

创建有个名为hbq密码为123456的用户

CREATE USER hbq IDENTIFIED BY 123456;

创建名为hbq密码为123456表空间名为users表空间大小为10m的用户。

CREATE USER hbq IDENTIFIED BY 123456

DEFAULT TABLESPACE users

QUOTA 10M ON users ;

创建名为 hbq 密码为123456 密码为过期并且状态为锁的用户:
CREATE USER hbq IDENTIFIED BY 123456

PASSWORD expire

ACCOUNT lock;

给hbq授予数据库系统会话权(系统管理员): GRANT CREATE SESSION TO hbq;

给hbq授予数据库链接角色: GRANT CONNECT TO hbq;

用hbq链接数据库: CONNECT hbq/123456;

3.3.2 修改用户

1.修改hbq的密码为123,并开启无限大用户空间

    ALTER USER hbq

IDENTIFIED BY 123

DEFAULT TABLESPACE users

QUOTA UNLIMITED ON users;

2.禁用用户hbq: **ALTER USER hbq ACCOUNT LOCK;**

启用用户hbq: ALTER USER hbq ACCOUNT UNLOCK;

连接hbq; CONNECT hbq/123;

3.删除用户hbq: DROP USER hbq;
  1. 第四章表的创建与管理

4.1 创建表

4.1.1 基本数据类型: 字符(char)、数值(NUMBER)、日期(DATE)、LOB(非结构化数据)、ROWID (表中每条记录的物理地址)

  1. char:char、nchar、long、varchar2、nvarchar2(加n的为可以存储Unicode字符)
  2. Number:INTEGER、 INT、SMALLINT、FLOAT、REAL(NUMBER(p,s)p为精度,s为小数位数,如果不指定则为38位浮点数)
  3. DATE:可以用函数SYSDATE获得当前系统的时间。

4.LOB数据类型:BLOB(二进制大对象,可以存储视频、图像等)

CLOB(字符大对象)

BFILE(外部二进制文件)

4.1.3使用SQL创建表

在当前方案中创建一个名为student的表,包含学号(studentID)、姓名(name)、性别(sex)默认为'男'、出生日期(birthday)

CREATE TABLE student(

studentID   CHAR(6),

Name      VARCHAR(8),

Sex        CHAR(2) DEFAULT '男',

Birthday    DATE)

TABLESPACE users;

4.1.4 基于已有的表创建新表

将scott方案中的emp表复制到当前方案my\_emp表中

CREATE TABLE my_emp

AS SELECT * FROM scott.emp;

将部分列复制到新表中:

CREATE TABLE my_emp( e_number,e_name,e_job)

AS SELECT empno,ename,job FROM scott.emp;

4.1.6使用 DESC 命令查看表结构: DESC 表名;

4.2 向表中插入、修改删除数据

4.2.1插入数据

 1.插入单行数据

向student表中插入完整记录

INSERT INTO student

VALUES('20140816','姓名','男','2016-12-11');

可以只插入部分数据:

INSERT INTO student

VALUES('20140816','姓名',DEFAULT,NULL);

2.插入多行数据

从已有表中选择多行数据插入到表中

INSERT  INTO  表名

SELECT  \*  FROM  已有的表;

注:只有表结构相同才能这样插入,也可以插入部分数据。

4.2.2 修改数据(UPDATE)

1. 将emp表中的7296号员工的工作改为SALESMAN(假如员工都存在)

     UPDATE  scott.emp

     SET job = 'SALESMAN'

     WHERE eno = 7296;

2.将emp表中1235号员工工作改为1236号员工工作相同(假如员工都存在)

     UPDATE scott.emp

     SET job = (SELECT job FROM emp  WHERE eno =1236)

     WHERE eno = 1235;

3.将SALSMAN的工资都增长5%

     UPDATE scott.emp

     SET sal = sal +(sal\*0.05)

WHERE job = 'SALSMAN'

4.2.3 删除数据

   DELETE逻辑删除,可以回滚

   TRUNCATE 删除表,物理删除无法恢复

1.DELETE命令:删除工作为SALESMAN的雇员

  DELETE FROM scott.emp

  WHERE job = 'SALSMAN'

  删除后还可以使用命令回滚:ROLLBACK;

2. TRUNCATE   TABLE  表名;

   永久删除不能恢复

4.3 修改与删除表

4.3.1 修改表

     1. 向student表添加一列系sdept ,宿舍号flat

        ALTER TABLE student

        ADD ( sdept VARCHAR(20),flat CHAR(4) )

     2. 删除student表中的sdept列(仅删除一列)

        ALTER TABLE student

        DROP COLUMN sdept;

     3. 删除student中的sex 和flat列(删除多列)

        ALTER TABLE student

        DROP (sex,flat)

       注:删除一列和删除多列的语法不同

     4. 修改student表中的sdept字段长度为char (10)

        ALTER TABLE student

        MODIFY sdept CAHR(10);

        注:如果扩大长度没有任何限制,如果缩小长度,可变长度类型可以不可变长度比如 char 和 number 不可以缩小

     5. 修改sdept字段名为new\_sdept

       ALTER TABLE student

       RENAME COLUMN sdept TO new\_sdept;

     6. 将student表重名为new\_studnet

       ALTER TABLE student

       RENAME  TO new\_student;

     7. 删除表 :   DROP  表名;

4.4 定义数据完整性

数据完整性是指数据的正确性、一致性和安全性,他是衡量数据库中数据质量的好坏的重要标准。

为什么要定义数据完整性:在执行insert、delete、update时数据库的完整性可能会遭到破坏。比如:将无效的数据插入数据库或者将存在的数据修改为无效的数据,对数据库的修改不一致等。

约束是保证数据完整性的标准方法,主要包括:主键(PRIMARY KEY)约束、非空约束、唯一性约束、非空约束、检查约束、外键约束、

  1. 列级约束:如果约束作用在一列上那么就是列级约束。可以在创建时直接在后面写上列级约束。
  2. 表级约束:如果约束作用于多个字段那么就是表级约束。表级约束必须在定义完列字段后才能定义。

    约束可以在建表时定义也可以在建表后修改。

4.4.1 定义主键约束

  1. 创建表时定义主键约束

CREATE TABLE student (

**Stu\_ID CHAR(6) PRIMARY KEY,**①在定义字段后直接指定.自动生成约束名

**Stu\_ID CHAR(6) CONSTRAINT pk\_student PRIMARY KEY,**②指定主键名和主键

 Stu_nane CHAR(10),

Stu_sex CHAR(2)

)

③另起一行注明主键

CREATE TABLE student (

Stu_ID CHAR(6) ,

CONSTRAINT pk_student PRIMARY KEY(Stu_ID )** ,**

 Stu_nane CHAR(10),

Stu_sex CHAR(2),

PRIMARY KEY(Stu_ID )④最后边定义主键

)

  1. 用多个字段组成主键

    CONSTRAINT pk_student PRIMARY KEY(stu_id,stu_name);

  2. 为已经创建的表定义主键

    ALTER TABLE student

    ADD CONSTRAINT pk_student PRIMARY(stu_id);

  3. 删除主键约束

    ALTER TABLE student
    
    DROP CONSTRAINT pk\_student;
    

4.4.3 定义唯一性约束 UNIQUE

 一张表只能定义一个主键但是可以定义多个唯一性约束

UNIQUE约束允许在该列上有NULL而主键约束不可以。

①创建唯一性约束,只需在创建表时,在字段后加关键字UNIQUE。

②修改唯一性约束

 ALTER TABLE

 ADD CONSTRAINT un\_identity UNIQUE(字段名);

4.4.4 定义检查约束 CHECK

①比如:年龄在20-30之间的约束

age  NUMBER  CONSTRAINT  ck\_age  CHECK (age<30 and age>20);

②限制输入正确的系

dept  CHAR(10)   CONSTRAINT c k\_dept  CHECK  ( dept  IN ('软工','网工'));

4.4.5 外键约束

  定义外键约束

Dept_ID  INT  REFERENCES  department(Dept_ID);在后边定义

CONSTRAINT fk\_dept FOREIGN KEY(Dept_ID)

REFERENCES  department(Dept_ID);

  修改外键约束

   ALTER TABLE emplee

   ADD CONSTRAINT fk_dept FOREIGN KEY(Dept_ID)

   REFERENCES deptment(Dept_ID)
文章目录
  1. 1. 第二章
|