建表注意事项(2):表约束,主键自增,序列[oracle]

没有明确写明数据库时,默认基于oracle 

约束的分类

用于确保数据的完整性和一致性。约束可以分为 表级约束 和 列级约束,区别在于定义的位置和作用范围

  

复合主键约束: 主键约束中有2个或以上的字段

复合主键的列顺序会影响索引的使用,需谨慎设计

添加约束

oracle会自动为主键约束, 唯一约束, 外键约束创建索引, 以提高查询性能

在已存在的表上添加约束

添加约束注意: 

主键约束:  如果表中已经存在重复数据或 NULL 值,无法添加主键约束, 在对已经存在的表添加主键之前先检查数据, 处理重复值和NULL值

非空约束:如果表中已经存在NULL值,无法添加,添加前先检查是否存在NULL值

删除约束 

查看约束

使用数据字典视图

  • USER_CONSTRAINTS:查看当前用户拥有的约束。

  • ALL_CONSTRAINTS:查看当前用户可以访问的所有约束。

  • DBA_CONSTRAINTS:查看数据库中所有约束(需要DBA权限)。

启用/禁用约束 

启用约束

禁用约束

]

在使用列级约束时并没有定义约束的名称, 但是Oracle 会自动为约束生成一个默认名称。这些默认名称通常以 SYS_C 开头,后面跟随一串数字。要查看这些自动生成的约束名称,你可以查询数据字典视图 USER_CONSTRAINTS 或 ALL_CONSTRAINTS

外键约束

外键约束(Foreign Key Constraint)用于确保表之间的引用完整性。外键约束定义了一个表中的列(或一组列)必须与另一个表中的主键或唯一键列的值相匹配。外键约束可以防止在子表中插入无效的数据,并可以定义在删除或更新父表中的数据时的行为。

[ON DELETE CASCADE | ON DELETE SET NULL] 是用于定义外键约束时,指定当父表中的记录被删除时,子表中相关记录应如何处理的可选子句。

oracle的主键自增: 序列和触发器 

在 Oracle 数据库中, 通过以下两种方式实现主键自增

2种方法在高并发环境下的表现

在高并发环境下,Oracle如何确保自增值的唯一性

序列: 

触发器:

在插入数据时自动从序列中获取下一个值并赋值给主键列。触发器确保在插入操作时自动生成唯一的主键值

其他数据库的主键自增

mysql

 GaussDB高斯数据库

在多个表中使用同一个序列时,会导致表中的序列号不连续。为了避免这种情况,建议为每个表创建独立的序列,以确保每个表的自增值连续且不受其他表的影响。

PostgreSQL

方法一:  SERIAL 

方法二: IDENTITY

GENERATED BY DEFAULT AS IDENTITY >>默认情况下作为标识生成

序列 sequence

-- 插入数据时使用序列
INSERT INTO Users (UserID, UserName)
VALUES (序列名.NEXTVAL, 'John Doe');-- 获取当前序列值
SELECT 序列名.CURRVAL FROM dual;

查看序列

方法一: 

如果你有权限访问其他用户的序列,可以使用 ALL_SEQUENCES 视图; (语法如上)

如果你有DBA权限,可以使用 DBA_SEQUENCES 视图查看数据库中所有序列的信息;(语法如上)

方法二:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/11639.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线性回归的损失和优化02

线性回归的损失和优化 学习目标 知道线性回归中损失函数知道使用正规方程对损失函数优化的过程知道使用梯度下降法对损失函数优化的过程 假设刚才的房子例子,真实的数据之间存在这样的关系: 真实关系: 真实房子价格 0.02中心区域的距离 0.…

年化18%-39.3%的策略集 | backtrader通过xtquant连接qmt实战

原创内容第785篇,专注量化投资、个人成长与财富自由。 大年初五,年很快就过完了。 其实就是本身也只是休假一周,但是我们赋予了它太多意义。 周五咱们发布发aitrader v4.1,带了backtraderctp期货的实盘接口: aitra…

【数据结构】_链表经典算法OJ(力扣/牛客第二弹)

目录 1. 题目1:返回倒数第k个节点 1.1 题目链接及描述 1.2 解题思路 1.3 程序 2. 题目2:链表的回文结构 2.1 题目链接及描述 2.2 解题思路 2.3 程序 1. 题目1:返回倒数第k个节点 1.1 题目链接及描述 题目链接: 面试题 …

成绩案例demo

本案例较为简单,用到的知识有 v-model、v-if、v-else、指令修饰符.prevent .number .trim等、computed计算属性、toFixed方法、reduce数组方法。 涉及的功能需求有:渲染、添加、删除、修改、统计总分,求平均分等。 需求效果如下&#xff1a…

git基础使用--4---git分支和使用

文章目录 git基础使用--4---git分支和使用1. 按顺序看2. 什么是分支3. 分支的基本操作4. 分支的基本操作4.1 查看分支4.2 创建分支4.3 切换分支4.4 合并冲突 git基础使用–4—git分支和使用 1. 按顺序看 -git基础使用–1–版本控制的基本概念 -git基础使用–2–gti的基本概念…

Kafka下载

