当前位置: 首页 > news >正文

【Oracle】Oracle系列之七--表的创建与管理

文章目录

  • 往期回顾
  • 前言
  • 1. 表的创建
  • 2. 表的修改
  • 3. 表中数据的增删改查
    • (1)插入数据
    • (2)删除数据
    • (3)更新数据
  • 4. 表的Merge
  • 5. 表的删除
  • 6. 表的重命名
  • 7. 表的索引
    • (1)B树索引
    • (2)位图索引
    • (3)函数索引
    • (4)全文索引
  • 8. 表的约束
    • (1)主键约束
    • (2)外键约束
    • (3)唯一约束
    • (4)CHECK约束
  • 9. dual表

往期回顾

  • 【Oracle】Oracle系列–Oracle数据类型
  • 【Oracle】Oracle系列之二–Oracle数据字典
  • 【Oracle】Oracle系列之三–Oracle字符集
  • 【Oracle】Oracle系列之四–用户管理
  • 【Oracle】Oracle系列之五–Oracle表空间
  • 【Oracle】Oracle系列之六–Oracle表分区

前言

表是Oracle数据库中最基础的存储对象,用于存储数据。本文主要介绍了Oracle表的创建与管理,包括表的创建、修改、删除、重命名,表的索引、约束以及表中数据的增、删、改、查等基本操作。

1. 表的创建

在Oracle数据库中,创建表需要使用CREATE TABLE语句:

CREATE TABLE table_name
(column1 datatype [ NULL | NOT NULL ],column2 datatype [ NULL | NOT NULL ],...columnN datatype [ NULL | NOT NULL ]
);

其中,table_name是要创建的表的名称,column1 ~ columnN是表中的列名,datatype是数据类型,NULL和NOT NULL表示该列是否允许为空。

如创建一个名为student的表,包含学生的姓名、性别、年龄和学号四个字段,使用以下语句:

CREATE TABLE student
(name VARCHAR2(50) NOT NULL,gender CHAR(1) NOT NULL,age NUMBER(3),num VARCHAR2(20) PRIMARY KEY
);

上述语句创建了一个名为student的表,包含四个字段:name(姓名)、gender(性别)、age(年龄)和num(学号)。其中,name和gender字段不允许为空,age字段允许为空,num字段为主键,用于唯一标识每个学生。

创建表的其他参数:

  • PCTFREE 保留空间
  • PCTUSED 从表中删除数据,使得数据块空间不断减少,减少至40%时,可再次插入数据(PCTFREE与PCTUSED之和越接近100%,数据块空间利用率越高)。
  • INITRANS 初始事务数量
  • MAXTRANS 最大的事务并发数量
  • CACHE 指定将表中的数据放在数据库高速缓存中,默认NOCACHE。对于较小、访问频繁的表,使用CACHE,在用户第一次访问表中数据时,整个表被加载到数据库高速缓存。
  • LOGGING 默认情况下,用户在表上执行DDL和DML都会产生重做日志。如果不希望产生重做日志,使用NOLOGGING子句。
  • COMPRESS 使用该子句,一个数据块中两行完全相同的数据将被压缩为一行。

创建表的时候插入数据

 create table tt as select id,name from table1; 
create table t1 parallel 8 nologging compress as select * from table1; 

创建临时表

临时表为事务级,事务提交或回滚时,数据即被删除

create global temporary table t1(name varchar(10)) on commit delete rows;

临时表为会话级,表中数据一致保留直到当前会话结束。

create global temporary table t1(name varchar(10)) on commit preserve rows;

2. 表的修改

实际开发中可能需要对已有的表进行修改,如添加新的列、删除已有的列、修改列的数据类型等。Oracle提供了ALTER TABLE语句来实现这些操作:

ADD用于添加新的列

ALTER TABLE table_name
ADD (column_name datatype [ NULL | NOT NULL ],column_name datatype [ NULL | NOT NULL ],...);

DROP COLUMN用于删除已有的列

ALTER TABLE table_name DROP COLUMN column_name;

MODIFY用于修改列的数据类型

ALTER TABLE table_name
MODIFY (column_name datatype [ NULL | NOT NULL ]);

如对于之前创建的student表,添加一个新的字段address:

ALTER TABLE student
ADD (address VARCHAR2(100) NULL);

上述语句在student表中添加了一个新的字段address,数据类型为VARCHAR2,长度为100,允许为空。

3. 表中数据的增删改查

(1)插入数据

使用INSERT语句向表中插入数据:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

其中,table_name是要插入数据的表的名称,column1、column2、column3等是表中的列名,value1、value2、value3等是要插入的数据值。

例如向student表中插入一条数据,可以使用以下语句:

