约束数据表列执行的规则。这些是用来防止无效的数据被输入到数据库中..这确保数据库中的数据的准确性和可靠性。

约束可以是列级或表级。仅适用于表级约束被应用到整个表的列级约束。为列定义的数据类型,本身是一种约束。例如,一列DATE类型的限制列为有效的日期格式。

以下是常用的限制,可在PostgreSQL。 www.yiibai.com

  • NOT NULL Constraint: 确保列不能有NULL值。 yiibai.com

  • UNIQUE Constraint: 确保所有列中的值是不同的。

  • PRIMARY Key: 唯一标识数据库表中的各行/记录。

  • FOREIGN Key: 约束基于其他表于的列的数据。

  • CHECK Constraint: CHECK约束,确保一列中的所有值满足一定条件。

  • EXCLUSION Constraint: 排除约束,确保指定的列(S)或表达式(次)使用指定运算(​​次),但并非所有这些比较,如果任意两行进行比较将返回TRUE。

NOT NULL 约束

默认情况下,列可以保存NULL值。如果不希望一列具有NULL值,那么需要在此列指定NULL约束定义。 NOT NULL约束总是写成一列约束。

NULL并不相同,因为没有数据,而是它代表着未知的数据。

例子:

例如,下面PostgreSQL的语句创建一个新的表称为COMPANY1,增加了五列,其中三个ID和姓名和年龄,指定不接受NULL值:

CREATE TABLE COMPANY1(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
); www.yiibai.com

UNIQUE 约束

唯一约束防止两个记录在一个特定的列具有相同的值。在COMPANY 表中,例如,可能要防止两个或两个以上的人具有相同的年龄。

实例:

例如,下面PostgreSQL的语句创建一个新的表称为COMPANY3,增加了五列。这里AGE列设置为唯一性,所以不能有两个同年龄记录:

CREATE TABLE COMPANY3(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL UNIQUE,
ADDRESS CHAR(50),
SALARY REAL DEFAULT 50000.00
);

PRIMARY KEY 约束

数据库表中的PRIMARY KEY约束唯一标识每条记录。可以有多个UNIQUE的列,但在一个表中只有一个主键。在设计数据库表的主键是重要的。主键是唯一的ID。

我们用他们来引用表中的行。主键成为其他表的外键,在创建表之间的关系。由于“长期存在编码监督”,在SQLite中可以是NULL的主键。这是与其他数据库的情况下 yiibai.com

主键是唯一标识数据库表中的各行/记录表中的一个字段。主键必须包含唯一值。主键列不能有NULL值。

一个表只能有一个主键,它可以由一个或多个字段。当多个字段作为主键,它们被称为复合键。

如果一个表有任何字段上定义一个主键,那么不能有两个具有相同值该字段的记录。

实例:

我们已经看到了各种上面的例子,已经创建了COMAPNY4,ID作为主键的表:

CREATE TABLE COMPANY4(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
); yiibai.com

FOREIGN KEY 约束

外键约束指定一列(或一组列)中的值的值必须符合另一个表中出现的一些行。我们说这是维持两个相关的表之间的引用完整性。它们被称为外键,因为约束是外部的,也就是说表的外部。有时也被称为外键引用的关键。

实例

例如,下面的PostgreSQL的语句创建一个新的表称为COMPANY5,增加了五列。

CREATE TABLE COMPANY6(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
); www.yiibai.com

例如,下面的PostgreSQL的语句创建一个新的表名为DEPARTMENT1,增加了三列。列EMP_ID是外键引用表的ID字段COMPANY6。  www.yiibai.com

CREATE TABLE DEPARTMENT1(
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT references COMPANY6(ID)
);

CHECK 约束

检查约束允许的条件进入创纪录的检查值。如果条件值为false,记录违反了约束,并没有写进入到表。

实例:

例如,下面的PostgreSQL的语句创建一个新的表称为COMPANY5,增加了五列。在这里,我们添加了一个检查SALARY列,所以不能有任何的工资零:

CREATE TABLE COMPANY5(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL CHECK(SALARY > 0)
);

EXCLUSION 约束

排阻限制确保在使用指定的运算符的指定列或表达式进行比较,如果任何两行,这些操作符的比较中的至少一个将返回false或null。

例子

例如,下面的PostgreSQL的语句创建一个新的表称为COMPANY7,增加了五列。在这里,我们添加EXCLUDE约束:

CREATE TABLE COMPANY7(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT ,
AGE INT ,
ADDRESS CHAR(50),
SALARY REAL,
EXCLUDE USING gist
(NAME WITH =,
AGE WITH <>)
);

这里使用的要点是建立和使用强制执行的索引类型。 www.yiibai.com

需要来执行命令CREATE EXTENSION btree_gist,这将安装btree_gist的扩展,它定义在普通的标量数据类型排斥约束。

正如我们所执行的年龄一样,让我们来看看这个插入到表中的记录: www.yiibai.com

 INSERT INTO COMPANY7 VALUES(1, 'Paul', 32, 'California', 20000.00 );
INSERT INTO COMPANY7 VALUES(2, 'Paul', 32, 'Texas', 20000.00 );
INSERT INTO COMPANY7 VALUES(3, 'Allen', 42, 'California', 20000.00 );

对于插入语句,记录添加到的COMPANY7表中。对于第三个INSERT语句显示了以下错误:

ERROR:  duplicate key value violates unique constraint "company7_pkey"
DETAIL: Key (id)=(3) already exists.

删除约束:

要删除一个约束,需要知道它的名字。如果名字知道这是很容易删除。否则,需要找出系统生成的名称。 psql的命令\d表名可以帮助这里的一般语法是:

ALTER TABLE table_name DROP CONSTRAINT some_name; yiibai.com 

从头开始学习数据库及ADO.NET之PostgreSql字段约束——竹子整理的更多相关文章

  1. 从头开始学习数据库及ADO.NET——竹子整理

    目前为止,学习编程一年有余,写过管理系统,写过商城,写过桌面,接触的多了,乱七八糟的点太多,一堆前段框架,后台类库,纷纷杂杂,更新迭代之快也是令人咋舌.于是我就在想,作为一名程序员,哪些内容是实打实的 ...

  2. 15数据库与ADO.Net

    数据库与ADO.Net 数据库与ADO.Net 8.1   数据库基本概念 数据库提供了一种将信息集合在一起的方法.数据库应用系统主要由三部分组成:数据库管理系统(DBMS),是针对所有应用的,例如A ...

  3. 新手学习数据库(一)用Powerdesigner设计数据库

    说明: 一.学会用开发语言进行数据库编程,其关键是在于学会sql语言,开发语言只不过给程序员提供了一个操作数据库的接口罢了. 二. 本人也是初学者,采用的数据库设计软件是powerdesigner.利 ...

  4. 前端学习数据库MYSQL

    这篇文章主要写了 1.数据库MYSQL 2.基本上会遇到的所有SQL语句 数据库可视化软件------Navicat 数据库里边存放的是表,表与表之间是有关联的,而且可以对表进行相关操作(增,删,改, ...

  5. 通过pymysql程序debug学习数据库事务、隔离级别

    问题 今天在使用pymysql连数据库的时候,出现了一个bug,查询数据库某个数据,但是在我在数据库中执行sql语句改变数据后,pymsql的查询依然没有发生改变. 代码如下: # 5.6.10 co ...

  6. ASP.NET MVC 5 学习教程:数据迁移之添加字段

    原文 ASP.NET MVC 5 学习教程:数据迁移之添加字段 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字符 ...

  7. SQL查询数据库中所有指定类型的字段名称和所在的表名

    --查询数据库中所有指定类型的字段名称和所在的表名 --eg: 下面查的是当前数据库中 所有字段类型为 nvarchar(max) 的字段名和表名 SELECT cols.object_id , co ...

  8. Ext.Net学习笔记21:Ext.Net FormPanel 字段验证(validation)

    Ext.Net学习笔记21:Ext.Net FormPanel 字段验证(validation) 作为表单,字段验证当然是不能少的,今天我们来一起看看Ext.Net FormPanel的字段验证功能. ...

  9. oracle数据库根据不同条件给同一字段修改相应的值:

    oracle数据库根据不同条件给同一字段修改相应的值: 例如:根据职务调整雇员的工资,如果职务为“SALESMAN”或者“ANALYST”工资上调100元,如果职务为“MANAGER”工资上调200元 ...

随机推荐

  1. i++ ++i i=i+1 和i+=1

    这几个运算符的差别总是过一段时间就爱搞混,每次需要百度,还是自己记录一下方便查阅. int i=0; System.out.println(i++); 输出:0 int i=0; System.out ...

  2. spring transaction 初识

    spring 事务初识 1.spring事务的主要接口,首先盗图一张,展示出spring 事务的相关接口.Spring并不直接管理事务,而是提供了多种事务管理器,他们将事务管理的职责委托给Hibern ...

  3. vue安装及环境搭建

    vue项目在pycharm里运行需要安装一个插件,打开settings,找到plugins,里面搜索vue.js,点击安装. vue安装 先安装node.js npm install -g @vue/ ...

  4. cron 任务执行表达式

    1.来源 开始我还不知道cron到底来源于哪里,不求甚解的我也没做过多了解,现在突然用到所以写一下. cron计划任务  其实只是linux 一个执行计划的一个工具或者执行程序. 在Linux系统中, ...

  5. ORACLE 数据库的级联查询 一句sql搞定(部门多级)

    在ORACLE 数据库中有一种方法可以实现级联查询   select  *                //要查询的字段 from table              //具有子接点ID与父接点I ...

  6. 【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即时聊天系统:7.项目介绍之架构(1)

    欢迎阅读我的开源项目<迷你微信>服务器与<迷你微信>客户端 前言 <迷你微信>服务器端是使用Java语言,Mina框架编写的,一个良好的架构关系到后期迭代的方便程度 ...

  7. ABAP Netweaver, Hybris Commerce和SAP 云平台的登录认证

    ABAP Netweaver 在事务码SICF里选择一个服务,在明细页面对Procedure字段点击F1,查看Logon Procedure的帮助文档. 通过这个链接打开对应的帮助文档,可以看到下列七 ...

  8. 实现Hbase的分页

    作者:R星月 出处:http://www.cnblogs.com/rxingyue 欢迎转载,也请保留这段声明.谢谢! 做一个项目中由于数据量比较大,并且需要定时增量分析,做了hbase的分页.项目中 ...

  9. bzoj4622 [NOI 2003] 智破连环阵

    Description B国在耗资百亿元之后终于研究出了新式武器——连环阵(Zenith Protected Linked Hybrid Zone).传说中,连环阵是一种永不停滞的自发性智能武器.但经 ...

  10. 【BZOJ2427】[HAOI2010] 软件安装(缩点+树形DP)

    点此看题面 大致题意: 有\(N\)个软件,每个软件有至多一个依赖以及一个所占空间大小\(W_i\),只有当一个软件的直接依赖和所有的间接依赖都安装了,它才能正常工作并造成\(V_i\)的价值.求在容 ...