第二章
物理存储结构 :每一个数据库主要包括四种类型文件:数据文件(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 网络配置文件
sqlnet.ora
指定数据库链接账号的验证方式以及链接字符串的解析方式。
tnsnames.ora
客户端链接远程主机服务器的主机字符串。
listener.ora
作用于Oracle数据库服务端是Oracle监听服务的配置文件。
第三章
3.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;
- 第四章表的创建与管理
4.1 创建表
4.1.1 基本数据类型: 字符(char)、数值(NUMBER)、日期(DATE)、LOB(非结构化数据)、ROWID (表中每条记录的物理地址)
- char:char、nchar、long、varchar2、nvarchar2(加n的为可以存储Unicode字符)
- Number:INTEGER、 INT、SMALLINT、FLOAT、REAL(NUMBER(p,s)p为精度,s为小数位数,如果不指定则为38位浮点数)
- 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)约束、非空约束、唯一性约束、非空约束、检查约束、外键约束、
- 列级约束:如果约束作用在一列上那么就是列级约束。可以在创建时直接在后面写上列级约束。
表级约束:如果约束作用于多个字段那么就是表级约束。表级约束必须在定义完列字段后才能定义。
约束可以在建表时定义也可以在建表后修改。
4.4.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 )④最后边定义主键
)
用多个字段组成主键
CONSTRAINT pk_student PRIMARY KEY(stu_id,stu_name);
为已经创建的表定义主键
ALTER TABLE student
ADD CONSTRAINT pk_student PRIMARY(stu_id);
删除主键约束
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)