Oracle 数据库表操作总结(新建表,删除表,表的增删改查等)

Oracle数据库表操作主要分为DDL(数据定义语言)和DML(数据操作语言)两大类。


DDL用于管理表结构,包括CREATE(创建表)、ALTER(修改表结构)、DROP(删除表)等操作,执行后自动提交。


DML用于管理表数据,包含INSERT(插入数据)、UPDATE(更新数据)、DELETE(删除数据)和SELECT(查询数据)等操作,需要显式COMMIT提交事务。


关键区别在于:DDL操作不可回滚,而DML操作在COMMIT前可通过ROLLBACK撤销。


特别注意DELETE与DROP的区别:DELETE删除数据保留表结构,DROP则完全删除表。


日期数据建议使用TO_DATE函数处理,子查询插入需确保字段数据类型、数量和顺序匹配。


Oracle 数据库表操作总结(新建表,删除表,表的增删改查等)


Oracle数据库的操作可以分为两大类:DDL(数据定义语言) 用于定义或删除表结构,DML(数据操作语言) 用于管理表中的数据。


Oracle 数据库表操作总结表

操作类别 操作名称 核心SQL语法与示例 重要注意事项与最佳实践
DDL (结构定义) 新建表 (CREATE TABLE) 语法: CREATE TABLE 表名 ( 列名1 数据类型 [约束], 列名2 数据类型 [约束], ... ); 示例: sql<br>CREATE TABLE employees (<br> employee_id NUMBER(6) PRIMARY KEY,<br> first_name VARCHAR2(50) NOT NULL,<br> hire_date DATE<br>);<br> - 需指定列名数据类型 (如 VARCHAR2, NUMBER, DATE)及可选的约束 (如 PRIMARY KEY, NOT NULL)。 - 表名和列名应遵循命名规范,见名知意。
删除表 (DROP TABLE) 语法: DROP TABLE 表名 [PURGE]; 示例: sql<br>-- 删除表,并放入回收站(可恢复)<br>DROP TABLE employees;<br><br>-- 永久删除,不进回收站<br>DROP TABLE employees PURGE;<br> - 危险操作,执行前务必确认。 - 默认情况(不加PURGE)会将表放入回收站(Recycle Bin) ,可使用 FLASHBACK 命令恢复。 - 加上 PURGE永久删除,无法恢复,适用于明确不再需要的表,以立即释放空间。
DML (数据管理) 插入数据 (INSERT) 语法: INSERT INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...); 示例: sql<br>-- 指定列插入<br>INSERT INTO employees (employee_id, first_name, hire_date)<br>VALUES (101, 'John Doe', SYSDATE);<br><br>-- 不指定列(需提供所有列的值)<br>INSERT INTO employees VALUES (102, 'Jane Smith', SYSDATE);<br> - 字符串和日期用单引号 括起来。 - 事务操作 :执行后需 COMMIT 提交事务,才能使更改对其他会话可见;若操作有误,可执行 ROLLBACK 撤销。 - 可使用 INSERT ... SELECT ... 语句从一个表批量复制数据到另一个表。
修改数据 (UPDATE) 语法: UPDATE 表名 SET 列1 = 新值1, 列2 = 新值2, ... WHERE 条件; 示例: sql<br>-- 更新特定行的薪水<br>UPDATE employees<br>SET salary = salary * 1.1<br>WHERE employee_id = 101;<br><br>-- 更新多列<br>UPDATE employees<br>SET first_name = 'Peter', salary = 60000<br>WHERE employee_id = 103;<br> - WHERE子句极其重要 。缺少 WHERE 子句将更新表中所有行 。 - 建议先执行相同条件的 SELECT 语句确认目标范围。 - 事务操作 :更改后需要使用 COMMIT 提交。
删除数据 (DELETE) 语法: DELETE FROM 表名 WHERE 条件; 示例: sql<br>-- 删除特定员工<br>DELETE FROM employees WHERE employee_id = 110;<br><br>-- 删除薪水低于5000的所有员工<br>DELETE FROM employees WHERE salary < 5000;<br><br>-- 删除表中所有数据<br>DELETE FROM employees;<br> - WHERE 子句同样极其重要 ,缺少它将删除所有行 。 - DELETEDML 操作,会触发触发器、维护索引,并可以通过事务 ROLLBACK 恢复。 - 事务操作 :执行后需 COMMITROLLBACK
查询数据 (SELECT) 语法: SELECT {*, 列名1, 列名2, ...} FROM 表名 [WHERE 条件] [GROUP BY 分组列] [HAVING 分组条件] `[ORDER BY 排序列 [ASC DESC]];**示例:**sql
-- 查询特定列
SELECT employee_id, first_name FROM employees;

-- 条件查询与排序
SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date DESC;

-- 使用聚合函数分组查询
SELECT department_id, COUNT(*)
FROM employees
GROUP BY department_id;
`

