Oracle数据库的使用及说明介绍Linux

来源:这里教程网 时间:2026-03-09 10:12:16 作者:
一、Oracle数据库介绍二、Oracle的简单架构Oracle的特别之处什么是实例Oracle只能有一个数据库吗?三、Oracle如何解决数据库的安全机制问题?1、MySQL的权限控制逻辑2、Oracle的权限控制逻辑:单数据库多租户(1)授权结构(2)Oracle的权限设置(3)MySQL和Oracle的对比四、Oracle的安装配置1、Oracle版本2、安装环境3、Oracle安装安装预安装包安装Oracle数据库主程序初始化Oracle数据库配置环境变量手动创建 systemd 服务文件开启数据库服务验证是否初始化成功管理Oracle服务安装完成五、Oracle的常用语法Oracle的操作技巧(命令行)【1】Oracle清屏命令【2】自定义方向键【3】Oracle自带的历史命令Oracle常用查询连接命令查看 Oracle 数据库的参数配置查看当前登录用户创建用户切换用户删除用户创建表,默认属于当前用户表中插入值删除表查看表查看表结构查看其他用户的表查看数据库已有用户查看表的完整信息查看当前的Oracle数据库Oracle的表内容查询语句总览补充内容:国内外的数据库版本总结

一、Oracle数据库介绍

Oracle 数据库是全球最主流的企业级关系型数据库管理系统(RDBMS)之一,由美国甲骨文(Oracle)公司开发,以稳定性强、功能全面、支持高并发和复杂业务场景而闻名。

Oracle 数据库被研发出来的初衷是开发一种关系型数据库管理系统(RDBMS),以提供高效、可靠的数据存储和检索能力,同时确保数据的完整性和安全性。

系型数据库管理系统(RDBMS):用 “表格(行和列)” 来组织数据,并用 “关系”(如主键、外键)关联不同表格的数据库管理软件。有关联的表A和表B同时改变,适用大多数生活场景,比如扣款和到账同时成功或者失败。

特点:

(1)高可用性:支持RAC实时应用集群(支持分布式数据处理)

(2)业务与安全能力强大

(3)多场景适配:兼具 OLTP(在线事务处理)和 OLAP(在线分析处理)能力

(4)跨平台兼容性:可运行于 Windows、Linux、Unix 等多种操作系统,支持 x86、ARM 等不同架构服务器;同时兼容 SQL 标准,能与 Java、Python 等主流开发语言及各类企业级应用无缝集成。

二、Oracle的简单架构

Oracle的特别之处

在Oracle的典型架构中,一个实例(Instance)通常挂载并管理一个数据库(Database)。对比之下MySQL是一个实例管理多个数据库,更接近数据仓库管理的感觉。

什么是实例

可以简单的将实例理解为进程加涉及的其他的资源(比如说内存资源,磁盘空间),在该运行环境内只允许有一个数据库。是Oracle数据库运行的载体。数据库指的就是磁盘上的物理文件的集合(比如说数据文件,日志文件,控制文件等组合使用的实际文件),是数据的实际存储载体。

前面提到过的RAC集群有一点不同,这里是多个实例共享一个数据库。

Oracle只能有一个数据库吗?

实际上是默认1个数据库,但是可以多实例对应多个独立的Oracle数据库。只是它创建多个数据库不像MySQL那样简单。

Oracle的端口号:1521

MySQL和Oracle的区别:

尝试对比MySQL和Oracle来学习Oracle的特别之处。

(1)Oracle新建数据库不同于MySQL新建数据库

在Oracle中,创建一个新的、独立的数据库环境,这个过程称为 “数据库创建(Database Creation)” 。会为它创建一个专属的 “实例”(独立的进程和内存空间,比如第二个实例叫 ORCL2)。而 MySQL 新建数据库,只是在现有实例的目录下新建一个 “文件夹”,不需要额外分配进程和内存 。

