SQL增加主键约束的条件

结论

常见认为设为主键的条件为:

  • 值唯一
  • 不含空值
    • 具体实施中会出现各种问题

添加主键约束的条件细则:

  • 值唯一
  • 数据中不含空值
  • 在定义时需要not null约束(使用check约束不行

验证实验

接下来我做了关于这个细则的验证实验:


设Student表中的列为:

  • Sno( char(5),状态)
  • Sname(varchar(10),null)
  • Sage(int,null)

建立Student表的sql语句为:

create table Student(
	Sno  char(5)
	Sname  varchar(10)
	Sage  int
)

目的:想将Sno设为Student的主键。
需要根据Sno的状态分类讨论

若Sno中无null值

alter table Student
add constraint PK1 primary key(sno)

结果:会报错,因为Sno只是目前暂时没有空值,但有含null值的可能性。因此需要Sno增加约束条件,消除其含null值的可能性
在这里插入图片描述
思路有两种,一种通过check约束限制Sno不含空值、一种在定义Sno时限制。

  • check约束限制
alter table student
add constraint C1 check(sno is not null)

在这里插入图片描述
成功添加check约束后再次尝试。发现仍然失败。这个方法行不通
在这里插入图片描述

  • 定义限制
    为保证实验的严谨,需要控制变量,先将刚刚的C1限制删除再进行定义限制。
alter table student
alter column sno char(5) not null

再尝试增加主键约束。发现成功添加

若Sno中含null值

数据中含null值当然无法设置主键约束。但是在这一节可以进一步的佐证,为什么仅满足check约束无法成功添加主键约束。

  • 尝试添加check约束限制
    会报错,因为当前表中sno已经有null值
alter table student 
add check(sno is not null)
  • 强制添加check约束
    通过增加with nocheck字段可以强制添加check约束。这样的效果是,不会去检查先前的空值,但会检查之后插入的元组
alter table student 
with nocheck add check(sno is not null)

因此,会出现列Sno,明明有not null的check约束,但数据中仍有null值的问题。故check约束并不能保证Sno值不为null的条件,也就不能成功添加主键约束。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/558135.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

万物皆可计算|下一个风口:近内存计算-2

虽然PIM可以有缓解内存墙的问题,但是PIM设计面临着一系列技术和工程上的挑战,这些挑战直接影响着PIM技术的实用化和广泛应用: 地址翻译与操作映射: 在传统计算机体系结构中,地址空间由操作系统管理和调度,通…

万物皆可计算|下一个风口:近内存计算-1

传统的冯诺依曼架构虽然广泛应用于各类计算系统,但其分离的数据存储与处理单元导致了数据传输瓶颈,特别是在处理内存密集型任务时,CPU或GPU需要频繁地从内存中读取数据进行运算,然后再将结果写回内存,这一过程涉及大量…

Vue3:响应式数据的基本使用(ref、reactive)

一、前言 在Vue3中,如果数据不是响应式数据,当数据的值发生改变时,页面上的数据是不会发生改变的。因此本文主要介绍Vue3中响应式数据的使用,包括ref和reactive的基本使用。 二、ref 1、ref —— 创建基本类型的响应式数据 re…

电大搜题微信公众号:重庆开放大学学子的学习利器

在当今信息化时代,学习已经成为每个人不可或缺的一部分。然而,对于重庆开放大学的学子们来说,由于远程教育的特殊性,他们面临着更大的学习挑战。幸运的是,他们现在可以依靠一款强大的学习利器——电大搜题微信公众号&a…

软考中级网络工程师-2024上岸宝典

1.软考是什么 简单说就是计算机技术 相关的国家级证书考试,想听专业点给大家截一张官网的图,不想听废话直接往下。 同为国家级证书的:注册会计师、法律职业资格证、一级建筑师,证书的价值是比较高的。 很多人都是在求职前或者大…

【面试经典 150 | 二叉树层序遍历】二叉树的右视图

文章目录 写在前面Tag题目来源解题思路方法一:层序遍历方法二:深度优先搜索 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于…

全球媒体发稿:海外发稿数字期刊Digital Journal

全球媒体发稿:海外发稿数字期刊Digital Journal ​官网: digitaljournal.com 数字期刊,加拿大知名门户,月访量超过30万。 是一个全球媒体平台和内容合作伙伴,通过捕捉和报道第一,提升新闻周期中的声…

快手本地生活服务商系统怎么操作?

当下,抖音和快手两大短视频巨头都已开始布局本地生活服务,想要在这一板块争得一席之地。而这也很多普通人看到了机遇,选择成为抖音和快手的本地生活服务商,通过将商家引进平台,并向其提供代运营服务,而成功…

工厂数字化系统是自研,还是对外采购

数字化转型在企业中变得越来越普遍,众多数字化项目的增加也引发了自研和采购数字化系统的讨论。自研和采购各有优劣,需要根据企业的实际情况和需求来做出明智的选择。 自研数字化系统 适用情况:重要核心业务、复用率高、需要长期优化迭代的系…

用队列实现栈(力扣第225题)

#include "stdio.h" #include "stdbool.h" #include "string.h" #include "stdlib.h" #include "assert.h"//初始化队列 typedef int QueueDataType;typedef struct queue {QueueDataType val;struct queue* next; }Qnode;t…

符文协议的演变历程:从挑战到创新

在比特币网络长期面临的挑战中,与主流去中心化金融功能的兼容性一直是一大难题。相比之下,以太坊通过ERC-721和ERC-1155代币标准,为NFT和去中心化金融应用提供了支持,而比特币的应用范围却相对有限。然而,近年来&#…

Linux知识点(4)

文章目录 13. 线程13.1 什么是线程13.2 Linux下的线程13.2.1 pthread_create13.2.2 线程为什么高效?13.2.3 线程的优缺点13.2.4 线程异常13.2.5 线程用途 13.4 虚拟地址空间13.5 Linux线程控制13.5.1 POSIX线程库13.5.2 创建线程13.5.3 线程ID及进程地址空间布局13.…

如何构建企业技术架构-解决内部系统连接的问题

随着企业信息化建设的深入,各类管理系统在运营管理中发挥着关键作用。为了实现数据共享、业务流程自动化和决策支持的无缝对接,往往搭建一个高效协同的技术架构至关重要。本文将以人事系统、泛微OA(Office Automation)及ERP&#…

基于Springboot+Vue的Java项目-网上点餐系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

【御控物联】Java JSON结构转换(4):对象To对象——规则属性重组

文章目录 一、JSON结构转换是什么?二、术语解释三、案例之《JSON对象 To JSON对象》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么? JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换&#xff0…

Nginx莫名奇妙返回了404

描述 nginx作为反向代理,代理python的服务,但是通过代理访问服务的时候,报了404的错误。 难受的是客户现场没有查看日志的权限,只有查看配置文件的权限,我们检测了几遍配置文件也没有找到问题,哎~ 问题引…

Python兼职:只需要一台电脑宅在家,轻松实现月入过万!

Python兼职副业 Python是一种简单易学、高效强大的编程语言,正变成越来越多人选择的热门技能。不论你是否有编程基础,在学习Python的道路上,坚持每天投入2小时,你将看到巨大的回报。 学习Python不仅可以为你提供更多就业机会&am…

【情侣博客网站】

效果图 PC端 建塔教程 第一步:下载网站源码(在文章下方有下载链接) 第二步:上传到服务器或虚拟主机,解压。 第三步:这一步很关键,数据库进行连接,看图 admin/connect.php就是这…

链表带环问题——leetcode环形链表1 2

证明链表带环 链表的带环问题指的是本该指向NULL的最后一个节点指向了之前的节点,导致链表成环,找不到尾结点的情况,那么我们该如何证明链表带环呢? 我们可以类比物理中的追及问题,让快慢指针同时走,两者相…

element-ui form表单自定义label的样式、内容

element-ui form表单自定义label的样式、内容 效果截图 代码 <el-form size"small" :inline"true" label-width"120px"><el-form-item prop"name"><div slot"label"><i style"color: red;"…