💎 核心概念区分

  • DDL vs. DML :DDL(如 CREATE, DROP)用于定义或删除数据库对象的结构 ,执行时通常伴随隐式提交(Implicit Commit)。DML(如 INSERT, UPDATE, DELETE)用于管理数据 ,其变更需要用户通过 COMMITROLLBACK 显式结束事务。

  • DELETE vs. DROPDELETE 用于删除表中的数据行 ,表结构依然存在。DROP 则用于彻底移除整个表结构 及其中的数据。TRUNCATE 是另一种DDL操作,用于快速删除表中所有数据并释放空间,但无法回滚,执行速度比 DELETE 快。


Oracle数据库表操作完整总结(基于课堂笔记补充)


一、表的创建 (CREATE TABLE)

建表时需要定义的三个核心因素:表名 | 列名 | 列的数据类型

数据类型详解
数据类型 语法格式 说明 取值范围/限制
NUMBER NUMBER 常规数值,不限定长度 任意数值
NUMBER(p) NUMBER(4) 整数类型,p表示总位数 -9999 ~ 9999
NUMBER(p,s) NUMBER(7,3) 小数类型,p总位数,s小数位数 整数位: 7-3=4位,小数位: 3位 范围: -9999.999 ~ 9999.999
VARCHAR2(X) VARCHAR2(20) 变长字符串,X为最大长度 X最大值为4000
CHAR(X) CHAR(10) 定长字符串,固定X长度 不足部分自动填充空格
DATE DATE 日期类型 包含年月日时分秒
建表示例

sql

复制代码
-- 创建学生信息表
CREATE TABLE STUDENT_INFO(
    SNAME VARCHAR2(20),
    SEX VARCHAR2(10),
    AGE NUMBER(3),
    BIRTHDAY DATE
);

二、表的结构维护 (ALTER / RENAME)

操作类型 语法 示例
表重命名 RENAME 原表名 TO 新表名; RENAME STUDENT_INFO TO T_STUDENT;
列重命名 ALTER TABLE 表名 RENAME COLUMN 原列名 TO 新列名; ALTER TABLE T_STUDENT RENAME COLUMN SNAME TO STUDENT_NAME;
添加列 ALTER TABLE 表名 ADD 列名 数据类型; ALTER TABLE T_STUDENT ADD ADDRESS VARCHAR2(100);
删除列 ALTER TABLE 表名 DROP COLUMN 列名; ALTER TABLE T_STUDENT DROP COLUMN ADDRESS;
修改列数据类型 ALTER TABLE 表名 MODIFY (列名 新数据类型); ALTER TABLE T_STUDENT MODIFY(STUDENT_NAME VARCHAR2(400));

在Oracle数据库中,ALTER TABLE ADD 操作默认将新列添加到最后。


新增列的位置控制语法
添加位置 语法 示例
默认(末尾) ALTER TABLE 表名 ADD 列名 数据类型; ALTER TABLE T_STUDENT ADD ADDRESS VARCHAR2(100);
指定插入位置(需要先添加后移动) Oracle不直接支持 AFTERBEFORE 子句,需间接实现 见下方方案
通过中间表重建(推荐)
sql 复制代码
-- 步骤1:创建新表,按想要的列顺序定义结构
CREATE TABLE T_STUDENT_NEW (
    STUDENT_NAME VARCHAR2(20),   -- 第1列
    ADDRESS VARCHAR2(100),       -- 第2列(新增列放在这里)
    SEX VARCHAR2(10),            -- 第3列
    AGE NUMBER(3),               -- 第4列
    BIRTHDAY DATE                -- 第5列
);

-- 步骤2:将旧表数据按顺序迁移
INSERT INTO T_STUDENT_NEW (STUDENT_NAME, SEX, AGE, BIRTHDAY)
SELECT STUDENT_NAME, SEX, AGE, BIRTHDAY FROM T_STUDENT;

-- 步骤3:删除旧表,重命名新表
DROP TABLE T_STUDENT;
RENAME T_STUDENT_NEW TO T_STUDENT;

-- 步骤4:重建索引、约束等对象

三、表的增删改查 (DML操作)

3.1 增 (INSERT) --- 两种语法

语法1:直接插入值

sql

复制代码
-- 插入单行数据(需注意日期格式转换)
INSERT INTO T_STUDENT VALUES ('张三','男',20,TO_DATE('20060101','YYYYMMDD'));
COMMIT;  -- 提交事务,数据写入表中

-- 可回滚的插入
INSERT INTO T_STUDENT VALUES('李四','女',18,TO_DATE('20040101','YYYYMMDD'));
ROLLBACK;  -- 回滚当前事务,取消数据写入

语法2:通过SELECT语句插入(子查询插入)

sql

