首页 > 其他分享 >MogDB openGauss数据完整性约束简介

MogDB openGauss数据完整性约束简介

时间:2024-03-15 15:23:34浏览次数:37  
标签:数据完整性 MogDB 约束 street warehouse openGauss NULL id CHECK

MogDB/openGauss 数据完整性约束简介

本文出处:https://www.modb.pro/db/124910

创建基本表的同时,还可以指定表中数据完整性约束,例如在创建 warehouse 基本表时,通过分析可以得到如下结论:

  1. 不同仓库必须有不同的 w_id,且 w_id 不能为 NULL。
  2. 仓库必须有具体的名称,不能为 NULL。
  3. 仓库所在的街区地址长度不能为 0。
  4. 仓库所在国家默认为“CN”。

因此可以在创建 warehouse 基本表时指定这些约束。

例 1:创建带有完整性约束的基本表,语句如下:

CREATE TABLE warehouse
(
  w_id SMALLINT PRIMARY KEY,
  w_name VARCHAR(10) NOT NULL,
  w_street_1 VARCHAR(20) CHECK(LENGTH(w_street_1)<>0),
  w_street_2 VARCHAR(20) CHECK(LENGTH(w_street_1)<>0),
  w_city VARCHAR(20),
  w_state CHAR(2) DEFAULT 'CN',
  w_zip CHAR(9),
  w_tax DECIMAL(4,2),
  w_ytd DECIMAL(12,2)
);

如果向 warehouse 基本表中写入不符合完整性约束的值,那么数据不能被写入,数据库会提示错误。

例 2:向 w_name 列中写入 NULL 值,不符合完整性约束,写入数据时会报错,数据写入不成功,语句如下:

INSERT INTO warehouse VALUES(1,NULL,'','',NULL,'CN',NULL,1.0,1.0);
ERROR:  null value in column "w_name" violates not-null constraint
DETAIL:  Failing row contains (1, null, null, null, null, CN, null, 1.00, 1.00).

除了在列定义之后指定完整性约束之外,还可以使用表级的完整性约束来指定。

例 3:在表定义上指定完整性约束,NULL 约束只能在列定义上指定:

CREATE TABLE warehouse
(
  w_id SMALLINT,
  w_name VARCHAR(10) NOT NULL, --设置NULL约束
  w_street_1 VARCHAR(20),
  w_street_2 VARCHAR(20),
  w_city VARCHAR(20),
  w_state CHAR(2) DEFAULT 'CN',  --设置默认值
  w_zip CHAR(9),
  w_tax DECIMAL(4,2),
  w_ytd DECIMAL(12,2),
  CONSTRAINT w_id_pkey PRIMARY KEY(w_id),  --增加主键约束
  CONSTRAINT w_street_1_chk CHECK(LENGTH(w_street_1) < 100),  --增加CHECK约束
  CONSTRAINT w_street_2_chk CHECK(LENGTH(w_street_2) < 100),  --增加CHECK约束
);

当一个表中的某一列或多列恰好引用的是另一个表的主键(或具有唯一性)时,可以将其定义为外键,外键表示两个表之间相互的关联关系。外键的定义可以直接在属性上定义,也可以在基本表的创建语句中定义。

例 4:在新订单表 new_orders 中引用仓库表 warehouse 的列称为外键,语句如下:

CREATE TABLE new_orders (  no_o_id INTEGER NOT NULL,  no_d_id SMALLINT NOT NULL,  no_w_id SMALLINT NOT NULL REFERENCE warehouse(w_id) );

还可以通过 ALTER TABLE 语句对完整性约束进行修改。

例 5:在 warehouse 表中增加主键列:

ALTER TABLE warehouse ADD PRIMARY KEY(w_id);

例 6:在 warehouse 表中增加 CHECK 约束:

ALTER TABLE warehouse ADD CHECK(LENGTH(w_street_1) < 100);

例 7:在 warehouse 表中增加外键引用:

ALTER TABLE warehouse ADD FOREIGN KEY(no_w_id) REFERENCES warehouse(w_id);

