Oracle基础以及一些‘方言’(一)

1、什么是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语句:
```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;
```
  • 解释:
```bash
sql50             为表空间名称
datafile          用于设置物理文件名称
size              用于设置表空间的初始大小
autoextend on     用于设置自动增长,如果存储量超过初始大小,则开始自动扩容
next              用于设置扩容的空间大小
```

创建用户

  • SQL语句:
```sql
--1、查看当前所有用户
select username from all_users;

--2、创建新用户
create user sql50_user
identified by 123456
default tablespace sql50;
```
  • 解释:
```sql
sql50_user            为创建的用户名。
identified by         用于设置用户的密码
default tablesapce    用于指定默认表空间名称
```

用户赋权

  • SQL语句:
```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;
```
  • 解释:
```sql
系统权限:控制用户对数据库的整体访问,如CREATE SESSION(创建会话)、CREATE TABLE(创建表)等
对象权限:控制用户对特定数据库对象(如表、视图、序列等)的访问,如SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)等
如果需要授予多个权限,可以在一个GRANT语句中列出所有权限,或使用多个GRANT语句。
```
  • 注意事项:
    • 权限最小化原则:为了避免安全风险,建议只授予用户所需的最小权限。
    • 权限撤销:如果需要撤销用户的权限,可以使用REVOKE语句,语法与GRANT相似,但关键字为REVOKE。
    • 权限传递:Oracle还支持权限的传递,即用户A可以将权限授予用户B,用户B又可以将权限授予用户C,但需要注意权限传递的限制和安全性问题。
    • 角色管理:Oracle中的角色是权限的集合,可以将一组权限授予一个角色,然后将角色授予多个用户,从而简化权限管理。

5、Oracle语法之DML操作:表的创建、修改与删除

创建表

  • SQL语法:

```sql
​
CREATE TABLE table_name (
    column1 datatype [DEFAULT expression] [constraint],
    column2 datatype [DEFAULT expression] [constraint],
    ...
);
```
  • 解释:

```sql
table_name:表的名称。
column1, column2, ...:列的名称。
datatype:列的数据类型,如 VARCHAR2, NUMBER, DATE 等。
DEFAULT expression:为列指定默认值。
constraint:为列添加约束,如 PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK 等。
```
  • 数据类型:

```sql
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
```
  • 实例:

```sql
-- 创建 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)
);
```
  • 注意:如果需要给表添加注释,需要额外的语句实现

修改表

#### **增加字段**

* 增加字段语法:

*

  ```sql
  ALTER TABLE 表名称  ADD(列名1  类型  [DEFAULT  默认值],列名2  类型 [DEFAULT  默认值]...)
  ```

* 示例:

*

  ```sql
  -- 我们给学生表中添加身高和体重两个字段
  ALTER TABLE student ADD
  (
      s_height number,
      s_weight number
  );
  ```
#### 修改字段

* 修改字段语法:

*

  ```sql
  ALTER TABLE 表名称 MODIFY(
      列名1  类型  [DEFAULT  默认值],
      列名2  类型 [DEFAULT  默认值]...
  );
  ```

* 示例:
*

  ```sql
  -- 这是修改字段的示例
  ```
#### 修改字段名

* 修改字段名语法:

*

  ```sql
  ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名;
  ```

* 示例:

*

  ```sql
  -- 这是修改字段名示例
  ```
#### 删除字段名

* 删除字段名语法:

*

  ```sql
  -- 删除一个字段
  alter table 表名称 drop column 列名;

  -- 删除多个字段
  alter table 表名称 drop (列名1, 列名2 ...);
  ```

* 示例:

*

  ```sql
  -- 这是删除字段名的示例
  ALTER TABLE student DROP
  (
      s_height,
      s_weight
  );
  ```

删除表

  • SQL语法:
```sql
DROP TABLE 表名;
```
相关推荐
python资深爱好者2 分钟前
NoSQL数据库与关系型数据库的主要区别
数据库·oracle·nosql
sj11637394037 分钟前
Kafka参数了解
数据库·分布式·kafka
给我整点护发素27 分钟前
Flink执行sql时报错
大数据·sql·flink
日里安1 小时前
8. 基于 Redis 实现限流
数据库·redis·缓存
EasyCVR2 小时前
ISUP协议视频平台EasyCVR视频设备轨迹回放平台智慧农业视频远程监控管理方案
服务器·网络·数据库·音视频
Elastic 中国社区官方博客2 小时前
使用真实 Elasticsearch 进行更快的集成测试
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·集成测试
明月与玄武3 小时前
关于性能测试:数据库的 SQL 性能优化实战
数据库·sql·性能优化
网安_秋刀鱼3 小时前
PHP代码审计 - SQL注入
sql·web安全·网络安全·php·1024程序员节
PGCCC4 小时前
【PGCCC】Postgresql 存储设计
数据库·postgresql
PcVue China6 小时前
PcVue + SQL Grid : 释放数据的无限潜力
大数据·服务器·数据库·sql·科技·安全·oracle