所以感觉上就像MySQL创建不同数据库就是在一张A4纸上划了一根线分出一块来,就创建了一个数据库。就是一个实例对应N个逻辑数据库,Oracle是一张纸就是一个数据库,创建新的数据库需要新的纸,就是一个物理数据库对应1个实例。这样分配独立的资源,在安全性和隔离性上来看,Oracle的会更强一些。当然这个例子并不能代表MySQL的存储上限就比Oracle的小。MySQL的单张纸也可以很大,Oracle的多张纸也可以很小,两者的存储上限和性能差异主要取决于涉及的目标。

三、Oracle如何解决数据库的安全机制问题?

虽然Oracle一个实例对应一个数据库,但是Oracle会通过逻辑隔离和精细化权限控制来保证数据的安全。

同样使用MySQL和Oracle的例子来举例。

1、MySQL的权限控制逻辑

授权结构:数据库用户--->数据库--->数据库下的表

数据库用户只可以使用被授权过的数据库和数据库下的表。例如:fruit数据库下的apple表对A用户授权,那么A用户就可以使用fruit数据库下的apple表,其他的表它便不可使用。如果fruit数据库授权A用户使用库下的所有表,那么A用户就可以全部使用。(grant all on fruit.* to A@'loaclhost' indentified by '123')。

MySQL中不同数据库之间的权限隔离,不同数据库的权限设置不相互影响。

2、Oracle的权限控制逻辑:单数据库多租户

(1)授权结构

通过表空间(Tablespace)用户 Schema 实现逻辑隔离,效果类似 MySQL 的 “多数据库”,但更灵活。Oracle的权限体系极其精细,避免单个用户删除库的风险。

    表空间(物理隔离)数据库的物理文件被划分为多个表空间,不同用户的数据可存储在不同表空间中(如财务数据在FIN_TBS,人事数据在HR_TBS)。即使某个表空间损坏,其他表空间的数据不受影响。

    用户 Schema(逻辑隔离)每个用户默认拥有一个同名的 “Schema(模式)”,用户创建的表、视图等对象默认属于自己的 Schema。

例如:用户USER_A创建的表实际是USER_A.TABLE1。用户USER_B创建的表实际是USER_B.TABLE1两者名称相同但完全独立,互不干扰(类似同一文件夹下不同用户的文件)。

(2)Oracle的权限设置

权限分级

普通用户默认只有自己 Schema 的操作权限CREATE TABLEINSERT等),无法访问其他用户的对象,更不能删除整个数据库。只有SYSDBA等超级权限角色,才能执行DROP DATABASE等危险操作,而这类权限会严格限制给极少数管理员。

用户/角色用户等级用户权限sysdba最高级别的管理员账户对数据库的完全控制权sysoper管理员账户权限比sysdba低一些,可启动、关闭数据库,但不能创建数据库。SYS数据库初始就存在的管理员用户天生拥有 sysdba 权限普通用户普通用户需要通过被授权之后才可以对数据库进行操作

注释1:sysdba和sysper是Oracle数据库内置的两种最高级别的系统权限集合,也被称为 “特权身份”。就像Linux的超级管理员root一样。普通用户无法自动获得这两种身份,必须由已拥有 sysdba 权限的用户(如 SYS)手动授予。

使用特权登录:获得身份后,登录时需明确指定身份,否则默认以普通用户权限登录。

注释2:虽然表格中写的sysdba sysoper是用户/角色。但是实际上这两个是”特权身份令牌“。它们是 Oracle 底层权限机制的一部分,属于 “特权集合” 而非 “用户账号”。数据库安装完成后,这两种特权身份就已存在,但默认仅赋予 SYS 用户。

sysdba和sysoper已经作为系统基础组件存在,等待被分配给合适的用户(通常是 SYS,也可分配给其他用户)。

