【MySQL】函数和约束

news/2024/7/8 5:34:43

如标题所说,本文重点只有两个:MySQL语句里面的函数和约束

目录

  • 1. 函数
    • 1.1 字符串函数
    • 1.2 数值函数
    • 1.3 日期函数
    • 1.4 流程函数
  • 2.约束
    • 2.1 外键的删除更新行为

1. 函数

因为在前一篇文章里面有讲到聚合函数,所以在这里就不重复介绍了,本文所介绍的函数有4类:字符串函数,数值函数,日期函数和流程函数

1.1 字符串函数

由于字符串函数比较多,所以只介绍常用的

函数说明
concat(s1,s2,s3…)拼接字符串
lower(str)/upper(str)字符串全部转为小写/大写
trim(str)删除字符串头尾的空格
substring(str,start,len)截取字符串,从start位置开始,截取长度为len
lpad(str,n,pad)左填充,用pad对str的左边进行填充使字符串长度达到n,相应的还有右填充,函数名为rpad,参数和用法与lpad一致

上面的这些函数,如果你学过Java的话,那么对这些函数应该不会陌生
这里lpad和rpad可能不好理解,我们来看看示例
在这里插入图片描述
使用+对字符串01进行填充,直至01长度到达5

1.2 数值函数

函数说明
ceil(i)i向上取整
floor(i)i向下取整
rand()返回0~1之间的随机数
mod(x,y)返回x/y的模
round(x,y)对x进行四舍五入,保留y位小数

1.3 日期函数

函数说明
curdate()/curtime()返回当前日期/当前时间
now()返回当前的日期和时间
year(date)获取指定日期的年份,同样的,还有month(date)和day(date)
datediff(date1,date2)计算date1和date2之间的天数,如果date1小于date2,计算的结果为负数
date_add(date,interval expr type)在date后加上一段时间,可以为年,月,日

date_add这个函数还是演示下怎么使用
在这里插入图片描述

1.4 流程函数

流程函数在SQL语句中主要进行条件筛选

函数说明
if(value,t,f)类似if语句,value值为真返回t,否则返回f
ifnull(value1,value2)value1不为空时返回value1,否则返回value2
case when [val] then [res]…else [default] end当val的值为true时返回res,否则返回default,when和then可以有多个
case [expr] when [val] then [res]…else [default] end当expr的值等于val的时候返回res,否则返回default,when和then可以有多个

在这里插入图片描述

2.约束

约束用于字段,是用来限制存储在数据表上的数据,这样做是为了保证数据的有效性,比如age字段你就不能写除数字以外的数据,常见的约束有下面几种:

约束说明
not null非空约束,此字段的数据不能为空
unique唯一约束,此字段的所有数据不能重复
defaule默认约束,此字段中如果有数据没有指定值,那么就采用默认值
primary key主键约束,主键是一行数据的唯一标识,主键要求非空且唯一
foreign key外键约束,用于两张数据表建立连接,保证数据的完整性和一致性

因为约束是作用于字段,所以我们在建表的时候就可以为字段添加约束,在建表之后通过alter修改字段数据类型时加上约束也可以

此外还有一个关键字:auto_increment;这个关键字表示的是自动增长,是MySQL才有的一个关键字
在创建数据表的时候一般会选择id作为主键,而id又是从1开始往后递增的,所以primary key和auto_increment经常同时使用实现主键自增

我在这里新建一个简单的数据表,然后来看看数据表的结构
首先是没有约束的:
在这里插入图片描述
然后是有约束的:
在这里插入图片描述
然后是外键约束的使用
外键所关联的是另一张数据表的主键,两张表中含有外键的称为子表,关联的另一张为父表
外键同样可以在创建数据表的时候指定,也可以是在创建数据表之后再添加

添加外键:
  creat table 表名(字段1 数据类型,
  [constraint] [外键名称] foreign key (外键字段名) references 主表(主表列名));

  alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名);
