mysql表约束基础 【default | 主键 | 外键 | 唯一键】

 博客主页:花果山~程序猿-CSDN博客

文章分栏:MySQL之旅_花果山~程序猿的博客-CSDN博客

关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长!

目录

一,表的约束

 1. default && not null

2. comment(软约束)

3. zerofill

4. 主键

复合键

5.自增长

6、唯一键

7.外键


嗨!收到一张超美的图,愿你每天都能顺心!

一,表的约束

         表中将会有一些约束,换句话说就是限制,来规范输入的数据,使其能符合数据库的期望。约束本质上是通过技术手段,插入正确的数据,达到:数据库数据的完成性和可预期性。

mysql常见的约束手段:

 1. default && not null

很显然易见,

not null:要求输入方显示传递有效值(不能填null,否则也会报错)。

default:设置的默认值。

首先我们需要认识到的是,not null 与 default 两者并不互斥,有时可以相辅相成,示例如下:

曾经我们之所以可以在不设置default,也能用是因为mysql会对我们创建的表进行优化,一旦我们设置not null 或者 default,mysql就不会优化了。

2. comment(软约束)

列描述:comment,并没有实际意义上的约束,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA来进行了解。

可以通过 show create table 来进行查看comment的描述

3. zerofill

zerofill是为整数类型进行0填充的标识,目的:为了格式化显示,让行之间不会太乱。

理解,请看下图:

4. 主键

主键:primary key用来唯一的约束该字段里面的数据,不能重复,不能为空一张表中最多只能有一个主键主键所在的列通常是整数类型

示例:

有了主键后,我们可对表数据内容进行精准修改,如下:

删除主键 :

alter table table_name drop primary key;

增加主键:

alter table table_name add primary key (列名)

 增加主键前提,当然是这个表不存在主键;其次就是这个表中的数据是否满足添加主键的约束条件,否则只能手动删除数据满足约束条件,因此不推荐在插入数据后,再设置主键

复合键

在创建表的时候,在所有字段之后,使用primary key(主键字段列表)来创建主键,如果有多个字段作为主键,可以使用复合主键,多个列共同作为一个主键

示例: 

mysql> create table tt14(

-> id int unsigned,

-> course char(10) comment '课程代码',

-> score tinyint unsigned default 60 comment '成绩',

-> primary key(id, course) -- id和course为复合主键

-> );

 当插入数据与历史出现数据,主键列数据冲突时,则进行拦截。

5.自增长

auto_increment:当对应的字段,不给值,会自动的被系统触发,系统会从当前字段中已经有的最大值+1操作,得到一个新的不同的值。通常和主键搭配使用,作为逻辑主键

自增长的特点:

  • 自增长字段必须是整数
  • 一张表最多只能有一个自增长
  • 任何一个字段要做自增长,前提是本身是一个索引(key一栏有值)

示例:


6、唯一键

如何理解唯一键区别于主键:通过下面一个例子来理解,

假设一家企业需要统计其员工资料,需要身份证,工号。身份证被选为主键,这个没问题,但从业务方面来看,需求肯定会跟具体详细,每个人都有其自己的工号,不可能出现工号相等的情况,但外一在导入数据时,因为人为因素比如,员工记错或者管理员意外拷贝,没有外部提醒就很难发现,等到再发现时,就会出现数据相同,这就违背数据库的安全。

唯一键的本质和主键差不多,唯一键允许为空,而且可以多个为空,空字段不做唯一性比较(不参与计算)

 

关于唯一键和主键的区别:

我们可以简单理解成,主键更多的是标识唯一性的。而唯一键更多的是保证在业务上,不要和别的信息出现重复。

(注:一般而言,我们建议将主键设计成为和当前业务无关的字段,这样,当业务调整的时候,我们可以尽量不会对主键做过大的调整(我们知道重新产生键是有多麻烦!!)。)

7.外键

外键用于定义主表从表之间的关系:外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键数据必须在主表的主键列存在或为null