数据库安装完成 → 自动创建SYS用户 → SYS默认拥有sysdba特权 ↓ sysdba和sysoper作为内置特权机制,从安装完成就存在于系统中

操作审计与日志

所有关键操作(如删除表、修改权限)会被记录到审计日志中,可追溯操作人。同时,Oracle 的闪回技术(Flashback)能快速恢复误删除的数据。

数据备份与恢复机制

支持在线热备份、增量备份等,即使发生极端情况(如误删库),也能通过备份文件恢复数据,配合归档日志可实现 “任意时间点恢复”。

(3)MySQL和Oracle的对比

这里使用MySQL来做对比,方便理解。

安全性能上

MySQL 的 “一个实例多个数据库” 看似更隔离,但本质是逻辑文件夹的隔离,权限控制相对简单。

普通用户可能被赋予DROP DATABASE权限,风险更高。缺乏表空间级别的物理隔离,某数据库文件损坏可能影响整个实例。而 Oracle 的设计思路是通过精细化权限 + 逻辑隔离,在单数据库内实现比多数据库更强的安全性,同时避免多数据库带来的资源浪费和管理复杂度。

适用场景上

Oracle面向企业级市场(如银行、电信),解决 “大规模数据 + 高可靠性” 需求。

MySQL面向个人和中小型项目,主打 “轻量、开源、免费”。

四、Oracle的安装配置

1、Oracle版本

Oracle21版本,下载其他版本差别不大

2、安装环境

Centos7操作系统(Linux)

内存4G,磁盘空间20G

这里的内存给大一点,后面初始化的时候内存大一些可能时间会短一点。

[root@localhost ~]# hostnamectl set-hostname oracle [root@localhost ~]# bash

错点注意:这里最好关闭一下防火墙和SELinux,否则后面初始化Oracle数据库的时候可能会卡住。会出现权限拦截的问题。

[root@oracle ~]# systemctl stop firewalld.service [root@oracle ~]# getenforce Enforcing [root@oracle ~]# setenforce 0 [root@oracle ~]#

3、Oracle安装

安装预安装包

从 Oracle 官方 YUM 仓库下载并安装 Oracle Database 21c 的预安装包(oracle-database-preinstall-21c)。

注意:如果是使用虚拟机,需要虚拟机可以联网

yum install -y  https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm

https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm

补充:预安装包的作用:

具体来说,oracle-database-preinstall-21c 是 Oracle 为简化数据库安装而提供的专用预配置包,它的主要功能包括:

    自动创建 oracle 用户和相关用户组(如 dbaoinstall 等)配置系统内核参数(如共享内存、文件描述符限制等)以满足 Oracle 数据库运行要求安装数据库依赖的基础库(如 libaioglibc 等)设置系统安全策略和资源限制,确保 Oracle 服务正常运行

安装Oracle数据库主程序

官方网址:https://www.oracle.com/cn/database/technologies/xe-downloads.html

下载之后传输到Linux中,要先安装预安装包否则可能报错

方式一:自定义源仓库

[root@oracle ~]yum -y install createrepo-0.9.9-28.el7.noarch [root@oracle ~]createrepo /oracle/ [root@oracle ~]vim /etc/yum.repos.d/oracle.repo [name] name=oracle baseurl=file:///oracle/ enabled=1 gpgcheck=0 [root@oracle ~]yum repolist [root@oracle ~]yum -y install /oracle/oracle-database-xe-21c-1.0-1.ol7

简单的yum仓库安装注意事项:

自定义源仓库之后:yum 会先查询本地缓存的 “仓库包索引”,通过你输入的 “包名”(如 percona-xtrabackup-24-2.4.7-1.el7.x86_64)匹配索引中对应的包信息(包括包的完整名称、版本、依赖等)。匹配成功后,yum 会自动从仓库下载该包,并解决依赖关系(比如自动安装 perl(DBD::mysql)rsync 等),因此无需手动指定 .rpm 后缀。
如果不是自定义源仓库:就需要输入完整的rpm包名字带后缀,比如这个【 yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm 】 本地已下载的.rpm 文件(非仓库中的包),yum 无法通过 “包名” 查询仓库索引(因为包不在仓库里),必须通过你提供的 “完整文件名 + 路径”(如 /root/percona-xtrabackup-24-2.4.7-1.el7.x86_64.rpm)定位到本地的.rpm 文件。 .rpm 后缀是 yum 识别 “本地 rpm 文件” 的关键标志 —— 如果不带后缀,yum 会默认去仓库中查找该 “包名”,但仓库中可能没有(或版本不匹配),最终导致安装失败

方式二:rpm本地安装

rpm -ivh oracle-database-xe-21c-1.0-1.ol7.x86_64.rpm

初始化Oracle数据库

在这一步的时候有些步骤会看起来像是卡住,请耐心等待,这是正常现象。

若服务器是普通虚拟机(2 核 4G 内存),通常需要 5-15 分钟。若服务器配置较低(1 核 2G 内存),可能需要 20-30 分钟,期间终端无输出属于正常现象。

[root@oracle ~]# ls /etc/init.d/ | grep oracle [root@oracle ~]# ls /etc/init.d/oracle-xe-21c [root@oracle ~]# /etc/init.d/oracle-xe-21c configure 下面是详细的初始化流程每一步的解析: Specify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts: #设置密码(这里设置的是123321Dyq) Confirm the password: ##确认密码 Configuring Oracle Listener. ##自动配置 Oracle Listener(默认监听端口 1521) Listener configuration succeeded. ##表示监听设置成功 Configuring Oracle Database XE. Enter SYS user password: ********* Enter SYSTEM user password: ********** Enter PDBADMIN User Password: *********** Prepare for db operation ###数据库实例与结构创建阶段 7% complete Copying database files ###复制数据库文件:将 Oracle 的基础模板文件(如数据文件、控制文件、日志文件)复制到指定目录默认/opt/oracle/oradata/XE。是数据存储的基础 29% complete Creating and starting Oracle instance ###创建并启动 Oracle 实例,为后续的数据存储做准备 30% complete 33% complete 37% complete 40% complete 43% complete Completing Database Creation ###完成数据库创建 47% complete 50% complete Creating Pluggable Databases ###创建可插拔数据库 54% complete 71% complete Executing Post Configuration Actions ##执行后续配置操作 93% complete Running Custom Scripts 100% complete Database creation complete. For details check the logfiles at: /opt/oracle/cfgtoollogs/dbca/XE. Database Information: Global Database Name:XE ### 全局数据库名 System Identifier(SID):XE ##系统标识符(SID),实例的唯一标识 Look at the log file "/opt/oracle/cfgtoollogs/dbca/XE/XE.log" for further details. Connect to Oracle Database using one of the connect strings: Pluggable database: oracle/XEPDB1 Multitenant container database: oracle Use https://localhost:5500/em to access Oracle Enterprise Manager for Oracle Database XE

注释:密码的作用范围(初始化日志中也可以看出来)

作用:该密码会同时应用于三个核心账户,这三个账户是后续管理和使用数据库的关键:

SYS:数据库最高权限账户,负责管理数据库结构(如创建表空间、用户)和系统级配置。SYSTEM:数据库管理员账户,用于日常管理(如创建用户、授权),权限略低于SYSPDBADMIN:可插拔数据库(PDB)的管理员账户,负责管理后续创建的XEPDB1插件数据库。

配置环境变量

在文件末尾添加以下内容(根据实际安装路径调整,默认路径如下)