例 8:在 new_orders 表中增加唯一列:

ALTER TABLE new_orders ADD UNIQUE(no_o_id, no_d_id, no_w_id);

标签:数据完整性,MogDB,约束,street,warehouse,openGauss,NULL,id,CHECK
From: https://www.cnblogs.com/renxyz/p/18075445

相关文章

  • MogDB-openGauss触发器简介(2)
    MogDB/opengauss触发器简介(2)针对触发对象的触发事件一旦发生,就会激活触发器,触发器首先会检查触发条件,只有在满足触发条件的情况下,才会被真正地执行。其中元组级的触发器可以将更新前后的值嵌入到触发器的触发条件中。NEW.column_name:UPDATE或INSERT事件对应“新”元组,colu......
  • zabbix监控MogDB-openGauss之采集prometheus数据
    zabbix监控MogDB/openGauss之采集prometheus数据本文出处:https://www.modb.pro/db/187462前言市场上比较的监控方式有两种:zabbix和prometheus架构,对于MogDB/openGauss数据库来说,已经通过grafana+prometheus+opengauss_exporter的方式完成了监控部署,如何通过zabb......
  • 配置MogDB openGauss的grafana 的dashboard
    配置MogDB/openGauss的grafana的dashboard本文出处:https://www.modb.pro/db/188684概述我们已经介绍了prometheus+grafana+opengauss_exporter完成对MogDB/openGauss数据库的监控,但这只是第一步,我们还需要通过grafana的dashboard查看各个关注的指标项,本文主要......
  • openGauss开机自启动
    openGauss开机自启动在centos7.6操作系统上设置openGauss开机自启动,我们先来了解一下自定义服务的配置文件组成部分,共分为[Unit]、[Service]、[Install]三个部分。[Unit]Description=当前服务的简单描述Documentation=服务配置文件的位置Before=在某服务之前启动Aft......
  • openGauss与postgresql日常使用差异
    openGauss与postgresql日常使用差异密码加密postgresql默认密码加密方式是md5。openGauss默认密码加密方式是sha256。使用navicate、pgadmin3等客户端开发工具访问og,需要修改加密方式。如果在本地用用户名密码登陆数据库没问题。但是用其他工具连接数据......
  • PostgreSQL与openGauss之分区性能
    PostgreSQL与openGauss之分区性能概述PostgreSQL与openGauss分区表定义差异,请参考https://www.modb.pro/db/41393。openGauss1.1.0开始支持hash/list分区,hash分区表最多支持64个分区,否则会报:ERROR:Un-supportfeatureDETAIL:Thepartition’slengthshouldbe......
  • PostgreSQL与openGauss之关键字
    PostgreSQL与openGauss之关键字日常数据库运维的过程中可能对数据库关键字关注点并不是很高,但在程序开发的过程中,数据库对象建模要尽可能的避开数据库关键字的使用,否则在后续开发过程中需要用到各种转译的方法来将关键字转换为普通字符,会非常的麻烦。最近在openGauss上执行......
  • openGauss分区使用样例
    openGauss分区使用样例概述openGauss1.1.0版本开始,分区方式分为三种,分别是RANGE、HASH和LIST,官方文档中对于分区表的使用样例比较少,这里对各种分区使用方式做一下整理,方便以后快速调整使用。范围分区VALUESLESSTHAN语法格式分区策略的分区键最多支持4列分区键支持......
  • openGauss行存与列存
    openGauss行存与列存列存表限制列存表不支持数组。列存表的数量建议不超过1000个。列存表的表级约束只支持PARTIALCLUSTERKEY,不支持主外键等表级约束。列存表的字段约束只支持NULL、NOTNULL和DEFAULT常量值。列存表不支持alter命令修改字段约束。列存表支持......
  • openGauss监控之exporter部署
    openGauss监控之exporter部署概述opengauss_exporter是为openGauss数据库量身打造的数据采集工具,配合当前最受欢迎的监控报警框架prometheus+grafana组合实时展示数据库信息,为openGauss数据库的平稳运行保驾护航。opengauss_exporter同openGauss数据库一样是开源......