我的编程空间,编程开发者的网络收藏夹
学习永远不晚

GBase 8s数据库主键约束、唯一约束和唯一索引的区别解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

GBase 8s数据库主键约束、唯一约束和唯一索引的区别解析

主键约束(PRIMARY KEY)

  1. 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键,一个表上仅只能有一个主键;
  2. 不建议更新主键;
  3. 主键列上没有任何两行具有相同值(即重复值),且不允许空(NULL);
  4. 主健可作外健,唯一索引不可;

唯一性约束(UNIQUE)

  1. 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束;
  2. 只要唯一就可以更新;
  3. 表中任意两行在指定列上都不允许有相同的值,但允许空(NULL);

唯一索引(UNIQUE INDEX)

  1. 唯一索引可以确保任何生成重复键值的尝试都会失败;
  2. 只要唯一就可以更新;
  3. 表中任意两行在指定列上都不允许有相同的值,但允许空(NULL);

唯一性约束和主键约束的区别:

  1. 唯一性约束允许在该列上存在NULL值,而主键约束的限制更为严格,不但不允许有重复,而且也不允许有空值。

唯一约束和唯一索引的区别:

前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同。
唯一性约束与唯一索引有所不同:

  • 创建唯一约束会在GBase 8s中创建一个constraint,同时也会创建一个该约束对应的唯一索引;
  • 创建唯一索引只会创建一个唯一索引,不会创建constraint;

也就是说其实唯一约束是通过创建唯一索引来实现的。

以下示例来说明这三者之间的区别:
1,创建表、导入基础数据

drop table if exists tab1;
create table tab1(col1 int, col2 varchar(20), col3 varchar(20));
insert into tab1 values(1,'test001','test001');
insert into tab1 values(2,null,'test002');
insert into tab1 values(3,'test003',null);

2,创建主键、唯一约束和唯一索引
主键唯一值且不允许为null,唯一约束值唯一但允许null,唯一索引值唯一但允许null

alter table tab1 add constraint primary key(col1) constraint pk_tab1_col1;
alter table tab1 add constraint unique(col2) constraint uk_tab1_col2;
create unique index ux_tab1_col3 on tab1 (col3);

查看表的报告,可以看到三个索引(对应主键、唯一约束和唯一索引),但需要注意的是主键、唯一约束的索引名称并不是指定的约束名称

oncheck -pt testdb:tab1 | grep 'fragment partition'

Index  102_3 fragment partition datadbs01 in DBspace datadbs01
Index  102_4 fragment partition datadbs01 in DBspace datadbs01
Index ux_tab1_col3 fragment partition datadbs01 in DBspace datadbs01

3,测试区别

insert into tab1 values(null,'test004','test004');

将报错误:703: Primary key on table (tab1) has a field with a null key value.
不允许空值。

insert into tab1 values(3,'test005','test005');

将报错误:268: Unique constraint (gbasedbt.pk_tab1_col1) violated.
违反主键约束(pk_tab1_col1),因已经存在值 3 。

insert into tab1 values(4,null,'test006');

将报错误:268: Unique constraint (gbasedbt.uk_tab1_col2) violated.
违反唯一约束(uk_tab1_col2),因已经存在值 null 。

insert into tab1 values(5,'test003','test007');

将报错误:268: Unique constraint (gbasedbt.uk_tab1_col2) violated.
违反唯一约束(uk_tab1_col2),因已经存在值 test003 。

insert into tab1 values(6,'test008',null);

将报错误:239: Could not insert new row - duplicate value in a UNIQUE INDEX column (Unique Index:ux_tab1_col3).
不允许插入重复值,因已经存在值 null 。

insert into tab1 values(7,'test009','test002');

将报错误:239: Could not insert new row - duplicate value in a UNIQUE INDEX column (Unique Index:ux_tab1_col3).
不允许插入重复值,因已经存在值 test002 。

insert into tab1 values(8,'test010','test010');

插入成功。

alter table tab1 drop constraint uk_tab1_col2;
oncheck -pt testdb:tab1 | grep 'fragment partition'
Index  102_3 fragment partition datadbs01 in DBspace datadbs01
Index ux_tab1_col3 fragment partition datadbs01 in DBspace datadbs01

删除约束,对应的索引一并删除。

细心的你,会发现:

  1. 如果字段加上not null约束,再加上唯一约束或者唯一索引,功能上将等同于主键约束;
  2. 唯一约束仅仅比唯一索引多了一个约束;

到此这篇关于GBase 8s数据库主键约束、唯一约束和唯一索引的区别的文章就介绍到这了,更多相关GBase 8s数据库主键内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

GBase 8s数据库主键约束、唯一约束和唯一索引的区别解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

数据库主键约束、唯一约束和唯一索引的区别是什么

本篇内容主要讲解“数据库主键约束、唯一约束和唯一索引的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库主键约束、唯一约束和唯一索引的区别是什么”吧!主键约束(PRIMARY KEY
2023-06-29

mysql中主键约束和唯一约束的区别

mysql 中主键约束和唯一约束的区别在于:主键最多包含多个列,不允许空或重复值,标识每条记录,可作为外键;唯一约束可包含任意列数,允许空值但不允许重复值,防止特定列组合重复。MySQL 中主键约束和唯一约束的区别主键约束和唯一约束是 M
mysql中主键约束和唯一约束的区别
2024-04-26

sql主键约束和唯一约束有什么区别

主键约束和唯一约束在功能上有一些区别。主键约束:- 主键约束用于定义一个表中的一列或一组列作为主键,用于唯一标识表中的每一行数据。- 主键必须是唯一且非空的,每个表只能有一个主键。- 主键可以由一个或多个列组成,这种情况下被称为复合主键。-
2023-10-11

在数据库中更新插入不使用主键或唯一约束的行

在我 7 年的程序员职业生涯中,我大部分时间都是通过 orm 与 sql 交互。我发现 laravel 的 eloquent orm 的一个特别有用的功能是它的 updateorinsert() 方法:db::table('posts')-
在数据库中更新插入不使用主键或唯一约束的行
2024-10-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录