[root@oracle ~]# vim /home/oracle/.bash_profile ##单个用户的配置文件 核心配置: export ORACLE_HOME=/opt/oracle/product/21c/dbhomeXE #指定 Oracle 数据库软件的安装目录(主目录)。Oracle 的所有工具和服务都需要通过这个路径找到对应的程序才能运行。 主目录的位置:其实在前面的初始化最后提示你日志路径,便知道了主目录的位置在哪里了 export ORACLE_SID=XE ##指定当前要连接的数据库实例名,SID = System Identifier,初始化日志最后表明是XE。 export PATH=$ORACLE_HOME/bin:$PATH #将 Oracle 的命令目录添加到系统的可执行路径中。 额外配置(可选) export ORACLE_BASE=path #定义 Oracle 的「基础目录」(根目录) export ROACLE_PID=oral12 #定义数据库进程的标识,这个变量不是必须的,默认情况下 Oracle 会自动生成进程标识,只有多实例场景下才需要手动配置。 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib #指定程序运行时依赖的「动态链接库(.so 文件)」路径。 export LANG="zh_CN.UTF-8" #设置 Linux 系统的默认语言和字符集。LANG 是系统级变量,控制终端、日志等系统输出的语言编码。设置为 zh_CN.UTF-8 表示系统默认使用中文显示,且支持 UTF-8 编码(避免中文乱码)。 export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8" #设置 Oracle 客户端与数据库交互的「语言和字符集」。 export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss' #统一日期数据的「显示格式」。

使配置生效

##注意:使用root用户编辑注意查看文件所有者是否是Oracle [root@oracle ~]# ll -d /home/oracle/.bash_profile [root@oracle ~]#source ~/.bash_profile

手动创建 systemd 服务文件

[root@oracle ~]# ls /usr/lib/systemd/system | grep oracle #如果有就可以省略这个步骤 [root@oracle ~]# vim /usr/lib/systemd/system/oracle-xe-21c.service [Unit] Description=Oracle Database 21c Express Edition After=network.target [Service] Type=forking User=root Group=root ExecStart=/etc/init.d/oracle-xe-21c start ExecStop=/etc/init.d/oracle-xe-21c stop ExecReload=/etc/init.d/oracle-xe-21c restart RemainAfterExit=yes [Install] WantedBy=multi-user.target

开启数据库服务

[root@oracle ~]#systemctl daemon-reload [root@oracle ~]# systemctl enable oracle-xe-21c.service --now [root@oracle ~]# systemctl status oracle-xe-21c.service #状态是 active (exited)表示成功

验证是否初始化成功

[root@oracle ~]# su - oracle [root@oracle ~]# sqlplus / as sysdba #这里可能需要卡一下,等待一会即可 SQL*Plus: Release 21.0.0.0.0 - Production on Thu Oct 16 02:57:17 2025 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. Connected to: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production Version 21.3.0.0.0 SQL> ##结果是这样表示成功 命令解析: Oracle 自带的命令行客户端工具,用于连接数据库并执行 SQL 语句或管理命令。 /:表示 “使用操作系统认证”(而非密码认证) as sysdba:表示以 SYSDBA 身份登录(Oracle 中最高权限角色)。

错点注意:必须使用oracle用户

sqlplus / as sysdba 依赖「操作系统认证」,而这种认证必须以 oracle 用户身份执行root 用户无法通过这种方式登录(即使知道密码也不行)。(或者在前面修改配置文件的时候切换用户同样可以)

如果是不oracle用户则会出现以下错误提示:

[root@oracle ~]# sqlplus / as sysdba SQL*Plus: Release 21.0.0.0.0 - Production on Thu Oct 16 02:55:23 2025 Version 21.3.0.0.0 Copyright (c) 1982, 2021, Oracle. All rights reserved. ERROR: ORA-01017: invalid username/password; logon denied Enter user-name:

管理Oracle服务

# 启动服务 systemctl start oracle-xe-21c # 停止服务 systemctl stop oracle-xe-21c # 查看服务状态 systemctl status oracle-xe-21c

安装完成

操作注意事项SYSDBA 权限极高,操作需谨慎(如误执行 drop database 会直接删除数据库)。