INSERT INTO student (name,gender, age,num)
VALUES ( 'John','M',20,01);

该语句将向student表中插入一条数据,包含name为’John’、gender为’M’、age为20、num为01的记录。

向目标表插入源表数据

插入数据时,如果源表和目标表字段名、字段数量、字段顺序都相同:

insert into table1 select * from table2;

否则 使用:

insert into table1(col1, col2, ..., coln) select col1, col2, ..., coln from table2;

(2)删除数据

使用DELETE语句从表中删除数据:

DELETE FROM table_name WHERE condition;

其中,table_name是要删除数据的表的名称,condition是删除记录的条件。

例如从student表中删除age大于等于25的记录,可以使用以下语句:

DELETE FROM student WHERE age >= 25;

(3)更新数据

使用UPDATE语句更新表中的数据:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

其中,table_name是要更新数据的表的名称,column1、column2等是要更新的列名,value1、value2等是要更新的数据值,condition是更新记录的条件。

例如将student表中id为1的记录的age更新为21,可以使用以下语句:

UPDATE student
SET age = 21
WHERE id = 1;

(4)查询数据

使用SELECT语句从表中检索数据,例如查询student表中i所有年龄大于26岁的学生信息:

SELECT * FROM student WHERE age > 20;

4. 表的Merge

Merge用于需要使用SQL语句同时进行Insert/Update的操作,也就是说当存在记录时就更新(Update),不存在数据时就插入(Insert)。

执行Merge前:

执行以下语句:

Merge Into products t
Using newproducts  s
On (t.product_id=s.product_id)
When Matched Then 
Update Set t.product_name=s.product_name,t.Category=s.Category
When Not Matched Then
Insert Values(s.product_id,s.product_name,s.Category)

其中,insert和update是可选的,UPDATE 和INSERT后面可以跟WHERE子句,UPDATE子句后面可以跟delete来去除一些不需要的行。在ON条件中可以使用常量来insert所有的行到目标表中,不需要连接到源表和目标表。

5. 表的删除

使用TRUCATE TABLE语句清除表中所有内容,保留结构:

 truncate table table_name; 

使用DROP TABLE语句删除某个表:

DROP TABLE table_name;

例如删除之前创建的student表:

DROP TABLE student;

上述语句将删除名为student的表及其所有数据。在执行DROP TABLE语句前,应确保该表不再被其他对象所使用,否则会抛出错误。

使用purge彻底删除表

6. 表的重命名

使用RENAME语句修改表名:

RENAME table_name TO new_table_name;

例如将之前创建的student表重命名为new_student:

RENAME student TO new_student;

1

7. 表的索引

数据库索引的作用是减少读数据所需的磁盘访问次数,加快数据访问速度,提高数据库性能。

索引提供指向存储在表的指定列中的数据值的指针,可快速定位需要的数据,从而提高查询效率。如果没有索引,查询需要扫描整个表,将花费大量时间和资源。

Oracle索引由一系列存储在磁盘上的索引项组成,索引项第一列是索引键(keyval),第二列是行指针(ROWID)。

ROWID由数据库自动生成,包含18个字符串:

OOOOOO/FFF/BBBBBB/RRR对应数据库对象编号/数据文件编号/数据块号/行号。

Oracle数据库中有多种类型的索引,包括B树索引、位图索引、函数索引、全文索引等。

(1)B树索引

Oracle默认为B树,是Oracle数据库中最常用的索引类型。它是一种平衡树结构,可以快速定位需要的数据。B树索引通常由一个或多个列组成,这些列存储了数据库表中的数据。当查询需要访问这些数据时,B树索引可以帮助快速定位它们。

B树索引的优点是查询速度快,适用于大多数查询场景。但B树索引维护成本高,当表中的数据发生变化时,需要更新索引,这将影响数据库的性能。

(2)位图索引

位图索引是一种用于处理大量重复数据的索引类型。它将每个索引值映射到一个位图,每个位图表示一个索引值是否存在。当查询需要访问这些数据时,位图索引可以帮助快速定位它们。

位图索引的优点是适用于处理大量重复数据的查询场景,可以显著提高查询效率。但是,位图索引不适用于处理不重复的数据,且索引维护成本高。

(3)函数索引

函数索引是一种用于处理函数表达式的索引类型。它将函数表达式的计算结果存储在索引中,当查询需要访问这些数据时,函数索引可以帮助快速定位它们。

函数索引的优点是适用于处理函数表达式的查询场景,可以显著提高查询效率。但是,函数索引的缺点是索引维护成本高,且只适用于特定的函数表达式。

(4)全文索引

全文索引是一种用于处理文本数据的索引类型。它将文本数据分解为单词,并将每个单词映射到一个索引值。当查询需要访问这些数据时,全文索引可以帮助快速定位它们。

