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'));