仅能在数据库服务器本地执行(远程连接通常需要密码认证,除非特殊配置)。

五、Oracle的常用语法

Oracle数据库不能直接按删除键删除命令,按住ctrl+删除键即可。

Oracle的操作技巧(命令行)

【1】Oracle清屏命令

SQL> host clear; #滚轮上划可以看见历史命令

【2】自定义方向键

在Linux中,Oracle不像MySQL一样支持上行历史命令键。

解决方法:使用 rlwrap 工具增强 SQL*Plus 功能

(1)安装rlwrap工具

方式一:源安装(root用户)

rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6 yum install rlwrap

方式二:如果一不成功就是用官方Git仓库拉取rpm包源码编译安装

[root@oracle ~]# cd /tmp [root@oracle tmp]# curl -O https://github.com/hanslub42/rlwrap/releases/download/v0.46.1/rlwrap-0.46.1.tar.gz [root@oracle tmp]# ls /tmp/ CVU_21.0.0.0.0_oracle hsperfdata_oracle rlwrap-0.46.1.tar.gz vmware-root

方法三:二不行就使用这个

[root@oracle ~]# cd /tmp [root@oracle tmp]# wget https://github.com/hanslub42/rlwrap/releases/download/v0.47/rlwrap-0.47.tar.gz [root@oracle tmp]# ll -dh rlwrap-0.47.tar.gz

(2)源码编译安装

[root@oracle tmp]# yum -y install gcc make [root@oracle tmp]yum -y install readline-devel ##这个包不安装可能会报错 [root@oracle tmp]# tar -xf rlwrap-0.47.tar.gz [root@oracle tmp]# cd rlwrap-0.47/ [root@oracle rlwrap-0.47]#./configure --without-libptytty [root@oracle rlwrap-0.47]# make && make install [root@oracle rlwrap-0.47]# rlwrap --version rlwrap 0.47 ##如果显示版本信息就表示安装成功

(3)编辑配置文件和加载配置

最后一行插入别名: [root@oracle rlwrap-0.47]# vim /home/oracle/.bash_profile alias sqlplus='rlwrap sqlplus' [root@oracle rlwrap-0.47]# source /home/oracle/.bash_profile #使配置生效

(4)重新进入Oracle

此时按 键就可以正常调取历史命令了, 键可以向前切换,解决了乱码问题。而且使用删除键也可以正常使用了,不会出现乱码问题了。

sqlplus / as sysdba

注意:如果你是再其他终端执行的source命令,就再执行source命令的终端测试才可以成功。只对执行 source 命令的当前终端生效,对之前早就开启的其他终端完全不生效。source不会开启自子进程。

【3】Oracle自带的历史命令

如果不想那么麻烦,就是查看历史命令也是相同的。

SQL> set history on #开启历史命令 SQL> hist #查看历史命令

Oracle常用查询连接命令

dual 是 Oracle 自带的一个特殊 “单行单列” 表(系统表),通常用于简单的查询测试或计算。执行后会返回一行结果 DUMMY(值为 X),表示数据库可以正常响应 SQL 命令。

SQL> select * from dual; D - X

查看 Oracle 数据库的参数配置

SQL> show parameter name; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ cdb_cluster_name string cell_offloadgroup_name string db_file_name_convert string db_name string XE db_unique_name string XE global_names boolean FALSE instance_name string XE lock_name_space string log_file_name_convert string pdb_file_name_convert string processor_group_name string NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ service_names string XE

查看当前登录用户

SELECT user FROM dual;

创建用户

CREATE USER 用户名 IDENTIFIED BY 密码    #指定用户密码(需符合 Oracle 密码规则) DEFAULT TABLESPACE 表空间名   #指定用户默认存储数据的表空间(如 USERS) TEMPORARY TABLESPACE 临时表空间名   #指定用户的临时表空间(通常为 TEMP) QUOTA 空间大小 ON 表空间名; #限制用户在表空间上使用的空间(UNLIMITED 表示无限制)  

