【PostgreSQL】约束-检查约束

【PostgreSQL】约束链接

检查
唯一
主键
外键
排他

检查约束

在计算机科学和软件工程中,约束检查是指在程序运行时对变量或数据进行检查,确保其满足一定的规则或条件。这些规则或条件可以是预定义的,也可以是通过编程语言的约束机制定义的。

约束检查可以用于检查以下方面:

  • 数据类型约束:确保变量的数据类型符合预期,例如一个变量应该是整数类型。
  • 范围约束:确保变量的值在一定范围内,例如一个年龄变量应该在0到100之间。
  • 唯一性约束:确保数据的唯一性,例如一个用户名应该是唯一的。
  • 关联约束:确保不同数据之间的关系和一致性,例如一个学生的年级应该与其所在班级相对应。
  • 条件约束:根据特定条件对变量或数据进行限制,例如只有在指定条件满足时,才能执行某个操作。
    约束检查通常在程序的运行时进行,可以通过条件语句、异常处理等方式实现。如果变量或数据不满足约束条件,程序可以采取相应的处理措施,例如抛出异常、终止程序或给出警告信息。

约束检查对于保证程序的正确性和可靠性至关重要,可以避免一些潜在的错误和异常情况的发生,提高程序的质量和性能。

PostgreSQL 检查约束

检查约束是最通用的约束类型。它允许您指定特定列中的值必须满足布尔值(真值)表达式。例如,要要求产品价格为正,您可以使用:

CREATE TABLE products (product_no integer,name text,price numeric CHECK (price > 0)
);

如您所见,约束定义位于数据类型之后,就像默认值定义一样。默认值和约束可以按任意顺序列出。检查约束由关键字和括号中的表达式组成。检查约束表达式应涉及受此约束的列,否则约束将没有太大意义。

还可以为约束指定一个单独的名称。这阐明了错误消息,并允许您在需要更改约束时引用约束。语法为:

CREATE TABLE products (product_no integer,name text,price numeric CONSTRAINT positive_price CHECK (price > 0)
);