语法:

foreign  key  (字段名)    references  表名 (列名)

这里展示一个对,主表与从表的示例:

从表依赖于主表,先是主表创建:

后创建从表,在从表中,添加外键约束:

OK,表约束条件,我们差不多已经学完了,我们可以自己寻找业务场景 

结语

   本小节就到这里了,感谢小伙伴的浏览,如果有什么建议,欢迎在评论区评论,如果给小伙伴带来一些收获,请动动你发财的小手点个免费的赞,你的点赞和关注永远是博主创作的动力源泉。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue3快速入门(局部使用)

目录 前置知识JavaScript-导入导出 入门操作 变量渲染页面 局部使用vue的实现步骤 vue指令 v-for v-bind v-if v-show v-on v-model 生命周期 前置知识JavaScript-导入导出 正常情况在html导入js文件是全部导入,这样会导致性能上的损失 。 JS提供的…

【Spring】使用Spring常用导入依赖介绍

当使用Spring框架时,以下是常用导入的依赖的详细介绍,按照不同的功能和类别进行分点表示和归纳: 1、核心依赖 Spring Core (spring-core) 功能:提供了Spring框架的基础功能,包括IoC(控制反转)…

STM32F1之OV7725摄像头·SCCB总线代码编写附带源码详解

STM32F1之OV7725摄像头-CSDN博客 STM32F1之OV7725摄像头像素数据输出时序、FIFO 读写时序以及摄像头的驱动原理详解-CSDN博客 目录 1. 硬件设计 1.1 SCCB 控制相关 1.2 VGA 时序相关 1.3 FIFO 相关 1.4 XCLK 信号 2. 代码设计 2.1 SCCB总线软件实现 2.1.1 宏定…

AI图书推荐:ChatGPT解码—人工智能增强生活指南

《ChatGPT解码—人工智能增强生活指南》(ChatGPT Decoded. A Beginners Guide to AI-Enhanced Living )是一本由 大卫维恩斯(David Wiens )所著的书籍,旨在帮助读者了解并有效利用GPT-4语言模型这一强大工具来提升日常…

Date、SimpleDateFormat、Calendar(JDK7以前的时间类)