切换用户

切换前需知道目标用户的 正确密码,若密码包含特殊字符(如 @#),需用双引号包裹,例如:CONNECT myuser/"My@Pass123";

CONNECT 目标用户名/密码; -- 或带数据库实例(若需指定) CONNECT 目标用户名/密码@数据库实例名;

案例:创建一个名为 myuser 的用户,密码为 MyPass123,默认表空间为 USERS

CREATE USER myuser IDENTIFIED BY MyPass123 DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON users;

注意:创建用户后,需授予基本权限才能操作(如登录权限)

GRANT CREATE SESSION TO myuser; -- 允许登录 GRANT CREATE TABLE TO myuser; -- 允许创建表

删除用户

仅删除用户(若用户有对象则会失败) DROP USER 用户名; 删除用户及其所有对象(级联删除) DROP USER 用户名 CASCADE; 删除用户及其所有的对象 DROP USER testuser CASCADE;

创建表,默认属于当前用户

-- 语法:CREATE TABLE 表名 (字段名 类型 [约束]) CREATE TABLE student ( id NUMBER(10) PRIMARY KEY, -- 数字类型,长度10,主键 name VARCHAR2(50) NOT NULL, -- 字符串类型(Oracle 常用VARCHAR2) age NUMBER(3), birthday DATE );

注释:字符串类型常用 VARCHAR2 而非 VARCHAR(Oracle 中 VARCHAR 是兼容型,建议用 VARCHAR2)。

表的字段类型:和MySQL相差无几

表中插入值

INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...);

案例:假设存在表 employees(包含 idnamesalaryhire_date 列),插入一条记录

INSERT INTO employees (id, name, salary, hire_date) VALUES (1001, '张三', 5000, TO_DATE('2023-01-15', 'YYYY-MM-DD'));

删除表

GRANT CREATE SESSION TO myuser; -- 允许登录 GRANT CREATE TABLE TO myuser; -- 允许创建表 普通 DROP TABLE:表会被放入 Oracle 回收站(RECYCLEBIN),必要时可通过 FLASHBACK TABLE 表名 TO BEFORE DROP 恢复。 加 PURGE 选项:表会被直接删除,不进入回收站,适合确认无需恢复的场景。

查看表

-- 查看当前用户所有表(仅表名) SELECT table_name FROM user_tables;

查看表结构

-- 查看表结构(类似 MySQL 的 DESC) DESCRIBE student; -- 或简写 DESC student;

查看其他用户的表

-- 查看所有用户的表(需管理员权限) SELECT owner, table_name FROM all_tables;

-- 查看指定用户(如 SCOTT)的表 SELECT table_name FROM all_tables WHERE owner = 'SCOTT'; -- 注意用户名大写

查看数据库已有用户

#查看所有用户(包括系统用户和普通用户) SELECT username FROM dba_users; #查看当前用户可访问的用户 SELECT username FROM all_users; #查看用户的详细信息(如创建时间、状态等)  SELECT username, created, account_status FROM dba_users ORDER BY created DESC;

查看表的完整信息

-- 查看表的创建语句(需有对应权限) SELECT dbms_metadata.get_ddl('TABLE', 'STUDENT') FROM dual; -- 表名大写

查看当前的Oracle数据库

方法1:查询系统视图(推荐) SELECT sys_context('userenv', 'db_name') AS current_database FROM dual; 方法2:查询实例名(SID) SELECT instance_name FROM v$instance; -- 需有对应权限

Oracle的表内容查询语句总览

