当前位置: 首页 > web >正文

gbase8s 常见表约束介绍

1 check 约束

语法

oracle 模式
CREATE TABLE haha (
c1 int,
c2 int CONSTRAINT check_c2 CHECK (c2 > 100)
);

gbase 模式
create table haha (
c1 int,
c2 int,
CONSTRAINT check_c2 CHECK (c2 > 100)

存储位置 
check 约束信息存储于 sysconstraints 表中  约束表达式 存储于 syschecks表中,constrid 进行关联


2 default 值

语法 

create table hehe (c1 int default 1,c2 date default sysdate);

存储位置

default 信息存储于 sysdefaults表中, default表达式 存储于 sysdefaultsexpr 表中   tabid进行关联

3 虚拟列

语法

create table tcs 
(
c1 integer,
newid generated always as (round((c1 / 12 ) , 2 ) ) virtual
);

存储位置

虚拟列信息存储于 sysdefaultsexpr 表中


4 非空约束

语法

create table notnu (c1 int not null,c2 varchar2(20) not null);

存储位置 
存储于 sysconstraints 表中  constrtype='N'


5 唯一约束

语法

oracle模式

创建时包含
CREATE TABLE tho (
id int CONSTRAINT tho_id_unique UNIQUE,  --显示命名
name VARCHAR(100) UNIQUE,                 --系统隐式命名
c3 VARCHAR(100),
c4 VARCHAR(100)
);

现有表添加唯一约束

ALTER TABLE tho ADD CONSTRAINT tho_c34_name UNIQUE (c3,c4);

gbase 模式

CREATE TABLE thg (
id int UNIQUE CONSTRAINT thg_id_unique ,  --显示命名
name VARCHAR(100) UNIQUE,                 --系统隐式命名
c3 VARCHAR(100),
c4 VARCHAR(100)
);

现有表添加唯一约束
ALTER TABLE thg ADD CONSTRAINT UNIQUE (c3, c4)  CONSTRAINT tho_c34_name1;


存储位置

存储于sysconstraints  表中 constrtype='U'  对应索引信息存储于 sysindexes  idxname进行关联


6 主键约束

语法 

oracle 模式

CREATE TABLE orapri (
id int CONSTRAINT orapri_pk PRIMARY KEY,
last_name VARCHAR(50)
);

ALTER TABLE orapri ADD CONSTRAINT orapri_pk PRIMARY KEY (id);

gbase模式 
CREATE TABLE orapri1 (
id int PRIMARY KEY CONSTRAINT orapri_pk1 ,
last_name VARCHAR(50)
);

ALTER TABLE orapri ADD CONSTRAINT PRIMARY KEY (id) CONSTRAINT orapri_pk ;

存储于sysconstraints  表中 constrtype='P' 对应索引信息存储于 sysindexes  idxname进行关联


7 外键约束

语法 
oracle 模式下

1 使用外键关联父表主键
-- 父表
CREATE TABLE departments (
dept_id int PRIMARY KEY,
dept_name VARCHAR(100)
);

-- 子表
CREATE TABLE employees (
emp_id int PRIMARY KEY,
dept_id int REFERENCES departments(dept_id)
);


1 使用外键关联父表唯一约束
-- 父表
CREATE TABLE departments1 (
dept_id int UNIQUE,
dept_name VARCHAR(100)
);

-- 子表
CREATE TABLE employees1 (
emp_id int PRIMARY KEY,
dept_id int REFERENCES departments(dept_id)
);

gbase 模式下

1 使用外键关联父表主键
-- 父表
CREATE TABLE departmentsg (
dept_id int PRIMARY KEY,
dept_name VARCHAR(100)
);

-- 子表
CREATE TABLE employeesg (
emp_id int PRIMARY KEY,
dept_id int REFERENCES departments(dept_id)
);


1 使用外键关联父表唯一约束
-- 父表
CREATE TABLE departmentsg1 (
dept_id int UNIQUE,
dept_name VARCHAR(100)
);

-- 子表
CREATE TABLE employeesg1 (
emp_id int PRIMARY KEY,
dept_id int REFERENCES departments(dept_id)
);


存储于sysconstraints  表中 constrtype='R' 对应索引信息存储于 sysindexes  idxname进行关联
/*idxname 如果是系统生成则 前边有个空格  例如 " 1108_71"   */


8 唯一索引

CREATE UNIQUE/DISTINCT INDEX idxname ON tabname (colname);

唯一索引与唯一约束的区别

相同点 二者都是通过索引结构来保证唯一性
不同点 
创建方式不同
存储系统表不同
触发方式不同
唯一约束会在语句末尾被检查
唯一索引是一行一行的检查

例如 
create table oo (c1 int,c2 int);
insert into oo select level,level from dual connect by level <4;

create unique index idx_oo_c1 on oo(c1);

alter table oo add constraint unique (c2)  constraint ooc2;

update oo set c1=c1+1;   --报错  duplicate value for a record with unique key

update oo set c2=c2+1;   --正常

http://www.xdnf.cn/news/16988.html

相关文章:

  • 18-C语言:第19天笔记
  • 知识随记-----Qt 实战教程:使用 QNetworkAccessManager 发送 HTTP POST
  • Ubuntu系统VScode实现opencv(c++)图像翻转和旋转
  • Java语言核心特性全解析:从面向对象到跨平台原理
  • 【学习笔记】Java并发编程的艺术——第1章 并发编程的挑战
  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第三天(JavaScript)
  • Maven - 并行安全无重复打包构建原理揭秘
  • sqli-labs通关笔记-第28a关GET字符注入(关键字过滤绕过 手注法)
  • 如何设置主机IP地址
  • 用纳米AI一键生成Python屏幕监控软件
  • Python编程基础与实践:Python循环结构基础
  • 【图像处理基石】用Python实现基础滤镜效果
  • QPainter::CompositionMode解析
  • 智能学号抽取系统V5.6.4重磅发布
  • MyBatis 批量操作 XML 实现方式
  • 大模型(五)MOSS-TTSD学习
  • Windows 环境 psql 客户端连接数据库超慢问题
  • Mac电脑安装HomeBrew
  • GitHub 趋势日报 (2025年08月01日)
  • 【转】大模型安全治理的现状与展望
  • 【Leetcode】2561. 重排水果
  • Paper Reading《TrafficFormer: An Efficient Pre-trained Model for Traffic Data》
  • 【Leetcode hot 100】49.字母异位词分组
  • Windows中使用Qwen模型:VSCode+Cline
  • ABP VNext + NATS JetStream:高性能事件流处理
  • 【智能体cooragent】不同的单智能体调用的大模型的推理的输入与输出
  • flutter分享到支付宝
  • 模拟激光相机工作站版本6.0 5.2.32 6.0.44 6.031 5.2.20
  • LeetCode 每日一题 2025/7/28-2025/8/3
  • gcc-arm-none-eabi安装后,找不到libgcc.a的拉置