唯一约束

news2024/11/22 15:49:13

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645

唯一约束

唯一约束的特点是在某一个列上的内容不允许出现重复。

例如,现在要收集用户的信息,假设包含编号(mid)、姓名(name)、E-mail(email)

很明显 email 的数据不可能重复,所以就可以使用 unique约束完成

-- 删除数据表
drop table member purge;
-- 创建数据表
create table member(
	mid    number,
    name    varchar2(20)    not null,
    email    varchar2(20)    unique
);
SQL> set linesize 250
SQL> -- 删除数据表
SQL> drop table member purge;

表已删除。

SQL> -- 创建数据表
SQL> create table member(
  2  mid    number,
  3      name    varchar2(20)    not null,
  4      email    varchar2(20)    unique
  5  );

表已创建。

上面数据表中添加了 email 字段为唯一约束

下面来看一下这个约束的作用。首先向该表添加一个数据

SQL> INSERT INTO member(mid,name,email) VALUES (3,'张三','hello@hello.hello') ;

已创建 1 行。

此时该行数据正确地添加到数据表中,然后再继续添加下面这条语句

可以看出 email 这个字段的值仍然是 hello@hello.hello,这就违反了唯一约束的限制

SQL> INSERT INTO member(mid,name,email) VALUES (1,'李四','hello@hello.hello') ;
INSERT INTO member(mid,name,email) VALUES (1,'李四','hello@hello.hello')
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.SYS_C008261)

在 Oracle 中约束本身也称为一个对象,也就是说只要你设置了约束,那么 Oracle 会自动为你创建与之相关的约束对象信息

而这些过程都是自动完成的

既然是对象,所有的对象都会在数据字典中进行保存,用户的约束数据字典应该使用 user_constraint

COL owner FOR A30 ;
COL constraint_name FOR A30 ;
COL table_name FOR A30 ;
SELECT owner,constraint_name,table_name FROM user_constraints ;
SQL> SELECT owner,constraint_name,table_name FROM user_constraints ;

OWNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONSTRAINT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SCOTT
FK_DEPTNO
EMP

SCOTT
PK_EMP
EMP

OWNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONSTRAINT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SCOTT
SYS_C008233
PRODUCT

SCOTT
PK_DEPT

OWNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONSTRAINT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
DEPT

SCOTT
SYS_C008234
CUSTOMER

SCOTT

OWNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONSTRAINT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SYS_C008260
MEMBER

SCOTT
SYS_C008261
MEMBER


已选择 7 行。

我们可以发现“user_constraints”数据字典只是告诉用户约束属于那张表

但是并没有告诉用户约束具体是哪个列上的,所以此时可以利用另外一个数据字典 user_cons_column

COL owner FOR A30 ;
COL constraint_name FOR A20 ;
COL table_name FOR A20 ;
COL column_name FOR A30 ;
SELECT owner,constraint_name,table_name,column_name FROM user_cons_columns ;
SQL> SELECT owner,constraint_name,table_name,column_name FROM user_cons_columns ;

OWNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONSTRAINT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
COLUMN_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SCOTT
PK_EMP
EMP
EMPNO


OWNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONSTRAINT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
COLUMN_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SCOTT
FK_DEPTNO
EMP
DEPTNO


OWNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONSTRAINT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
COLUMN_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SCOTT
SYS_C008233
PRODUCT
PRODUCTNAME


OWNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONSTRAINT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
COLUMN_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SCOTT
PK_DEPT
DEPT
DEPTNO


OWNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONSTRAINT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
COLUMN_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SCOTT
SYS_C008234
CUSTOMER
NAME


OWNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONSTRAINT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
COLUMN_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SCOTT
SYS_C008260
MEMBER
NAME


OWNER
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CONSTRAINT_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
TABLE_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
COLUMN_NAME
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SCOTT
SYS_C008261
MEMBER
EMAIL


