建表注意事项(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 视图查看数据库中所有序列的信息;(语法如上)

方法二:

相关推荐
p***92481 小时前
深入理解与实战SQL IFNULL()函数
数据库·sql·oracle
q***81643 小时前
MySQL:数据查询-limit
数据库·mysql
p***92483 小时前
DBeaver连接本地MySQL、创建数据库表的基础操作
数据库·mysql
JIngJaneIL5 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
晚风吹人醒.5 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件
Y***98515 小时前
DVWA靶场通关——SQL Injection篇
数据库·sql
Yawesh_best5 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
蒋士峰DBA修行之路5 小时前
实验二十八 SQL PATCH调优
数据库·sql·gaussdb
I***t7166 小时前
一条sql 在MySQL中是如何执行的
数据库·sql·mysql
一 乐6 小时前
应急知识学习|基于springboot+vue的应急知识学习系统(源码+数据库+文档)
数据库·vue.js·spring boot