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

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

约束的分类

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

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

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

添加约束

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

在已存在的表上添加约束

添加约束注意:

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

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

删除约束

查看约束

使用数据字典视图

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

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

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

启用/禁用约束

启用约束

禁用约束

]

在使用列级约束时并没有定义约束的名称, 但是Oracle 会自动为约束生成一个默认名称。这些默认名称通常以 SYS_C 开头,后面跟随一串数字。要查看这些自动生成的约束名称,你可以查询数据字典视图 USER_CONSTRAINTSALL_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 视图查看数据库中所有序列的信息;(语法如上)

方法二:

相关推荐
海市公约9 小时前
MySQL更新语句执行全流程:从Buffer Pool修改到二阶段提交
数据库·mysql·binlog·innodb·undo log·二阶段提交·update执行原理
颂love9 小时前
MySQL的执行流程
android·数据库·mysql
程序leo源10 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#
这个DBA有点耶10 小时前
COUNT进阶:超大表的近似计数与HyperLogLog
数据库·sql·程序人生·学习方法·dba·改行学it
武子康10 小时前
调查研究-138 全球机器人产业深度调研报告【01 篇】:市场规模、竞争格局与商业化成熟 2026
服务器·数据库·ai·chatgpt·机器人·具身智能
zhojiew10 小时前
在本地PostgreSQL使用pgvector构建生成式 AI 应用的实践
数据库·人工智能·postgresql
Yushan Bai10 小时前
EXADATA X5数据库一体机节点login: failure forking: Cannot allocate memory问题处理
数据库·oracle·vr
KaMeidebaby11 小时前
卡梅德生物技术快报|噬菌体肽库展示技术构建 Mhp168‑Hsp70 定向随机肽库:流程、质控与数据结果
前端·数据库·其他·百度·新浪微博
SelectDB11 小时前
Agent 时代,为什么传统的可观测方案不适用了?
大数据·数据库·数据分析
snowfoootball12 小时前
解决低版本navicat连接PostgreSQl的不兼容报错问题
数据库·postgresql