Date: demo1: package Date;import java.util.Date;public class demo1 {public static void main(String[] args) {//1.创建对象表示一个时间Date d new Date();System.out.println(d);//2.形参是long类型,加LDate d1 new Date(0L);System.out.println(d1);//3…

Vectorbt回测框架

https://zhuanlan.zhihu.com/p/689057801

springmvc Web上下文初始化

Web上下文初始化 web上下文与SerlvetContext的生命周期应该是相同的&#xff0c;springmvc中的web上下文初始化是由ContextLoaderListener来启动的 web上下文初始化流程 在web.xml中配置ContextLoaderListener <listener> <listener-class>org.springframework.…

ncnn 优化量化

问题&#xff1a;发现推理时间过长&#xff0c;需要优化 当前正在做人脸检测部署&#xff0c;发现检测速度有点吓人&#xff0c;以下监测的时间 gpu&#xff1a; cpu&#xff1a; gpu推理大概整体时间200多毫秒&#xff0c;cpu推理时间300多毫秒&#xff0c;这里暂时没去考虑…

「TypeScript系列」TypeScript 对象及对象的使用场景

文章目录 一、TypeScript 对象1. 对象字面量2. 类实例化3. 使用接口定义对象形状4. 使用类型别名定义对象类型5. 使用工厂函数创建对象 二、TypeScript 对象属性及方法1. 对象属性2. 对象方法3. 访问器和修改器&#xff08;Getters 和 Setters&#xff09; 三、TypeScript 对象…

Oracle实践|内置函数之字符串函数

&#x1f4eb; 作者简介&#xff1a;「六月暴雪飞梨花」&#xff0c;专注于研究Java&#xff0c;就职于科技型公司后端工程师 &#x1f3c6; 近期荣誉&#xff1a;华为云云享专家、阿里云专家博主、腾讯云优秀创作者、ACDU成员 &#x1f525; 三连支持&#xff1a;欢迎 ❤️关注…

Jenkins - Pipeline try catch

Jenkins - Pipeline try catch 引言try catch 引言 Jenkins pipeline 脚本&#xff0c;有时因某些异常而中断执行&#xff0c;导致整个 pipeline job 都失败。为了整个 Job 能继续运行&#xff0c;我们需要处理某些异常。 try catch 当在 Jenkins Pipeline 中使用 try-catch…

基于redis的分布式锁解决token续期冲突的问题

场景&#xff1a;用户登录状态存储到redis&#xff0c;2小时后过期。在过期前的30分钟如果用户进行操作&#xff0c;则对登录状态进行续期&#xff0c;续期后仍有2小时时限&#xff0c;并更换新的token。在微服务模式下&#xff0c;如果两个服务同时请求续期&#xff0c;则会返…

C++模板——函数模板和类模板

目录 泛型编程 函数模板 函数模板概念 函数模板的定义和语法 函数模板的工作原理 函数模板的实例化 隐式实例化 显示实例化 函数模板的匹配原则 类模板 类模板的定义格式 类模板的实例化 泛型编程 什么是泛型编程&#xff1f; 泛型编程&#xff08;Generic Pr…

【代码随想录37期】Day18 找树左下角的值、路径总和、从中序与后序遍历序列构造二叉树

找树左下角的值 class Solution { public:int findBottomLeftValue(TreeNode *root) {TreeNode *node;queue<TreeNode *> q;q.push(root);while (!q.empty()) {node q.front(); q.pop();if (node->right) q.push(node->right);if (node->left) q.push(node-&…

机械臂学习笔记

目录 python 像素坐标系转空间坐标系 基于yolov7得并联机械臂实时抓取 KINOVA Gen3 lite机械臂上 UR5机械臂仿真平台 勤牛智能 Mirobot六自由度机械臂 Python SDK 调用示例 6自由度 c的 彭志辉 开源的&#xff1a; 搜索&#xff1a;机械臂 language:Python python 像…

【Linux-并发与竞争】

Linux-并发与竞争 ■ 原子操作■ 原子操作简介■ 原子整形操作 API 函数■ 原子位操作 API 函数■ 示例一&#xff1a;原子操作实验&#xff0c;使用原子变量来实现对实现设备的互斥访问 ■ 自旋锁■ 自旋锁 API 函数■ 死锁■ 最好的解决死锁方法就是获取锁之前关闭本地中断&a…

LeetCode 124 —— 二叉树中的最大路径和

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 二叉树的问题首先我们要想想是否能用递归来解决&#xff0c;本题也不例外&#xff0c;而递归的关键是找到子问题。 我们首先来看看一棵最简单的树&#xff0c;也就是示例 1。这样的一棵树总共有六条路径&#xf…

docker如何拉取nginx最新镜像并运行

要拉取Docker Hub上的最新Nginx镜像&#xff0c;您可以使用以下命令&#xff1a; docker pull nginx 这个命令会从Docker Hub下载最新版本的Nginx镜像。如果您想要拉取特定版本的Nginx镜像&#xff0c;可以指定版本号&#xff0c;例如&#xff1a; docker pull nginx:1.18.0 拉…

JQuery从入门到精通2万字面试题

目录 解释jQuery库中的$()函数是什么? 如何使用jQuery选择页面上的所有 元素?

详细分析tcping的基本知识以及用法

目录 前言1. 安装配置2. 基本知识3. Demo 前言 针对ping的基本知识推荐阅读&#xff1a;详细分析ping的基本知识以及常见网络故障的诊断&#xff08;图文解析&#xff09; 1. 安装配置 针对Window的下载如下&#xff1a; 安装路径&#xff1a;tcping官网 下载tcping.exe&a…