1. Oracle体系结构

1.1 数据库

  Oracle数据库是数据的物理存储。这就包括(数据文件ORA或者DBF、控制文件、联机日志、参数文件)。可以看作是Oracle就只有一个大数据库。

1.2 实例

  一个Oracle实例(Oracle Instance)由一系列的后台进程(Background Processes)和内存结构(Memory Structures)组成。一个数据库可以有n个实例。

1.3 用户

  用户是在实例下建立的。不同实例可以建相同名字的用户。

  Oracle管理表的基本单位是用户。

1.4 表空间(Oracle数据库的逻辑单元)

  表空间是Oracle对物理数据库上相关数据文件(ORA或者DBF文件)的逻辑映射。一个数据库在逻辑上被划分为一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为system表空间)。

  每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件。一个数据文件只能属于一个表空间。

1.5 数据文件(dbf、ora)

  数据文件是数据库的物理存储单位。一个数据文件只能属于一个表空间,而一个表空间可以由一个或多个数据文件组成。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。

  表的数据,是由用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或多个数据文件中。Oracle是由用户和表空间对数据进行管理和存放的,表是由用户去查的,因为不同用户可以在同一个表空间建立同一个名字的表,所以这里就是由用户来区分了。

2. Oracle的基本操作

2.1 创建表空间

  一个数据库下可以建立多个表空间,一个表空间可以建立多个用户,一个用户下可以建立多个表。

create tablespace itcast -- 表空间名称
datafile 'd:\itcast.dbf' --指定表空间对应的数据文件
size 100m --定义的是表空间的初始大小
autoextend on --自动增长,当表空间存储都占满时,自动增长
next 10m --一次自动增长的大小

2.2 用户

(1)创建用户

create user willncy
identified by willncy -- 用户密码
default tablespace itcast --表空间名称
-- oracle数据库与其他数据库产品的区别在于,表和其他的数据库对象都是存储在用户下的。

(2)给用户赋权限

  新创建的用户没有任何权限,登录后会提示

 oracle中已存在三个重要的角色:connect角色,resource角色,dba角色。

CONNECT 角色: --是授予最终用户的典型权利,最基本的
ALTER SESSION --修改会话
CREATE CLUSTER --建立聚簇
CREATE DATABASE LINK --建立数据库链接
CREATE SEQUENCE --建立序列
CREATE SESSION --建立会话
CREATE SYNONYM --建立同义词
CREATE VIEW --建立视图

RESOURCE 角色: --是授予开发人员的
CREATE CLUSTER --建立聚簇
CREATE PROCEDURE --建立过程
CREATE SEQUENCE --建立序列
CREATE TABLE --建表
CREATE TRIGGER --建立触发器
CREATE TYPE --建立类型

DBA 角色:拥有全部特权,是系统最高权限,只有 DBA 才可以创建数据库结构,并且系统权限也需要 DBA 授出,且 DBA 用户可以操作全体用户的任意基表,包括删除
-- 进入system用户下给新建的用户赋予dba权限:
grant dba to willncy;

3. Oracle数据类型

 4. 表的管理

4.1 建表

CREATE TABLE 表名(
字段1 数据类型 [default 默认值],
字段2 数据类型 [default 默认值],
...
字段n 数据类型 [default 默认值]
);

如:
CREATE TABLE person(
   pid number(10),
   name varchar2(10),
   gender number(1),
   birthday date
);

4.2 表的删除

DROP TABLE 表名;

4.3 表的修改

添加语法:
ALTER TABLE 表名称 ADD (列名1 类型 [DEFAULT 默认值], 列名2 类型  [DEFAULT 默认值]...)

修改语法
ALTER TABLE 表名称 MODIFY(列名1 类型 [DEFAULT 默认值], 列名2 类型  [DEFAULT 默认值]...)

修改列名
ALITER TABLE 表名称 RENAME 列名1 TO 列名2;

4.4 数据库表数据的更新

(1)INSERT

标准写法
INSERT INTO 表名(列名1,列名2...) values (值1,值2...);
简单写法--这种写法必须按照表中的字段顺序来插入值,如果有为空的字段使用null
INSERT INTO 表名 values (值1,值2...);
如:insert into person(pid,name,gender,birthday) values (1,'玉米糕',1,to_date('1992-03-23','yyyy-MM-dd'));

(2)UPDATE 

全局修改
UPDATE 表名 SET 列名1=值1,列名2=值2...
局部修改
UPDATE 表名 SET 列名1=值1,列名2=值2... WHERE 修改条件;

(3)DELETE

-- 删除表中全部记录
-- (能够快速恢复和选择删除,但是速度慢)
DELETE FROM 表名 WHERE 删除条件;

-- 删除表结构
DROP TABLE 表名;

-- 先删除表,再次创建表。效果等同于删除表中全部记录。但是在数据量大的情况下,尤其表中带有索引的情况下,该操作效率高。
--(速度快,但是不能按条件删除,删除不能恢复)
truncate table 表名;

提交事务:commit;
回滚事务: rollback;

5. 序列

CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/MINVALUE n | NOMAXVALUE}]
[{CYCLE | NOCYCLE}]
[{CACHE n | NOCACHE}];

-- 序列创建完成之后,所有的自动增长应该由用户自己处理,所以在序列中提供了以下的两种操作:
nextval :取得序列的下一个内容
currval :取得序列的当前内容

如:CREATE SEQUENCE seq_person;
      SELECT seq_person.nextval from dual;--dual只是为了满足语法的虚拟中间表名
      SELECT seq_person.currval from dual;
在插入数据时,主键可以这样使用:
INSERT INTO person values(seq_person.nextval,'miko','1',to_date('1992-03-23','yyyy-MM-dd'));
  在实际项目中每一张表会配一个序列,但是表和序列是没有必然的联系的,一个序列被哪一张表使用都可以,但是我们一般都是一张表用一个序列。
12-16 16:21
查看更多