插件窝 干货文章 oracle数据库入门教程

oracle数据库入门教程

Oracle salary employees 数据库 330    来源:    2025-03-30

Oracle数据库入门教程

一、Oracle数据库简介

Oracle数据库是由Oracle公司开发的关系型数据库管理系统(RDBMS),是企业级应用中最流行的数据库之一。它具有以下特点: - 高可用性 - 强大的数据安全功能 - 优秀的性能 - 跨平台支持 - 丰富的功能集

二、安装Oracle数据库

Windows环境安装

  1. 从Oracle官网下载相应版本的安装包
  2. 运行安装程序,选择"创建和配置数据库"
  3. 按照向导完成安装,设置SYS和SYSTEM用户密码
  4. 完成安装后,可以使用SQL*Plus或Oracle SQL Developer连接数据库

Linux环境安装

# 下载Oracle安装包
# 解压安装包
unzip oracle-database-ee-19c-1.0-1.x86_64.rpm.zip

# 安装依赖
yum install -y oracle-database-preinstall-19c

# 安装Oracle
rpm -ivh oracle-database-ee-19c-1.0-1.x86_64.rpm

# 配置数据库
/etc/init.d/oracledb_ORCLCDB-19c configure

三、基本概念

  1. 实例(Instance): Oracle的运行环境,包括内存结构和后台进程
  2. 数据库(Database): 物理文件的集合,包含数据文件、控制文件和重做日志文件
  3. 表空间(Tablespace): 数据库的逻辑存储单元
  4. 用户(User): 数据库的账户,拥有特定的权限
  5. 模式(Schema): 用户拥有的数据库对象集合

四、SQL*Plus基础

SQL*Plus是Oracle提供的命令行工具,用于与数据库交互。

连接数据库

sqlplus username/password@hostname:port/service_name

常用命令

-- 显示当前用户
SHOW USER;

-- 执行SQL脚本
@script_name.sql

-- 设置显示格式
SET LINESIZE 200;
SET PAGESIZE 100;

-- 查看表结构
DESC table_name;

五、SQL基础

数据定义语言(DDL)

-- 创建表
CREATE TABLE employees (
    emp_id NUMBER PRIMARY KEY,
    emp_name VARCHAR2(100) NOT NULL,
    hire_date DATE,
    salary NUMBER(10,2),
    dept_id NUMBER
);

-- 创建索引
CREATE INDEX idx_emp_name ON employees(emp_name);

-- 修改表结构
ALTER TABLE employees ADD (email VARCHAR2(100));

-- 删除表
DROP TABLE employees;

数据操作语言(DML)

-- 插入数据
INSERT INTO employees VALUES (1, '张三', TO_DATE('2020-01-15', 'YYYY-MM-DD'), 5000, 10);

-- 更新数据
UPDATE employees SET salary = 5500 WHERE emp_id = 1;

-- 删除数据
DELETE FROM employees WHERE emp_id = 1;

数据查询语言(DQL)

-- 基本查询
SELECT * FROM employees;

-- 条件查询
SELECT emp_name, salary FROM employees WHERE salary > 4000;

-- 排序
SELECT * FROM employees ORDER BY salary DESC;

-- 分组
SELECT dept_id, AVG(salary) FROM employees GROUP BY dept_id;

-- 连接查询
SELECT e.emp_name, d.dept_name 
FROM employees e JOIN departments d ON e.dept_id = d.dept_id;

六、PL/SQL基础

PL/SQL是Oracle的过程化SQL语言扩展。

基本结构

DECLARE
    -- 变量声明
    v_name VARCHAR2(100);
    v_salary NUMBER;
BEGIN
    -- 执行语句
    SELECT emp_name, salary INTO v_name, v_salary
    FROM employees WHERE emp_id = 1;

    DBMS_OUTPUT.PUT_LINE('员工姓名: ' || v_name || ', 薪资: ' || v_salary);
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE('没有找到员工记录');
END;
/

存储过程

CREATE OR REPLACE PROCEDURE update_salary(
    p_emp_id IN NUMBER,
    p_amount IN NUMBER
) AS
BEGIN
    UPDATE employees 
    SET salary = salary + p_amount
    WHERE emp_id = p_emp_id;

    COMMIT;
    DBMS_OUTPUT.PUT_LINE('薪资更新成功');
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        DBMS_OUTPUT.PUT_LINE('错误: ' || SQLERRM);
END;
/

函数

CREATE OR REPLACE FUNCTION get_avg_salary(
    p_dept_id IN NUMBER
) RETURN NUMBER AS
    v_avg_salary NUMBER;
BEGIN
    SELECT AVG(salary) INTO v_avg_salary
    FROM employees
    WHERE dept_id = p_dept_id;

    RETURN v_avg_salary;
END;
/

触发器

CREATE OR REPLACE TRIGGER trg_emp_salary
BEFORE UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
    IF :NEW.salary < :OLD.salary THEN
        RAISE_APPLICATION_ERROR(-20001, '薪资不能减少');
    END IF;
END;
/

七、数据库管理基础

用户管理

-- 创建用户
CREATE USER testuser IDENTIFIED BY password;

-- 授予权限
GRANT CONNECT, RESOURCE TO testuser;

-- 修改密码
ALTER USER testuser IDENTIFIED BY newpassword;

-- 锁定/解锁用户
ALTER USER testuser ACCOUNT LOCK;
ALTER USER testuser ACCOUNT UNLOCK;

表空间管理

-- 创建表空间
CREATE TABLESPACE ts_data
DATAFILE '/path/to/datafile.dbf' SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 1G;

-- 扩展表空间
ALTER TABLESPACE ts_data
ADD DATAFILE '/path/to/new_datafile.dbf' SIZE 50M;

-- 查看表空间使用情况
SELECT tablespace_name, bytes/1024/1024 MB
FROM dba_free_space;

八、备份与恢复

导出(EXPDP)

expdp username/password@db_name dumpfile=expdat.dmp logfile=expdat.log schemas=schema_name

导入(IMPDP)

impdp username/password@db_name dumpfile=expdat.dmp logfile=impdat.log schemas=schema_name

RMAN备份

-- 连接到RMAN
rman target /

-- 完整备份
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

-- 恢复
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE;

九、性能优化基础

  1. 索引优化

    • 为常用查询条件创建索引
    • 避免在索引列上使用函数
    • 定期重建碎片化严重的索引
  2. SQL优化

    • 使用EXPLAIN PLAN分析执行计划
    • 避免使用SELECT *
    • 使用绑定变量减少硬解析
  3. 统计信息收集

-- 收集表统计信息
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA_NAME', 'TABLE_NAME');

十、学习资源推荐

  1. Oracle官方文档: https://docs.oracle.com/en/database/
  2. Oracle Live SQL: https://livesql.oracle.com/
  3. Oracle社区: https://community.oracle.com/
  4. 书籍:《Oracle Database 12c SQL》、《Oracle PL/SQL编程》

通过本教程,您已经了解了Oracle数据库的基础知识。要成为Oracle专家,还需要不断实践和学习高级主题,如RAC、Data Guard、性能调优等。