删除外键:
  alter table 表名 drop foreign key 外键名称;

2.1 外键的删除更新行为

在对父表进行修改的时候子表的外键的行为,可以指定

行为说明
no action在父表中更新/删除记录时,先检查此记录有没有外键,有则不允许更新/删除
restrict在父表中更新/删除记录时,先检查此记录有没有外键,有则不允许更新/删除
cascade在父表中更新/删除记录时,先检查此记录有没有外键,有则更新/删除外键在子表中的记录
set null在父表中删除记录时,先检查此记录有没有外键,有则将子表中对应的外键设为null(前提是此外键允许为null)
set default父表有变更时,子表外键设为一个默认值(MySQL默认的Innodb引擎不支持)

使用外键的删除更新行为需要使用的关键字为on

alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(主表列名) on update 行为 on delete 行为;

本篇到此结束,下一篇是多个数据表之间的查询操作,完


http://lihuaxi.xjx100.cn/news/1087682.html

相关文章

数据结构与算法之数组: Leetcode 605. 种花问题 (Typescript版)

种花问题 https://leetcode.cn/problems/can-place-flowers/ 描述 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 给你一个整数数组 flo…

Java 中的线程是什么,如何创建和管理线程-中(十二)

书接上文 三、Java 线程的同步 Java 中的线程同步是通过 synchronized 关键字实现的。在多线程环境下,当多个线程同时访问共享资源时,如果不进行同步控制,就会出现数据不一致、死锁等问题。为了保证多个线程之间的安全访问,需要…

MCU固件升级系列1(STM32)

本系列将从升级流程、boot代码编写、APP代码编写以及固件打包来介绍,硬件选用STM32F407ZGT6(手里只有),来完成这系列教程。 前言 为什么需要固件升级: 功能更新:随着产品的迭代和用户需求的变化,可能需要…

Prometheus监控系统存储容量优化攻略,让你的数据安心保存!

云原生监控领域不可撼动,Prometheus 是不是就没缺点?显然不是。 一个软件如果什么问题都想解决,就会导致什么问题都解决不好。所以Prometheus 也存在不足,广受诟病的问题就是 单机存储不好扩展。 1 真的需要扩展容量吗&#xff…

04_Uboot操作命令与其他命令

目录 BOOT 操作命令 bootz命令 bootm 命令 reset 命令 go 命令 run 命令 mtest 命令 BOOT 操作命令 uboot的本质工作是引导Linux,所以uboot肯定有相关的boot(引导)命令来启动Linux。常用的跟boot有关的命令有:bootz、bootm和boot。 bootz命令 要启动Linux,需要先将Lin…

OD工具之动态逆向分析技术实例分析

OD工具之动态逆向分析技术实例分析 vscode等编写cmp.cOD工具打开cmp.exe 卧槽垃圾高级软件工程真是烦人还是记录一下吧那么简单的几行没有手册搞半天都无力吐槽了 vscode等编写cmp.c 在vscode等编辑器中编写cmp.c文件&#xff1a; #include<stdio.h> int main() {int …

kotlin教程4:函数进阶

文章目录 可变参数尾递归函数函数式 kotlin教程&#xff1a;编程基础&#x1f48e;数据结构&#x1f48e;面向对象 可变参数 kotlin的函数定义非常灵活&#xff0c;既可以按照顺序传参&#xff0c;也可以通过参数名传参&#xff0c;而且可以设置参数默认值&#xff0c;这些在…

Linux安装MongoDB数据库,并内网穿透远程连接

文章目录 前言1. 配置Mongodb源2. 安装MongoDB3. 局域网连接测试4. 安装cpolar内网穿透5. 配置公网访问地址6. 公网远程连接7. 固定连接公网地址8. 使用固定地址连接 转载自Cpolar Lisa文章&#xff1a;Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接「内网穿透」 前言 …