1、什么是Oracle
- ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。
ORACLE 通常应用于大型系统的数据库产品。
ORACLE 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。
英文官网:Database | Oracle
中文官网:数据库 | Oracle 中国
------ 来自百度百科
2、DB-Engines排名
3、ORACLE 体系结构
-
数据库
-
Oracle 数据库是数据的物理存储,是一组存储数据的文件。 这就包括(数据文件 ORA 或者 DBF、控制文件、联机日志、参数文件)。
-
其实 Oracle 数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是 Oracle 就只有一个全局的数据库,这一点和MySQL不太一样。
-
-
实例
- 一个Oracle 实例(Oracle Instance)有一系列的后台进程(Backguound Processes)和内存结构(Memory Structures)组成。是管理数据库文件的。一个数据库可以有 n 个实例。但通常情况下,一个实例对应一个数据库。
-
数据文件(dbf)
-
数据文件是数据库的物理存储单位。也就是说最终数据落到磁盘上是以文件形式存在的,这个文件就叫做数据文件,后缀名是dbf。
-
数据库的数据是存储在表空间中的,真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后, 就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。
-
-
表空间
-
表空间是 Oracle 对物理数据库上相关数据文件(ORA 或者 DBF 文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为 system 表空间)。
-
每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件(datafile)。一个数据文件只能属于一个表空间。表空间下还有进一步的逻辑划分。
-
由于 oracle 的数据库不是普通的概念,oracle 是有用户和表空间对数据进行 管理和存放的。但是表不是有表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!
-
注:表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。
-
-
用户
- 用户是在表空间下建立的。用户登陆后只能看到和操作自己的表, ORACLE的用户与 MYSQL 的数据库类似,每建立一个应用需要创建一个用户
- MySQL中是一个用户可以查看、管理操作多个数据库,不同的应用创建不同的数据库
- Oracle是一个数据库下可以创建不同的用户,每个用户可以操作属于自己的表。正好和MySQL的概念是反过来的
4、Oracle语法之DDL操作:创建表空间、用户以及用户赋权
-
创建表空间
- SQL语句:
-
--1、查看已有表空间的存储路径 select name from v$datafile; --2、创建表空间 create tablespace sql50 datafile '/home/app/oracle/oradata/orcl/sql50.dbf' size 100m autoextend on next 10m;
- 解释:
-
sql50 为表空间名称 datafile 用于设置物理文件名称 size 用于设置表空间的初始大小 autoextend on 用于设置自动增长,如果存储量超过初始大小,则开始自动扩容 next 用于设置扩容的空间大小
-
创建用户
- SQL语句:
-
--1、查看当前所有用户 select username from all_users; --2、创建新用户 create user sql50_user identified by 123456 default tablespace sql50;
- 解释:
-
sql50_user 为创建的用户名。 identified by 用于设置用户的密码 default tablesapce 用于指定默认表空间名称
-
用户赋权
- SQL语句:
-
-- 给用户赋予dba权限 grant dba to sql50_user; -- 给用户对某个表(table_name)的select权限: grant select on table_name to sql50_user; -- 授予创建会话权限 grant create session to sql50_user; -- 授予使用表空间的权限(这里假设表空间名为sql50) grant unlimited sql50 to sql50_user; -- 授予对teachers表的SELECT和INSERT权限 grant select, insert on teachers to sql50_user; -- 提交更改 COMMIT;
- 解释:
-
系统权限:控制用户对数据库的整体访问,如CREATE SESSION(创建会话)、CREATE TABLE(创建表)等 对象权限:控制用户对特定数据库对象(如表、视图、序列等)的访问,如SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)等 如果需要授予多个权限,可以在一个GRANT语句中列出所有权限,或使用多个GRANT语句。
- 注意事项:
- 权限最小化原则:为了避免安全风险,建议只授予用户所需的最小权限。
- 权限撤销:如果需要撤销用户的权限,可以使用REVOKE语句,语法与GRANT相似,但关键字为REVOKE。
- 权限传递:Oracle还支持权限的传递,即用户A可以将权限授予用户B,用户B又可以将权限授予用户C,但需要注意权限传递的限制和安全性问题。
- 角色管理:Oracle中的角色是权限的集合,可以将一组权限授予一个角色,然后将角色授予多个用户,从而简化权限管理。
5、Oracle语法之DML操作:表的创建、修改与删除
-
创建表
-
SQL语法:
-
CREATE TABLE table_name ( column1 datatype [DEFAULT expression] [constraint], column2 datatype [DEFAULT expression] [constraint], ... );
-
解释:
-
table_name:表的名称。 column1, column2, ...:列的名称。 datatype:列的数据类型,如 VARCHAR2, NUMBER, DATE 等。 DEFAULT expression:为列指定默认值。 constraint:为列添加约束,如 PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK 等。
-
数据类型:
-
1. 字符型 (1)CHAR : 固定长度的字符类型,最多存储 2000 个字节 (2)VARCHAR2 :可变长度的字符类型,最多存储 4000 个字节 (3)LONG : 大文本类型。 最大可以存储 2 个 G 2.数值型 NUMBER : 数值类型 例如:NUMBER(5) 最大可以存的数为 99999 NUMBER(5,2) 最大可以存的数为 999.99 3.日期型 (1)DATE:日期时间型,精确到秒 (2)TIMESTAMP:精确到秒的小数点后 9 位 4.二进制型(大数据类型) (1)CLOB : 存储字符,最大可以存 4 个 G (2)BLOB:存储图像、声音、 视频等二进制数据,最多可以存 4 个 G
-
实例:
-
-- 创建 Student 学生表 CREATE TABLE Student ( s_id VARCHAR(20), s_name VARCHAR(20) NOT NULL, s_birth VARCHAR(20) NOT NULL, s_sex VARCHAR(10) NOT NULL, PRIMARY KEY(s_id) ); -- 创建 Course 课程表 CREATE TABLE Course ( c_id VARCHAR(20), c_name VARCHAR(20) NOT NULL, t_id VARCHAR(20) NOT NULL, PRIMARY KEY(c_id) );
- 注意:如果需要给表添加注释,需要额外的语句实现
-
-
修改表
-
增加字段
-
增加字段语法:
-
ALTER TABLE 表名称 ADD(列名1 类型 [DEFAULT 默认值],列名2 类型 [DEFAULT 默认值]...)
-
示例:
-
-- 我们给学生表中添加身高和体重两个字段 ALTER TABLE student ADD ( s_height number, s_weight number );
-
-
修改字段
-
修改字段语法:
-
ALTER TABLE 表名称 MODIFY( 列名1 类型 [DEFAULT 默认值], 列名2 类型 [DEFAULT 默认值]... );
- 示例:
-
-- 这是修改字段的示例
-
-
修改字段名
-
修改字段名语法:
-
ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名;
-
示例:
-
-- 这是修改字段名示例
-
-
删除字段名
-
删除字段名语法:
-
-- 删除一个字段 alter table 表名称 drop column 列名; -- 删除多个字段 alter table 表名称 drop (列名1, 列名2 ...);
-
示例:
-
-- 这是删除字段名的示例 ALTER TABLE student DROP ( s_height, s_weight );
-
-
-
删除表
- SQL语法:
-
DROP TABLE 表名;