复制代码
-- 将EMP表的内容插入到T_STUDENT表
-- 注意:字段个数、数据类型需与SELECT后面保持一致
INSERT INTO T_STUDENT
SELECT 
    ENAME,
    JOB,
    DEPTNO,
    HIREDATE
FROM EMP;
COMMIT;

INSERT 语法对比

语法类型 格式 特点 适用场景
直接插入 INSERT INTO 表 VALUES (值1, 值2...); 需要按表结构顺序提供所有列的值 插入单行或少量的具体数据
子查询插入 INSERT INTO 表 SELECT 语句; 需要字段个数、数据类型与SELECT一致 批量复制数据
3.2 查 (SELECT)

sql

复制代码
-- 查询表中所有数据
SELECT * FROM T_STUDENT;
3.3 事务控制命令
命令 作用
COMMIT; 提交事务,将数据变更永久写入数据库
ROLLBACK; 回滚事务,撤销当前会话中未提交的所有数据变更

四、核心概念汇总对比

对比维度 DDL (数据定义语言) DML (数据操作语言)
操作对象 表结构(表、列) 表内部的数据行
典型命令 CREATE, ALTER, DROP, RENAME INSERT, UPDATE, DELETE, SELECT
事务控制 隐式提交,无法ROLLBACK 需要显式 COMMIT / ROLLBACK
是否可恢复 DROP 后默认进回收站可恢复 DELETE 后可通过 ROLLBACK 恢复(未提交时)
对比维度 COMMIT ROLLBACK
作用 确认当前事务的所有变更 撤销当前事务的所有变更
执行后 数据永久写入,其他会话可见 数据恢复到事务开始前的状态
能否撤销 不可撤销 不可恢复(已撤销完成)

五、快速参考(所有SQL示例汇总)

sql

sql 复制代码
-- ========== 一、创建表 ==========
CREATE TABLE STUDENT_INFO(
    SNAME VARCHAR2(20),
    SEX VARCHAR2(10),
    AGE NUMBER(3),
    BIRTHDAY DATE
);

-- ========== 二、表结构维护 ==========
-- 表重命名
RENAME STUDENT_INFO TO T_STUDENT;

-- 列重命名
ALTER TABLE T_STUDENT RENAME COLUMN SNAME TO STUDENT_NAME;

-- 添加列
ALTER TABLE T_STUDENT ADD ADDRESS VARCHAR2(100);

-- 删除列
ALTER TABLE T_STUDENT DROP COLUMN ADDRESS;

-- 修改列数据类型
ALTER TABLE T_STUDENT MODIFY(STUDENT_NAME VARCHAR2(400));

-- ========== 三、数据操作 ==========
-- 插入数据(语法1:直接插入)
INSERT INTO T_STUDENT VALUES ('张三','男',20,TO_DATE('20060101','YYYYMMDD'));
COMMIT;

INSERT INTO T_STUDENT VALUES('李四','女',18,TO_DATE('20040101','YYYYMMDD'));
ROLLBACK;

-- 插入数据(语法2:子查询插入)
INSERT INTO T_STUDENT
SELECT ENAME, JOB, DEPTNO, HIREDATE FROM EMP;
COMMIT;

-- 查询数据
SELECT * FROM T_STUDENT;

💡 重点提醒

  1. 日期处理 :插入DATE类型数据时,推荐使用 TO_DATE('日期字符串','格式') 进行显式转换

  2. 事务控制INSERT / UPDATE / DELETE 操作后必须执行 COMMIT 才能让其他会话看到变更

  3. 数据类型匹配:使用子查询插入时,务必确保SELECT的字段个数和数据类型与目标表一致

相关推荐
weixin_580614001 小时前
HTML怎么创建同步设置精细控制_HTML按模块开关同步项【技巧】
jvm·数据库·python
SelectDB技术团队1 小时前
Apache Doris 4.1:面向 AI & Search 的统一数据存储与检索底座
数据库·数据仓库·实时分析·selectdb
maqr_1101 小时前
Golang怎么对接ChatGPT_Golang ChatGPT教程【简明】
jvm·数据库·python
m0_514520571 小时前
JavaScript中函数声明位置对解析器预编译的影响
jvm·数据库·python
m0_743623922 小时前
SQL多维度统计优化_GROUP BY索引组合设计
jvm·数据库·python
Greyson12 小时前
HTML怎么创建时间轴布局_HTML结构化时间线写法【方法】
jvm·数据库·python
qq_206901392 小时前
如何为 JSON 序列化中的不同浮点字段指定独立的小数精度
jvm·数据库·python
空中海2 小时前
Redis 原理深度解析:持久化 × 主从复制 × Sentinel × Cluster × 性能排查全攻略
数据库·redis·sentinel
AI-小柒2 小时前
磅上线!DataEyes 聚合平台正式接入 GPT-Image-2,开启多模态 AI 生成全新纪元
大数据·开发语言·数据库·人工智能·gpt·php