1、基本查询 SELECT * FROM 表名;  --查询表中所有行和所有列 SELECT 列1, 列2, 列3 FROM 表名;  -- 只查询需要的列,多个列用逗号分隔 2、条件查询 SELECT 列名 FROM 表名 WHERE 条件;  -- 按条件筛选行 常用条件运算符:=(等于)、>(大于)、<(小于)、>=、<=、!=/<>(不等于)、BETWEEN...AND(范围)、IN(包含)、LIKE(模糊匹配)、IS NULL(空值) 3、排序查询(ORDER BY) SELECT 列名 FROM 表名 ORDER BY 列1 [ASC/DESC], 列2 [ASC/DESC];  -- 按指定列排序,默认升序(ASC),降序需加 DESC 4、去重查询 SELECT DISTINCT 列名 FROM 表名;  -- 去除结SELECT 分组列, 聚合函数 FROM 表名 GROUP BY 分组列 [HAVING 聚合条件];果中重复的行(所有列都相同才视为重复) 5、限制查询 SELECT * FROM 表名 WHERE ROWNUM <= N; -- 查询前N行数据 6、聚合查询(GROUP BY + 聚合函数) SELECT 分组列, 聚合函数 FROM 表名 GROUP BY 分组列 [HAVING 聚合条件]; 7、多表连接查询 -- 内连接(只显示匹配的记录) SELECT a.列, b.列 FROM 表A a INNER JOIN 表B b ON a.关联字段 = b.关联字段; -- 左连接(显示表A所有记录,表B无匹配则为NULL) SELECT a.列, b.列 FROM 表A a LEFT JOIN 表B b ON a.关联字段 = b.关联字段;

补充内容:国内外的数据库版本

国外版本介绍MySQL开源免费,生态完善,是国内互联网公司最广泛使用的数据库之一

PostgreSQL

功能强大,支持复杂查询,在金融、政府场景中常用

MongoDB

文档型数据库,适合JSON数据存储Oracle甲骨文公司的一款关系数据库管理系统,在数据库市场上占有重要份额。它具有强大的功能、出色的性能和高可用性,支持大规模数据存储和复杂的业务逻辑,广泛应用于大型企业、金融机构等对数据处理要求较高的场景。SQL server由微软公司开发的关系型数据库管理系统,与 Windows 操作系统紧密集成,具有良好的兼容性和易用性,在 Windows 环境下的企业级应用中较为常见,适用于中小型企业的业务系统。IBM Db2IBM 公司推出的关系型数据库管理系统,高性能,高可靠性和强大的数据分析能力。InformixIBM 公司的一款数据库产品,结合了关系型和面向对象的功能,可实现灵活的数据建模,支持 SQL、NoSQL/JSON 和时间序列数据,具有无缝整合特性,可进行高性能事务处理,适合嵌入式应用程序中的全天候事务和实时分析。Sybase最初由 Sybase 公司开发,后来被 SAP 公司收购。Redis内存数据库,常用于缓存,会话存储等场景 国产版本介绍

OceanBase

蚂蚁集团开发,常用于金融、电信、互联网等场景TiDB由 PingCAP 公司开发,是一款分布式 NewSQL 数据库,,适合分布式在线事务处理达梦数据库(DM)由武汉达梦数据库有限公司研发,是一款完全自主研发的关系型数据库,高度兼容 Oracle,广泛应用于政府、金融、电信、能源等对数据安全要求高的行业。人大金仓(Kingbase)由北京人大金仓信息技术股份有限公司开发,是入选国家自主创新产品目录的唯一数据库产品南大通用(GBase)天津南大通用数据技术有限公司的产品。适用于金融、电信、政府等大数据处理需求高的行业。

TDSQL-C

腾讯云自研的分布式数据库,兼容 MySQL 和 PostgreSQL,分布式架构适用于高并发业务。

PolarDB

由阿里云开发,广泛应用于阿里云生态。

SequoiaDB(巨杉数据库)

由巨杉数据库公司开发,主要应用于金融、电信、政府等大数据处理需求高的行业。GoldenDB由中兴通讯开发,成熟度较高,主要应用于金融行业的核心交易系统。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

相关推荐

热文推荐