全文索引的优点是适用于处理文本数据的查询场景,可以显著提高查询效率。但是,全文索引的缺点是索引维护成本高,且需要特定的全文搜索引擎。

当字段取值较多时,如证件号码,则应使用B-Tree索引
当字段值取值较少的情况下,如性别,应使用位图索引
在Oracle中可以为表中的列创建索引。例如,在student表的num列上创建一个名为“idx_num”的索引:

CREATE INDEX idx_num ON student(num);

8. 表的约束

数据库中,约束是用来保证数据的完整性和一致性的规则。Oracle数据库通过使用约束来限制表中数据的输入和更改,使得数据库中存储的数据是结构正确的,并且可以被其他程序和用户正确地共享和查询。

(1)主键约束

主键约束是用来唯一标识表中每个记录的一种方式,即主键必须在表中具有唯一性,不能为NULL,且只能定义一个主键约束。主键通常用来建立关系型数据库之间的连接。

建立主键约束

ALTER TABLE table_name
ADD CONSTRAINT constraint_name PRIMARY KEY (column1, column2);

如对于student表,建立主键约束:

Alter Table student Add Constraint pk_num Primary Key (num);

(2)外键约束

外键约束用于在表之间建立一对多或多对多的关系,它指明了一个表中的某个字段必须引用另一个表中的主键约束。外键值必须在引用表中存在或者为空值。

创建外键约束:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name FOREIGN KEY (column1) REFERENCES other_table(column2);

(3)唯一约束

唯一约束用于确保某个字段或一组字段中的值是唯一的。与主键不同,唯一约束允许 null 值。

创建唯一约束:

ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2);

(4)CHECK约束

创建CHECK约束:

Alter Table nn Add Constraint ck_emp_n2 Check(n2='男' Or n2='女')

9. dual表

dual是一个虚拟表,用来构成select的语法规则。

查看表结构:

 desc dual; 

oracle保证dual里面永远只有一条记录,查询表数据:

select * from dual; 

Dual属于SYS schema,以PUBLIC SYNONYM的方式供其他数据库USER使用

SQL> select owner, object_name , object_type from dba_objects where object_name like '%DUAL%'; OWNER OBJECT_NAME OBJECT_TYPE

常见用途如下:

select user from dual;  #查看当前用户
select SYS_CONTEXT('USERENV''TERMINAL') from dual; #调用系统函数
SQL> select your_sequence.nextval from dual; #得到序列下一个值
SQL> select your_sequence.currval from dual; #得到序列当前值
SQL> select 7*9 from dual; #计算器

相关文章:

【Oracle】Oracle系列之七--表的创建与管理

