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

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.dtcms.com/a/311649.html

相关文章:

  • 数字化转型驱动中小制造企业的质量管理升级
  • 技术面试知识点详解 - 从电路到编程的全栈面经
  • 【密码学】5. 公钥密码
  • 【Python修仙编程】(二) Python3灵源初探(11)
  • Noob靶机
  • 集成电路学习:什么是CMSIS微控制器软件接口标准
  • 用键盘快速移动Word和WPS文字中的选中段落
  • K8S部署ELK(二):部署Kafka消息队列
  • 计算机分类大全
  • 【学习笔记】MySQL技术内幕InnoDB存储引擎——第9章 性能调优
  • Android 13/14/15 默认授权应用权限的实现方法
  • 广告牌+序列帧的Shader效果
  • rocky\centos安装docker镜像的命令
  • 深入理解C++中的list容器:介绍、使用与实现
  • Flutter dart运算符
  • mini-swe-agent源码解读(进行中)
  • Redis 7 哈希(Hash)使用指南
  • 细分推广场景,让推客推广更贴合用户当下需求
  • 存储过程的介绍、基本语法、delimiter的使用
  • 未来交通:元宇宙技术重塑出行体验
  • 用Unity结合VCC更改人物模型出现的BUG
  • WebSocket断线重连机制:保障实时通信的高可用性
  • 疯狂星期四文案网第27天运营日记
  • 井云科技2D交互数字人:让智能服务触手可及的实用方案
  • KSP与ASM深度对比:原理、性能与使用场景
  • SpringBoot怎么查看服务端的日志
  • sqli-labs通关笔记-第28a关GET字符注入(关键字过滤绕过 手注法)
  • USB Device(VID_1f3a_PID_efe8) 驱动叹号
  • ART数据库索引结构--ART,The adaptive radix tree论文细读
  • 基于落霞归雁思维框架的软件需求管理实践指南