已选择 7 行。

唯一约束并不像非空约束那样,可以很明确地告诉用户是哪个列上出现问题

所以为了解决这样的错误,可以采用“约束简写 _ 字段”来定义这个约束

例如唯一约束的简写是“UK”,现在是在 email 字段上设置了唯一约束

所以可以使用“uk_email”来作为此约束的名字。如果要指定名字,则必须在约束创建的时候完成,利用 CONSTRAINT 关键字定

-- 产出数据表
drop table member purge;
-- 创建数据表
create table member(
	mid		number,
    name	varchar2(20)	not null,
    email	varchar2(20),
    constraint    uk_email  unique(email)
);
SQL> create table member(
  2  mid number,
  3      name varchar2(20)not null,
  4      email varchar2(20),
  5      constraint    uk_email  unique(email)
  6  );

表已创建。

从现在开始,只要是进行数据表创建,约束一定要设置名字。约束的名字绝对不能够重复

如果说现在设置了唯一约束,但是保存的是 null 呢?null 并不在唯一约束的判断范畴之中

也就是说当保存的是 null 的时候,不认为违反了唯一约束条

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot(文件上传功能,阿里云OSS存储,几种配置文件用法)【详解】

目录 一、新增员工 二、文件上传-技术点 1. 文件上传功能 1.客户端上传文件三要素 2 服务端接收文件 Controller接收文件示例 修改允许上传的文件大小 2. 本地存储文件 3. 阿里云OSS存储(这里只写一种,可以用其它的) 1.介绍 2.开通…

第 126 场 LeetCode 双周赛题解

A 求出加密整数的和 模拟 class Solution { public:int sumOfEncryptedInt(vector<int> &nums) {int res 0;for (auto x: nums) {string s to_string(x);char ch *max_element(s.begin(), s.end());for (auto &c: s)c ch;res stoi(s);}return res;} };B 执行…

QT网络编程之实现UDP广播发送和接收

推荐一个不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;内容全面&#xff0c;作为入门科普和学习提升都不错&#xff0c;分享一下给大家&#xff1a;前言https://www.captainbed.cn/ai 一.UDP通信 1.QT中实现UDP通信主要用到了以下类&#xff1a;QUdpSocket、QHost…

Type-C接口介绍

1、USB介绍 &#xff08;1&#xff09;标准USB A型连接器&#xff08;左&#xff09;及B型连接器&#xff08;右&#xff09; 引脚1 VCC&#xff08;5V&#xff09; 引脚2 Data- 引脚3 Data 引脚4 接地 &#xff08;2&#xff09;Micro USB 引脚定义及OTG (USB-HOST) …

如何使用GIT

如何使用GIT https://www.runoob.com/w3cnote/git-five-minutes-tutorial.html 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语…

Vue | 使用 ECharts 绘制折线图

目录 一、安装和引入 ECharts 二、使用 ECharts 2.1 新增 div 盒子 2.2 编写画图函数 2.3 完整代码结构 三、各种小问题 3.1 函数调用问题 3.2 数据格式问题 3.3 坐标轴标签问题 3.4 间隔显示标签 参考博客&#xff1a;Vue —— ECharts实现折线图 本文是在上…

【Linux】Shell编程【一】

shell是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内核的服务。 Shell属于内置的…

JAVA学习9

目录 一.继承 1.继承的原理&#xff1a; 2.继承的细节&#xff1a; 3.继承的本质&#xff1a; 二.super的使用&#xff1a; 1.基本介绍&#xff1a; 2.注意事项与使用细节&#xff1a;&#xff08;1&#xff09;访问父类的属性super.属性名&#xff0c;但不能访问父类的p…

快速从0-1完成聊天室开发——环信ChatroomUIKit功能详解