文章目录 往期回顾前言1. 表的创建2. 表的修改3. 表中数据的增删改查(1)插入数据(2)删除数据(3)更新数据 4. 表的Merge5. 表的删除6. 表的重命名7. 表的索引(1)B树索引(2…...

C/C++运算符超详细讲解(系统性学习day5)

目录 前言 一、运算符的概念与分类 二、算术运算符 三、关系运算符 四、逻辑运算符 五、赋值运算符 六、运算符的优先级 总结 前言 本篇文章是对运算符的具体讲解。 一、运算符的概念与分类 概念: 运算符就是一种告诉编译器执行特定的数学或逻辑操作的符…...

Android 遍历界面所有的View

关于作者:CSDN内容合伙人、技术专家, 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 ,擅长java后端、移动开发、商业变现、人工智能等,希望大家多多支持。 目录 一、导读二、概览三、实践四、 推荐阅读 一、导读 我们…...

建筑能源管理(1)——建筑能源管理的概念

1、什么是建筑能源管理 目前,主要有三种不同的类型能源管理: (1)节约型能源管理 又称“减少能耗型”能源管理。这种管理方式着眼于能耗数量上的减少,采取限制用能的措施。例如,在非人流高峰时段停开部分电梯、在室外气温特别高时…...

SpringSecurity

明文存储密码,前加{noop}...

C++ vector模拟实现

目录 一.默认成员函数 二.扩容相关函数 三.[]重载 四.修改函数 五.迭代器 继上次写完string之后,可以写一个vector练练手以及熟悉其底层。vector是一个顺序表,相比普通数组不同点在于顺序表的数据必须是连续存放的。 一.默认成员函数 string是只存放字符…...

BUUCTF:[GYCTF2020]FlaskApp

Flask的网站,这里的功能是Base64编码解码,并输出 并且是存在SSTI的 /hint 提示PIN码 既然提示PIN,那应该是开启了Debug模式的,解密栏那里随便输入点什么报错看看,直接报错了,并且该Flask开启了Debug模式&am…...

好玩的调度技术

好玩的调度技术 文章目录 好玩的调度技术前言一、乱金柝-空间剥离二、拖拽编辑三、全端兼容 前言 最近感觉自己抑郁了,生态技术实在太庞大太复杂,所以我决定先停一段时间,在停下写生态的这两天写了几个调度的小玩意换换脑子,很有…...

Android 自定义加解密播放音视频(m3u8独立加密)

文章目录 背景加密流程音视频解密音视频播放结语 背景 当涉及App内部视频的时候,我们不希望被别人以抓包的形式来爬取我们的视频大视频文件以文件方式整个加密的话需要完全下载后才能进行解密当前m3u8格式虽然支持加密,但是ts格式的小视频可以独立播放的…...

常见的文件格式

一、C:\fakepath\新建文本文档.txt [object String] 实现方式&#xff1a; <input onchange"test(this.value)" type"file"></input><script>function test(e){console.log(e,Object.prototype.toString.call(e))}</script> 二、…...

浏览器输入url后回车展开过程

当你在浏览器中输入一个URL并敲下回车后&#xff0c;浏览器会执行一系列步骤来访问并展示网页。下面是浏览器访问网页的一般流程&#xff1a; DNS解析&#xff1a;浏览器首先会提取URL中的主机名&#xff0c;然后向DNS服务器发送请求&#xff0c;将主机名解析为对应的IP地址。这…...

Docker 容器创建命令说明

使用命令如下: docker run -itd --name=cluster -v /home/ClusterApp/cluster:/home/ClusterApp/cluster --restart=always --privileged=true -p 12000:12000 python:3.8 命令说明: docker run 创建一个容器并运行 docker run --help 可以查看所有的参数: 命令中参数说明 -…...

西瓜书读书笔记整理(六)—— 第六章 支持向量机

第六章 支持向量机 6.1 间隔与支持向量6.1.1 什么是支持向量机6.1.2 支持向量与间隔6.1.3 支持向量机的求解过程 6.2 对偶问题&#xff08;dual problem&#xff09;6.2.1 什么是对偶问题6.2.2 如何求解支持向量机的对偶问题 6.3 核函数&#xff08;kernel function&#xff09…...

蓝桥杯每日一题2023.9.23

4961. 整数删除 - AcWing题库 题目描述 分析 注&#xff1a;如果要进行大量的删除操作可以使用链表 动态求最小值使用堆&#xff0c;每次从堆中取出最小值的下标然后在链表中删除 注意long long 代码解释&#xff1a; while(k --){auto t q.top();q.pop();res t.first;i…...

C语言数组和指针笔试题(三)(一定要看)

目录 字符数组四例题1例题2例题3例题4例题5例题6例题7 结果字符数组五例题1例题2例题3例题4例题5例题6例题7结果字符数组六例题1例题2例题3例题4例题5例题6例题7 结果 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412;个…...

leetcode11 盛水最多的容器

题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 示例 输入&#xff1a;[1,8,6,2,5,4,8,…...

进入数据结构的世界

数据结构和算法的概述 一、什么是数据结构二、什么是算法三、如何去学习数据结构和算法四、算法的时间复杂度和空间复杂度4.1 算法效率4.2 大O的渐进表示法4.3 时间复杂度4.4 空间复杂度4.5 常见复杂度对比 一、什么是数据结构 数据结构是计算机存储、组织数据的方式。&#x…...

stm32之看门狗

STM32 有两个看门狗&#xff0c;独立看门狗和窗口看门狗&#xff0c;独立看门狗又称宠物狗&#xff0c;窗 口看门狗又称警犬。可用来检测和解决由软件错误引起的故障。两个看门狗的原理都是当计数器达到给定的超时值时&#xff0c;产生系统复位&#xff0c;对于窗口型看门狗同…...

纤维蛋白单体(FM)介绍

纤维蛋白单体&#xff08;FM&#xff09;是血栓形成的早期产物&#xff0c;是纤维蛋白原&#xff08;Fibrinogen&#xff0c;Fbg&#xff09;在凝血酶&#xff08;Thrombin&#xff09;的作用下&#xff0c;脱掉肽A&#xff08;Fibrinopeptide A&#xff0c;Fp A&#xff09;与…...

知识图谱实战导论:从什么是KG到LLM与KG/DB的结合实战

前言 本文侧重讲解&#xff1a; 什么是知识图谱LLM与langchain/数据库/知识图谱的结合应用 比如&#xff0c;虽说基于知识图谱的问答 早在2019年之前就有很多研究了&#xff0c;但谁会想到今年KBQA因为LLM如此突飞猛进呢 第一部分 知识图谱入门导论 //待更.. 第二部分 LLM与…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...