MySQL表的约束与内置函数

news2024/12/23 18:41:40

目录

MySQL表的约束

空属性

默认值 

列描述comment

zerofill

主键

复合主键

自增长

唯一键

外键

MySQL的内置函数

日期函数

字符串函数

​编辑数学函数

 其他函数


MySQL表的约束

        MySQL表的约束是用于规定表中数据的完整性和一致性的规则。

        约束可以在创建表时定义,也可以在表已创建后通过ALTER TABLE语句进行添加、修改或删除。之前的文章提到如果插入的数据超出了对应数据类型的取值范围,那么数据将会插入失败,这就是一种数据类型的约束。

        为了更好的保证数据的合法性,从业务逻辑角度保证数据的正确性,MySQL中出现了表的约束,主要包括:空属性约束、默认约束、comment、zerofill、主键约束、外键约束、唯一键约束、自增长约束等。

空属性

空属性用来表示字段是否允许为空值。

通过select可以查看null的值,空值无法参与运算,因此null值加一后得到的还是null。

 如果要让某个字段不允许为空,在创建表的时候就可以给对应字段设置not null属性。

向表中插入记录时只有设置字段的不能为空的字段都不为空时才能插入成功,否则将会插入失败。

默认值 

  • 如果某一个字段会经常性地出现某个值,可将这个值设置成该字段的默认值。
  • 向表中插入数据时如果不给带有默认值的字段赋值,那么就会使用默认值进行插入。

 例如:

 倘若同时为字段设置not null和default,那么插入该字段的时候没有指明字段的值就会使用该字段的默认值进行填充,可见not null意义就不是很大了。

列描述comment

列描述是在创建表的时候用来对各个字段进行描述的,列描述会根据表创建语句保存,一般是用来给程序员或DBA了解表的相关信息的,相当于一种注释。通过show create table 表名SQL可以看到创建表时的相关细节,包括列描述。

例如:

zerofill

  • 数值类型后面的圆括号中的数字,代表的是显示宽度,对应数值类型设置zerofill属性后,如果数据的宽度小于设定的宽度则自动填充0。

例如:为b填上zerofill属性,可见自动填充了0到5位数。

 注意zerofill只是让数据以特定方式显示,数据底层的存储方式没有变化。

主键

将一个字段设置为主键,意味着将以它创建索引结构,MySQL使用B+树索引结构来存储和管理主键,因此使用主键查找数据的效率很高(对数级)。

表中每条记录的主键不能重复也不能为空,一张表只能有一个主键,主键常为整数类型。

例如:

使用alter table 表名 drop primary keySQL即可删除指定表的主键;

使用alter table 表名 add primary key(列名)SQL可以给指定列设置成主键;

复合主键

  • 一张表里面只能有一个主键,但一个主键可以由多个字段来承担,这种主键叫做复合主键。
  • 复合主键用来唯一约束多个字段里面的数据,表当中每条记录的这多个字段不能同时重复也不能为空

 

删除复合主键和增加复合主键的方式和主键相同。 

自增长

1.设置了自增长属性的字段,插入数据时如果不给该字段值,那么系统会自动找出当前字段当中已有的最大值,将最大值进行加一后的值插入该字段。
2.任何一个字段要做自增长,前提是其本身必须是一个索引(Key一栏有值),并且自增长字段必须是数值类型,一张表最多只能有一个自增长字段。
3.自增长通常和主键搭配使用,作为逻辑主键。一般而言,建议将主键设计成与当前业务无关的字段,避免因为业务逻辑的调整而需要修改主键。

使用auto_increment设置自增长主键:

唯一键

1.主键具有唯一性,但是一张表只能有一个主键,实际可以需要多个字段具有唯一性,那些需要唯一性特性的字段可以设置成唯一键保证唯一性,一张表可以有多个唯一键。

2.唯一键允许字段为空,并且可以多个字段为空,空字段不做唯一性比较。

 

 插入相同值报错,可以插入null:

外键

  • 外键用来定义主表和从表之间的关系,外键约束主要定义在从表上,主表必须有主键约束或唯一键约束。
  • 外键定义后,要求在从表插入外键列的数据必须在主表对应的列存在该数据或为null值。

 例如:

创建班级表,包含班级id和班级名两列:

再创建一个学生表,包含学生id、学生姓名、学生所在班级id三列,其中班级id设置为外键(需要关联到班级表的班级id列:

 

在班级表中插入两个班级,之后在学生表中插入的学生信息中,学生所在的班级id必须在班级表出现过,或者插入null,这就是外键约束:

 如果像班级表再插入班级id为3的班级,学生表才能插入班级id为3的学生。

外键约束的好处

  • 准确性:外键约束能保证只有班级id在班级表中存在的记录才能插入学生表,否则就会插入失败。
  • 简化工作:实际建立外键的本质就是把相关性交给MySQL去审核了,提前告诉MySQL表之间的约束关系,当用户插入不符合业务逻辑的数据时,MySQL就不允许你进行插入。

MySQL的内置函数

日期函数

 例如:

datediff函数用于获取两个日期的差,单位是天,运算时为左边日期减右边日期:

字符串函数

使用实例: 

charset

 

concat

 

 instr

 

ucase和lcase

 

left

length

 replace

 strcmp

 substring

 

 ltrim、rtrim、trim

数学函数

绝对值函数abs和进制转换函数bin、hex、conv 

 取整函数ceiling和floor

格式化函数(四舍五入)format,随机函数rand、求余函数mod 

 

MySQL中取余运算符的结果的符号与被除数的符号一致: 

 

 其他函数

user函数:获取MySQL连接的当前用户名和主机名

 

 md5函数:对一个字符串进行md5摘要,摘要后得到一个32位字符串

 一般情况下存储用户的明文密码会将用户密码形成摘要后存储对应的摘要,当用户登录账号时,将用户输入的的密码形成摘要后与数据库中存储的摘要做对比,如果对比成功则允许登录。
这么做可以避免用户信息泄露,摘要是定长的,有利于数据库表结构的设计。

 database函数:显示当前正在使用的数据库

 

sha2函数:SHA2函数用于生成给定字符串的SHA-2哈希,用于对用户数据进行加密(或者使用旧版本加密算法的password)

 使用方法:

SELECT PASSWORD('password');

SELECT SHA2(string, bit_length)

ifnull函数:判断参数是否为null,接受两个参数,如果第一个参数不为null则返回第一个参数值,否则返回第二个参数值

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

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

相关文章

使用.LayUI实现动态选项卡Tab的强大功能

标题 正文:1.引入.LayUI框架文件2.创建选项卡容器3.初始化.LayUI组件和创建选项卡项以及获取数据准备3.1 Permission实体类3.2 PermissionDao类3.3 TreeVo类3.4 PermissionAction类 4.监听选项卡的切换事件5.运行和测试6.总结: 正文: 在Web界…

【导航地图DB】

地图DB概述 车载导航地图DB 主要侧重道路交通网,并从实用性、加快检索速度和减少数据容量的角度来考虑,有自己特有格式的电子地图。 含有空间位置地理坐标,能够与空间定位系统结合,准确引导人或交通工具从出发地到达目的地的电子…

ylb-接口10用户登录

总览: 在api模块下的service包,补充用户接口(UserService):用户登录 package com.bjpowernode.api.service;import com.bjpowernode.api.model.User; import com.bjpowernode.api.pojo.UserAccountInfo;public inte…

运维小知识(三)——BIOS密码忘记怎么办(一键清除)

🍉🍉问题 为了防止恶意更改BIOS程序,一些人会设置BIOS密码,但这个密码若不常用的话会被人遗忘,或者一台旧电脑,需要重装系统,没有BIOS密码怎么办?有没有童靴遇到过,网上找…

bash脚本文件windows上的和linux上格式不同问题

脚本执行时报: syntax error: unexpected end of file,由于脚本是给定的。之前没有考虑这个问题,后查阅资料发现问题如下: 可能发生场景:windows环境编辑/生成的shell脚本,在linux系统上运行时报错 编辑和…

备战秋招009(20230714)

文章目录 前言一、Java内存区域1、JVM组成部分2、运行时数据区域01、基础02、程序计数器03、虚拟机栈04、本地方法栈05、堆06、方法区07、直接内存 3、HotSpot虚拟机对象01、对象的创建02、内存分配03、内存布局04、访问定位 二、垃圾回收1、堆空间01、空间结构02、GC 分类03、…

linux之vscod编译源代码

vscode想要编译c/c程序 在本地的linux上首先要安装gcc与g编译器,因为这个后面会写到配置文件里面去 先在这个软件里面安装上c/c的扩展插件,然后当我们开始编译c/c程序的时候 会自动生成一个.vscode目录 然后先来看一个配置文件launch.json的配置文件…

【观察】杉数科技:释放智能决策“乘数效应”,驱动智能制造高质量增长

毫无疑问,中国制造业在时代背景与国家政策的双重驱动下,正加速向数智化转型,而以数据驱动的智能决策也正成为制造业资源优化配置的“利器”,通过端到端的数据深度感知与决策优化,显然能够将工业和制造业的数据价值发挥…

波奇学Linux: sudo提权,gcc编译,动静态链接,debug版本

sudo给普通用户提权 在root用户下输入 vim /etc/sudoers 添加白名单,名单上的用户可以用root权限运行 gcc和g编译c和c文件 g可以编译c和c文件 gcc只能编译c文件 ./a.out 执行a.out可执行文件 通过g编译器展示预处理->编译->汇编->链接的文件 预处理&am…

甲骨文注册

1、去官网注册 https://www.oracle.com/cn/cloud/free/ 2、邮箱验证填写注册信息 选择区域再点继续 申请失败MD,成功再更新!

Java数据结构与算法:稀疏数组(SparseArray)

编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 文章目录 一、稀疏数组是什么?1.1 基本介绍1.2 稀疏数组的处理方法1.3 举例说明 二、为什么要使用稀疏数组?2.1 先看这一个具体的应用需求问题解决方案 2.2 使…

SpringBoot学习——项目用maven打包成jar包 windows + Linux平台运行 Linux安装java 遇到的问题

目录 引出认识maven以及packageMaven 构建生命周期package:打包,打包成jar包和使用(1)引入maven插件(2)打包jar包 windows平台运行jar包1.windows下安装java环境2.直接运行一个jar包 Linux平台运行jar包1.L…

RocketMQ 为何性能高

本文主要从性能角度考虑 RocketMQ 的实现。 整体架构 这是网络上流行的 RocketMQ 的集群部署图。 RocketMQ 主要由 Broker、NameServer、Producer 和 Consumer 组成的一个集群。 **NameServer:整个集群的注册中心和配置中心,管理集群的元数据。包括 T…

将本地MySql数据库导入到linux服务器上

首先 你的linux服务器上需要有MySql 如果您还没有安装 可以参考我的文章 在阿里云linux上安装MySql数据库 然后 我们在本地打开MySql的管理工具 我这里使用的 Navicat for MySQL 右击需要导入的数据库 如下图操作 选择一个目录存放文件 然后点击开始 走完一次之后点击关闭 查…

【多线程系列-01】深入理解进程、线程和CPU之间的关系

深入理解进程线程的关系 一,深入理解进程、线程与CPU之间的关系1,进程与线程1.1,进程与线程的关系1.2,在java中进程与线程的关系 2,进程间的通信方式2.1,管道2.2,信号2.3,消息队列2.…

taro-ui-vue3 的虚拟列表组件VirtualScroll

项目&#xff1a;taro3vue3 用法&#xff1a; <at-virtual-scrollbench"5":height"listHeight":items"fieldList":item-height"itemHeight" ><template #default"{ index, item }"><view :id"merchan…

【力扣算法12】之 11. 盛最多水的容器 python

文章目录 问题描述示例1示例2提示 思路分析代码分析完整代码详细分析运行效果截图调用示例运行结果完结 问题描述 给定一个长度为 n 的整数数组 height 。有n条垂线&#xff0c;第i条线的两个端点是(i, 0)和(i, height[i])。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构…

SQL 优化换汤不换药的时代变了与SQL审核

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到3群&#xff08;共…

Kubernetes轻量级日志工具Loki安装及踩坑记录

Loki简介 Loki是Grafana出品的一个轻量级日志系统&#xff0c;熟悉ELK的都知道ELK使用起来的成本&#xff0c;而且仅仅是日志检索使用ELK的话有点大材小用了。Loki8技术栈中使用了以下组件。 Promtail 用来将容器日志发送到 Loki 或者 Grafana 服务上的日志收集工具&#xff0c…

谷歌Bard更新中文支持;GPT-4:1.8万亿参数、混合专家模型揭秘; Meta推出商用版本AI模型

&#x1f989; AI新闻 &#x1f680; 谷歌的AI聊天工具Bard更新&#xff0c;增加中文支持 摘要&#xff1a;谷歌的AI聊天工具Bard新增中文环境&#xff0c;用户可以使用简体和繁体中文进行交流。然而&#xff0c;与竞品相比&#xff0c;Bard的回复略显生硬&#xff0c;语义理…