一、Kafka下载 下载地址:https://kafka.apache.org/downloads 二、Kafka安装 因为选择下载的是 .zip 文件,直接跳过安装,一步到位。 选择在任一磁盘创建空文件夹(不要使用中文路径),解压之后把文件夹内容…

nodejs:express + js-mdict 网页查询英汉词典,能播放声音

向 DeepSeek R1 提问: 我想写一个Web 前端网页,后台用 nodejs js-mdict, 实现在线查询英语单词 1. 项目结构 首先,创建一个项目目录,结构如下: mydict-app/ ├── public/ │ ├── index.html │ ├── st…

【自开发工具介绍】SQLSERVER的ImpDp和ExpDp工具01

1、开发背景 大家都很熟悉,Oracle提供了Impdp和ExpDp工具,功能很强大,可以进行db的导入导出的处理。但是对于Sqlserver数据库只是提供了简单的图形化的导出导入工具,在实际的开发和生产环境不太可能让用户在图形化的界面选择移行…

【Block总结】完全注意力Fully Attentional,同时捕捉空间和通道的注意力|即插即用

论文信息 标题: Fully Attentional Network for Semantic Segmentation论文链接: https://arxiv.org/pdf/2112.04108GitHub链接: https://github.com/maggiesong7/FullyAttentional 创新点 全注意力模块(FLA): 该模块能够在一个相似性图中同时捕捉空…

强化学习、深度学习、深度强化学习的区别是什么?

前言 深度强化学习就是 深度学习 和 强化学习 的结合体。它让计算机程序(也就是智能体)在特定环境中不断尝试,从错误中学习,最终找到最优的行动策略。 深度学习是AlphaGo从棋谱里学习,强化学些Alphazero 学习规则&am…

99.20 金融难点通俗解释:中药配方比喻马科维茨资产组合模型(MPT)

目录 0. 承前1. 核心知识点拆解2. 中药搭配比喻方案分析2.1 比喻的合理性 3. 通俗易懂的解释3.1 以中药房为例3.2 配方原理 4. 实际应用举例4.1 基础配方示例4.2 效果说明 5. 注意事项5.1 个性化配置5.2 定期调整 6. 总结7. 代码实现 0. 承前 本文主旨: 本文通过中…

笔灵ai写作技术浅析(四):知识图谱

知识图谱(Knowledge Graph)是一种结构化的知识表示方式,通过将知识以图的形式进行组织,帮助AI系统更好地理解和利用信息。在笔灵AI写作中,知识图谱技术被广泛应用于结构化组织各种领域的知识,使AI能够根据写作主题快速获取相关的背景知识、概念关系等,从而为生成内容提供…

基于python的Kimi AI 聊天应用

因为这几天deepseek有点状况,导致apikey一直生成不了,用kimi练练手。这是一个基于 Moonshot AI 的 Kimi 接口开发的聊天应用程序,使用 Python Tkinter 构建图形界面。 项目结构 项目由三个主要Python文件组成: 1. main_kimi.py…

python算法和数据结构刷题[5]:动态规划

动态规划(Dynamic Programming, DP)是一种算法思想,用于解决具有最优子结构的问题。它通过将大问题分解为小问题,并找到这些小问题的最优解,从而得到整个问题的最优解。动态规划与分治法相似,但区别在于动态…

JavaFX - 3D 形状

在前面的章节中,我们已经了解了如何在 JavaFX 应用程序中的 XY 平面上绘制 2D 形状。除了这些 2D 形状之外,我们还可以使用 JavaFX 绘制其他几个 3D 形状。 通常,3D 形状是可以在 XYZ 平面上绘制的几何图形。它们由两个或多个维度定义&#…

wax到底是什么意思

在很久很久以前,人类还没有诞生文字之前,人类就产生了语言;在诞生文字之前,人类就已经使用了语言很久很久。 没有文字之前,人们的语言其实是相对比较简单的,因为人类的生产和生活水平非常低下,…

从理论到实践:Linux 进程替换与 exec 系列函数

个人主页:chian-ocean 文章专栏-Linux 前言: 在Linux中,进程替换(Process Substitution)是一个非常强大的特性,它允许将一个进程的输出直接当作一个文件来处理。这种技术通常用于Shell脚本和命令行操作中…

Python 中最大堆和最小堆的构建与应用:以寻找第 k 大元素为例

引言 在数据处理和算法设计中,堆(Heap)是一种非常重要的数据结构。它是一种特殊的完全二叉树,具有高效的插入和删除操作特性,时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn)。堆主要分为最大堆和最小堆,…

使用Avalonia UI实现DataGrid

1.Avalonia中的DataGrid的使用 DataGrid 是客户端 UI 中一个非常重要的控件。在 Avalonia 中,DataGrid 是一个独立的包 Avalonia.Controls.DataGrid,因此需要单独通过 NuGet 安装。接下来,将介绍如何安装和使用 DataGrid 控件。 2.安装 Dat…

21款炫酷烟花代码

系列专栏 《Python趣味编程》《C/C趣味编程》《HTML趣味编程》《Java趣味编程》 写在前面 Python、C/C、HTML、Java等4种语言实现21款炫酷烟花的代码。 Python Python烟花① 完整代码:Python动漫烟花(完整代码) ​ Python烟花② 完整…