聊天室是当下泛娱乐社交应用中最经典的玩法&#xff0c;通过调用环信的 IM SDK 接口&#xff0c;可以快速创建聊天室。如果想根据自己业务需求对聊天室应用的 UI界面、弹幕消息、礼物打赏系统等进行自定义设计&#xff0c;最高效的方式则是使用环信的 ChatroomUIKit 。 文档地址…

个税计算器(Python)

任务描述 目前我国个人所得税计算公式如下&#xff1a; 应纳个人所得税税额 (工资薪金所得 -五险一金 - 个税免征额)适用税率-速算扣除数 个税免征额为5000元/月&#xff0c;2018年10月1日起调整后&#xff0c;也就是2018年实行的7级超额累进个人所得税税率表如下&#xff1…

【组合回溯】Leetcode 131. 分割回文串

【组合回溯】Leetcode 131. 分割回文串 解法 切割组合回溯 ---------------&#x1f388;&#x1f388;131. 分割回文串 题目链接&#x1f388;&#x1f388;------------------- 解法 切割组合回溯 全局变量&#xff1a;result存储所有path的集合&#xff0c;path用来记录切…

新!PCA+DBO+K-means聚类,蜣螂优化算法DBO优化K-means,适合学习,也适合发paper。

PCADBOK-means聚类&#xff0c;蜣螂优化算法DBO优化K-means&#xff0c;适合学习&#xff0c;也适合发paper。 一、 蜣螂优化算法 摘要&#xff1a;受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发&#xff0c;提出了一种新的基于种群的优化算法(Dung Beetle Optimizer, DBO…

拜占庭将军问题相关问题

1、拜占庭将军问题基本描述 问题 当我们讨论区块链共识时&#xff0c;为什么会讨论拜占庭将军问题&#xff1f; 区块链网络的本质是一个分布式系统&#xff0c;在存在恶意节点的情况下&#xff0c;希望 整个系统当中的善良节点能够对于重要的信息达成一致&#xff0c;这个机…

8.6 Springboot项目实战 Spring Cache注解方式使用Redis

文章目录 前言一、配置Spring Cache1. @EnableCaching2. 配置CacheManager3. application.properties配置二、使用注解缓存数据1. 使用**@Cacheable** 改造查询代码2. 使用**@CacheEvict** 改造更新代码前言 在上文中我们使用Redis缓存热点数据时,使用的是手写代码的方式,这…

每日学习笔记:C++ STL 的forward_list

定义 特点 操作函数 元素查找、移除或安插 forward_list::emplace_after arg...指的是元素构造函数的参数&#xff08;0~N个&#xff09; #include <iostream> #include <memory> #include <list> #include <forward_list> using namespace std;class…

【数据结构】深入理解AVL树:实现和应用

AVL树是一种自平衡的二叉搜索树&#xff0c;它能够保持良好的平衡性质&#xff0c;使得在最坏情况下的时间复杂度也能保持在对数级别。本文将深入介绍AVL树的原理、实现和应用&#xff0c;并通过示例代码演示其基本操作。 文章目录 什么是AVL树&#xff1f;AVL树的实现在AVL树…

Python主成分分析和聚类分析

项目背景 最近遇到这样一个需求&#xff1a; Python主成分分析和聚类分析&#xff1f;商业场景你数据不变展示&#xff0c;主要是用来划分用户等级&#xff0c;用来人文关怀。 基本概念 主成分分析&#xff08;PCA&#xff09;是一种常用的数据降维技术&#xff0c;通过线性变…

力扣巧题:翻倍链表的元素

此题的巧妙之处在于题目数据非常大只能在原链表中解决&#xff0c;遇到进一的问题如果尽早判断就不会有问题&#xff0c;而且第一位的判断非常巧妙 struct ListNode* doubleIt(struct ListNode* head){struct ListNode* Node (struct ListNode*)malloc(sizeof(struct ListNod…

ts版本微信小程序在wxml保存文件不刷新页面的解决办法

将project.config.json中的skylineRenderEnable改为false "skylineRenderEnable": false