因此,若要指定命名约束,请使用关键字CONSTRAINT后跟标识符,后跟约束定义。(如果不以这种方式指定约束名称,系统将为您选择一个名称。

CHECK 约束还可以引用多个列。假设您存储了正常价格和折扣价格,并且您希望确保折扣价格低于正常价格:

CREATE TABLE products (product_no integer,name text,price numeric CHECK (price > 0),discounted_price numeric CHECK (discounted_price > 0),CHECK (price > discounted_price)
);

前两个约束应该看起来很熟悉。第三个使用新语法。它不附加到特定列,而是在逗号分隔的列列表中显示为单独的项目。列定义和这些约束定义可以按混合顺序列出。

我们说前两个约束是列约束,而第三个约束是表约束,因为它是与任何一个列定义分开编写的。列约束也可以写成表约束,而反之则不一定可行,因为列约束应该只引用它所附加到的列。(PostgreSQL 不强制执行该规则,但如果您希望表定义与其他数据库系统一起使用,则应遵循该规则。上面的例子也可以写成:

CREATE TABLE products (product_no integer,name text,price numeric,CHECK (price > 0),discounted_price numeric,CHECK (discounted_price > 0),CHECK (price > discounted_price)
);

甚至:

CREATE TABLE products (product_no integer,name text,price numeric CHECK (price > 0),discounted_price numeric,CHECK (discounted_price > 0 AND price > discounted_price)
);

可以采用与列约束相同的方式将名称分配给表约束:

CREATE TABLE products (product_no integer,name text,price numeric,CHECK (price > 0),discounted_price numeric,CHECK (discounted_price > 0),CONSTRAINT valid_discount CHECK (price > discounted_price)
);

应该注意的是,如果 check 表达式的计算结果为 true 或 null 值,则满足 CHECK 约束。由于如果任何操作数为 null,大多数表达式的计算结果为 null 值,因此它们不会阻止约束列中的 null 值。若要确保列不包含 null 值,可以使用下一节中描述的 not-null 约束。

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

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

相关文章

HCIA-Datacom题库(自己整理)——ACL多选

1.基于ACL规则,ACL可以划分为以下哪些类? 基本ACL 二层ACL 用户ACL 高级ACL 2.ACL分类有哪些? 基本ACL 高级ACL 二层ACL 用户自定义ACL 3.路由器A的G0/0/1接口配置信息如图,下列说法正确的有? 本接口不会转发收到的FTP报文 本接口可以和其它路由器建立OSPF的邻居…

MyBatis之关联查询

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 MyBatis之关联查询 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、一对一关联查询二…

javafx

JavaFX JavaFX简介 JavaFX是一个用于创建富客户端应用程序的图形用户界面(GUI)框架。它是Java平台的一部分,从Java 8开始成为Java的标准库。 JavaFX提供了丰富的图形和多媒体功能,使开发人员能够创建具有吸引力和交互性的应用程…

simulink代码生成(九)—— 串口显示数据(纸飞机联合调试)

纸飞机里面的协议是固定的,必须按照协议配置; (1)使用EasyHEX协议,测试int16数据类型 测试串口发出的数据是否符合? 串口接收数据为: 打开纸飞机绘图侧: (1&#xff09…

机器学习(三) -- 特征工程(2)

系列文章目录 机器学习(一) -- 概述 机器学习(二) -- 数据预处理(1-3) 机器学习(三) -- 特征工程(1-2) 未完待续…… 目录 系列文章目录 前言 三、特征…

精准掌控 Git 忽略规则:定制化 .gitignore 指南

🧙‍♂️ 诸位好,吾乃诸葛妙计,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。 📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。 &…

前端中级算法题

前端中级算法题 反转字符串 编写一个函数,接受一个字符串作为输入,并返回反转后的字符串。 示例: function reverseString(str) {return str.split().reverse().join(); }reverseString(hello); // 输出: olleh 找出数组中的最大值 编写一个函…

统信UOS操作系统上扩容数据盘

原文链接:统信UOS操作系统上扩容数据盘 hello,大家好啊!今天我要给大家介绍的是在统信UOS操作系统上扩容数据盘的方法。在使用UOS的过程中,随着数据的不断增加,原有磁盘空间可能会变得不足,这时候就需要对数…

【2024年必看】私域裂变的10大秘籍,让你轻松玩转市场!

在私域时代,企业需要不断地寻找新的用户来扩大自己的用户群体。然而,随着获客成本的逐渐升高,传统的广告宣传和推广方式已经不再是最优选择。因此,“老带新”的裂变策略成为了企业拉新的首选。 通过给予老用户奖励,刺…

汽车标定技术(十四)--标定数据固化方法简介

目录 1.标定数据固化方法 1.1 基于XCP固化 1.2 基于UDS固化 2. 具体实现形式 2.1 CAN

到底是1K=1024还是1K=1000呢?

问题 举例:15GB的数据块的大小是15*2的30次方*8bit;而10Gbit/s的传输速率是10*10的9次方bit/s 那么问题来了:这个G到底是2的30次方还是10的9次方呢??? 理解 由于在计算机内部采用的是二进制&#xff…

分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测

分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测 目录 分类预测 | Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现DBO-SVM蜣螂算法优化支持向量机多特征分类预测(完整…

第十三章 创建Callout Library - 兼容的语言和编译器

文章目录 第十三章 创建Callout Library - 兼容的语言和编译器兼容的语言和编译器标注库 Runup 和 Rundown 函数 第十三章 创建Callout Library - 兼容的语言和编译器 兼容的语言和编译器 使用 $ZF Callout Interface,可以用外部语言编写函数并从 ObjectScript 调…

html引入react以及hook的使用

html引入react 效果代码注意 效果 分享react demo片段的时候&#xff0c;如果是整个工程项目就有点太麻烦了&#xff0c;打开速度慢&#xff0c;文件多且没必要&#xff0c;这个时候用html就很方便。 在html中能正常使用useState 和 useEffect 等hook。 代码 <!DOCTYPE htm…

2024三掌柜赠书活动第一期:TVM编译器原理与实践

目录 前言TVM编译器的实现过程关于《TVM编译器原理与实践》编辑推荐内容简介作者简介图书目录书中前言/序言《TVM编译器原理与实践》全书速览结束语 前言 随着人工智能的发展&#xff0c;计算机视觉、自然语言处理和语音识别等领域的需求不断增加。为了更好地满足这些需求&am…

【Web】CTFSHOW元旦水友赛部分wp

目录 ①easy_include ②easy_web ③easy_login web一共5题&#xff0c;我出了3题&#xff0c;巧的是好像师傅们也只出了3题&#xff0c;跨年拿旗还是很快乐的&#xff0c;下面直接贴出自己的wp. ①easy_include pearcmd不解释 这里主要是 &#xff0c;file://协议支持以fi…

xdoj综合,数字分解排序,文件排序,股票

数字分解排序 问题描述 输入一个9位以内的正整数n&#xff0c;按数值从高到低的顺序输出n的各位数字。 输入说明 一个正整数n(0<n<1000000000) 输出说明 按数值从高到低的顺序输出n的各位数字&#xff0c;数字之间用空格隔开 输入样例 564391 输出样例 …

BIOMOD2提供运行多达10余种物种分布模拟模型

随着生物多样性全球大会的举办&#xff0c;不论是管理机构及科研单位、高校都在积极准备&#xff0c;根据国家林草局最新工作指示&#xff0c;我国将积极整合、优化自然保护地&#xff0c;加快推进国家公园体制试点&#xff0c;构建以国家公园为主体的自然保护地体系。针对我国…

Text visualization : pipeline,wordle,phrase net,word tree

Text visualization&#xff08;文本可视化&#xff09;是一种将文本数据转换为可视形式的技术&#xff0c;以便更好地理解和分析文本内容。以下是可能会涉及的几个知识点&#xff1a; 1. Pipeline&#xff08;流程图&#xff09;&#xff1a;Pipeline是指将文本可视化的过程划…

网络安全B模块(笔记详解)- 数字取证

数据分析数字取证-attack 1.使用Wireshark查看并分析Windows 7桌面下的attack.pcapng数据包文件,通过分析数据包attack.pcapng找出恶意用户的IP地址,并将恶意用户的IP地址作为Flag(形式:[IP地址])提交; 解析:http.request.method==POST ​ Flag:[172.16.1.102] 2.继续…