mysql入门(二)——函数与约束

news2024/11/20 16:26:51

mysql入门——函数与约束

  • mysql中的函数
    • 字符串函数
      • 字符串函数的基本应用
    • 数值函数
    • 日期函数
    • 流程函数
  • 约束
      • 概述
      • 约束的演示
      • 外键约束
      • 建立外键关联:
      • 删除外键
      • 外键的删除/更新行为
      • 为什么要采取外键约束

在这里插入图片描述

mysql中的函数

之前我们介绍过聚合函数,在MySQL中,聚合函数是用于对多行数据进行计算和统计的函数。它们将多行数据作为输入,并返回单个值作为输出。聚合函数可以对数据进行汇总、计数、求和、平均值、最大值、最小值等操作,用于生成有关数据集的摘要信息。

函数: 是指一段可以最直接被另一段程序调用的程序或代码,在mysql中早已经在内部写好了

字符串函数

我们这里介绍常用的几种字符串函数

函数描述
CONCAT(s1,s2…sn)将多个字符串连接起来。
SUBSTRING (str,start,len)提取字符串的子串。返回字符串str从start位置起的len个长度的字符串
UPPER将字符串转换为大写。
LOWER将字符串转换为小写。
LENGTH返回字符串的长度。
TRIM去除字符串两端的空格。
LPAD(str,n,pad)左填充,用字符串pad对str左边进行填充,达到n个字符串长度
RPAD(str,n,pad)右填充,用字符串pad对str右边进行填充,达到n个字符串长度

例子:

updata 表名 set 字段 = 函数();//使用函数更新emp表中的字段

由于业务需求变更,企业员工的工号统一号为5位数,目前不足5位数的全部在前面补0.比如:1号员工的工号应该为00001;

update emp set workno = lpad (workno,5,'0');

字符串函数的基本应用

  1. 数据清洗和格式化:字符串函数可用于去除多余的空格、修剪字符串、删除特定字符,以及格式化字符串的大小写等。例如,使用函数如TRIM、UPPER、LOWER和REPLACE可以清理和规范化输入数据。

  2. 字符串拼接和连接:使用函数如CONCAT和CONCAT_WS可以将多个字符串连接成一个字符串,常用于生成完整的文本内容或动态生成SQL查询语句。

  3. 字符串分割和提取:函数如SUBSTRING、LEFT、RIGHT和MID用于提取字符串的子串,常用于从文本中提取特定的信息或截取部分字符串。

  4. 字符串比较和匹配:使用函数如LIKE、INSTR和STRCMP可以进行字符串的模糊匹配、查找特定子串,或者比较字符串的大小或顺序。

  5. 字符串长度和计数:函数如LENGTH和CHAR_LENGTH用于计算字符串的长度,常用于验证输入长度或限

向左填充5位数,不足5位数向前补0;

数值函数

函数描述
ROUND(x,y)对数字进行四舍五入。求参数x的四舍五入的值,保留y位小数
CEILING返回大于等于给定数字的最小整数。向上取整
FLOOR返回小于等于给定数字的最大整数。向下取整
ABS返回给定数字的绝对值。
MOD (x/y)返回两个数字相除的余数。

案例:通过数据库的·函数,生成一个六位数的随机验证码。先使用rand乘以1000000 再进行取整;

select rand()*1000000;

因为rand是生成0-1直接的随机数,所以可能会出现0。016563这种数字,导致乘之后不满足6位数的要求,这时候我们可以对其进行补零;

select lpad(round(rand()*10000000),6,‘0’);

日期函数

日期函数在sql语句中实现对日期类型的查询计算

函数描述
NOW返回当前日期和时间。
DATE_FORMAT将日期格式化为指定的字符串格式。
DATE_ADD(data,INTERVAL expr type)在给定日期上添加指定的时间间隔expr后的值。
DATEDIFF(date1,date2)计算date1与date2两个日期之间的天数差。
CURDATE()返回当前日期
CURTIME()返回当前时间
YEAR(date)获取指定date的年份
MONTH(date)获取指定日期的月份
DAY(data)获取指定data的日期

流程函数

流程控制函数在sql中实现条件筛选,从而提高语句的效率

函数描述
IF (val,t,f)根据条件返回不同的值。 如果value为true,则返回t,否则返回f
CASE WHEN [val1] THEN [res1] [val2][res2]ELSSE[desault] END在查询中实现条件逻辑。如果val1为true则返回res1…否则返回default的值
IFNULL(val1,val2)如果val1不为空,则返回val1,否则返回val2
CASE[expr] WHEN [val1] THEN [res1] [val2][res2]ELSSE[desault] END如果val1为expr则返回res1…否则返回default的值

注意:ifnull中的条件是如果为null值,并非是为空串,如果是空串,也会返回空串, 其中第二个函数常用于范围判断,返回true或false的情况,第四个常用于固定当某值等于的条件的时候返回

举例: 查询emp员工表中的员工姓名和工作地址(如果是北京上海就返回一线城市,如果是其他则返回二线城市)

select  name  case workaddress when '北京' then '一线城市' when '上海' then '一线城市'  else '二线城市' end from emp;

案例:统计函数各个学院的成绩,展示的规则如下:
如果成绩>=80;展示优秀
如果成绩>=60;展示及格
否则;展示不及格

原表格:

在这里插入图片描述

select id,name,
    (case when english <=80 then '及格'when english <= 60 then '及格' else '不及格' end) as '英语成绩'from student;

在这里插入图片描述

约束

约束就是限制,束缚,它是用来限制表结构中的数据的,是用于定义和强制表中数据的完整性和规则的规范。它们用于确保表中的数据满足特定的条件,以维护数据的一致性和有效性。

概述

概念: 是用于作用表中字段的规则,用于限制储存在表中的结构。
目的: 保证数据库中数据的正确,有效性和完整性
分类:

名字作用关键字
主键约束唯一标识表中的每一行数据,要求非空且唯一,注意复合主键PRIMARY KEY
唯一约束确保列中的数据值是唯一的,不重复的UNIQUE
非空约束确保列中的数据值不为空NOT NULL
外键约束建立两张表之间的关系并强制执行引用完整性FOREIGN KEY
检查约束定义必须满足的插入或更新数据的条件 ,CHECK
默认约束保存数据时,如果未指定盖字段的值,则采用默认值DEFAULT

唯一约束:比如用户创建的用户名,身份证我们就可以加上唯一约束。在很多规范中要求要有主键约束;默认约束:假设我们现在有个状态值,未设置就为1,这时候就可以使用默认约束。一旦出现外键约束,就标志着至少有两张表。对于一个字段可以添加多个约束条件,多个约束使用空格进行隔开。检查约束中有多个条件的时候可以使用&&进行连接。主键可以不给,会进行自动增长。

约束的演示

案例:更具需求,完成表结构的创建
(自动增长:在mysql数据库中:auto_increment)
在这里插入图片描述

create table  user(
    id int primary key auto_increment,
    name varchar(10) not null unique ,
    age int check ( age>0&&age<=120 ),
    status char(1) default '1',
    gender char(1) 
)

外键约束

外键约束是让两张表来建立数据连接的,从而保证数据的一致性和完整性。

在这里插入图片描述
我们注意观察员工表中的dep_id和部门表中的id(主键),我们就说dep_id是部门表的外键,通过外键进行将两张表连接起来。我们一般叫部门表是主表(父表),员工表是从表(子表)注意:以上的两张表,在数据库上没有建立外键关联, 所以无法保证数据的一致性和完整性,即我在改变一个表中的数据时候,另外一张表中的数据并不会跟着改变。

在这里插入图片描述
在这里插入图片描述
我们观察以上两张表,他们是通过id进行关联的,所以我们可以通过为两张表依靠id进行相连,创建外键约束。

建立外键关联:

语法:
1.在 创建表结构的时候就进行添加

create table 表名(
	字段名 数据类型
	...
	...
	[constraint][外键名称] foreign key (外键字段名) references 主表(主表列名)
)

2.表创建好之后进行关联

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

我们现在给上边两个表添加外键约束

alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept (id);  

添加了外键之后,我们就可以保证数据的完整性,所以我们在删除数据的时候,他会进行判断,父表中的数据是否与字表中的数据存在关联情况,如果关联则不能删除,很容易理解,比如我删除了父表,那字表中的那么多数据怎么办,现在两张表已经建立了链接。

删除外键

alter table 表名 drop foreign key 外键名称;

外键的删除/更新行为

行为描述
CASCADE DELETE删除主表记录时,关联的从表记录也会被自动删除。
SET NULL删除主表记录时,关联的从表记录的外键值会被设置为 NULL。
SET DEFAULT父表有变更时,字表将外键列设置成一个默认值
CASCADE UPDATE删除主表记录时,关联的从表记录的外键值会被更新为另一个合适的值。
NO ACTION 或者RESTIRICT如果主表记录被删除时,关联的从表记录仍存在,则阻止删除操作。

注意:后两个是默认情况

语法:

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

就是在上边添加外键的语句后边加上on update与on delete ,代表在更新和删除的时候进行的操作。

为什么要采取外键约束

  1. 建立表之间的关系: 当存在多个表之间的关联关系时,使用外键约束可以确保关联的完整性。例如,一个订单表和一个顾客表,可以使用外键约束将订单表中的顾客ID列与顾客表中的主键关联起来,以确保订单表中的顾客ID值必须存在于顾客表中。

  2. 维护引用完整性: 外键约束可以确保在插入或更新数据时,引用关系的完整性得到维护。它可以防止在关联表中引用不存在的数据,从而保持数据的一致性。

  3. 防止意外删除或修改关联数据: 外键约束可以防止意外删除或修改关联表中的数据。当一个表有外键约束关联到其他表时,如果尝试删除或修改被关联的数据,则会触发外键约束,阻止操作或根据定义的操作行为执行相应的操作。

  4. 简化查询和维护操作: 外键约束可以简化查询和维护操作。通过外键约束,可以轻松地执行联接查询、级联删除和更新等操作,而不需要手动处理数据的引用关系。

  5. 提高数据完整性和一致性: 外键约束有助于提高数据的完整性和一致性。它可以强制执行数据的关联关系和依赖性,防止不一致或不合法的数据插入或更新。

在这里插入图片描述

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

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

相关文章

chatgpt赋能Python-python3_7字体大小调整

Python3.7字体大小调整指南 您是否在使用Python3.7时遇到字体大小问题&#xff1f;本文将为您提供一份全面的Python3.7字体大小调整指南&#xff0c;帮助您轻松解决这一问题。 什么是字体大小问题 字体大小问题指的是当我们在使用Python3.7编辑器时&#xff0c;发现字体太小…

chatgpt赋能Python-python3_8字体大小

Python3.8 字体大小对程序员的重要性 在编写 Python 代码时&#xff0c;设置字体大小可能是最基本的操作之一&#xff0c;特别是对于长期进行编码工作的程序员来说。Python 3.8 为程序员提供了更好的字体调节能力&#xff0c;可以将字体大小设置为适合自己的大小&#xff0c;使…

chatgpt赋能Python-python3_9_4怎么用

介绍 Python是目前最为流行的编程语言之一&#xff0c;用途非常广泛&#xff0c;可以应用于各个领域。Python 3.9.4是Python最新版本&#xff0c;其中包含了很多新功能和改进&#xff0c;让Python编程更加简单和高效。 此文将解释Python 3.9.4的一些主要的功能&#xff0c;以…

JAVA-SE-异常

在JAVA中&#xff0c;将程序执行过程中发生的不正常行为称为异常。简单来说就是我们在运行或编译一段代码时所报的错误。 一&#xff0c;异常的体系结构 在JAVA中不同类型的异常&#xff0c;都有与其对应的类来进行描述。 …

实验三、数据高级查询实验

实验名称&#xff1a;实验3 数据高级查询实验 实验目的和要求&#xff1a; 实验目的和要求 掌握SQL嵌套查询和集合查询等各种高级查询的设计方法等。 实验软硬件要求&#xff1a; 计算机、MySQL,Navicat 实验内容、实验过程、所遇问题及其解决方法 实验内容&#xff1a;针…

Discourse 的用户信息中的 IP 地址显示的是 CloudFlare 的 IP 地址

因为使用了 CloudFlare 的反向地址。 所有 Discourse 获得的用户的 IP 地址其实是 CloudFlare 的服务器地址。 修改 好在 Discourse 已经提供了相关的解决方案。 需要在 Discourse 的配置文件中&#xff0c;添加下面的内容&#xff1a; “templates/cloudflare.template.ym…

分布式系统概念和设计——协调和协定

分布式系统概念和设计 协调和协定 分布式系统中的进程如何协调它们的动作和对共享值达成协议? 算法在分布式系统中的基本目的是&#xff1a;供一组进程来协调它们的动作或对一个或多个值达成协议 避免固定的主-从关系的主要原因是&#xff0c;经常需要系统即使在系统故障的情…

日志文件的轮循(logrotate)

文章目录 日志文件的轮循(logrotate)轮循基本原理轮循的基本配置实际测试logrotate的操作使用案例 自定义日志文件的轮循功能 日志文件的轮循(logrotate) 日志轮循&#xff08;logrotate&#xff09;是一种用于管理日志文件的工具&#xff0c;它可以帮助我们自动地对日志文件进…

EasyRecovery Photo16 for windows数据恢复软件免费版下载安装教程

EasyRecovery Photo16 for windows数据恢复软件免费版下载是一款由Kroll Ontrack公司开发的数据恢复软件&#xff0c;其主要功能是恢复已经删除或损坏的图片文件。该软件可用于恢复各种类型的图片文件&#xff0c;包括JPEG、GIF、BMP、PNG等&#xff0c;同时也支持恢复照片文件…

Thematica: 炫彩主题与黑暗奇观的Vue3之旅

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 一、介绍1.1 博客主题和目的1.2 Vue 3简介二、炫彩主题2.1 准备工作2.2 安装必要依赖2.3 创建Vue项目2.4 设置全局样式

AJax和Axios的讲解

目录 Ajax Ajax基本介绍 同步异步 原生Ajax 原生的Ajax使用方式 Axios 基本介绍 Axios的基本使用 发送 get 请求 发送 post 请求 Axios快速入门 请求方法的别名 练习 Ajax Ajax基本介绍 Ajax: 全称Asynchronous JavaScript And XML&#xff0c;异步的JavaScript和XML…

【每日一题/数学模拟题/进位算术】1073. 负二进制数相加

⭐️前面的话⭐️ 本篇文章介绍【1073. 负二进制数相加】题解&#xff0c;算法标签&#xff1a;【数学】&#xff0c;【思维】&#xff0c;【模拟算术】&#xff0c;展示语言c/java。 &#x1f4d2;博客主页&#xff1a;未见花闻的博客主页 &#x1f389;欢迎关注&#x1f50e…

代码随想录训练营Day38| 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

目录 学习目标 学习内容 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 学习目标 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 学习内容 理论基础 problems/动态规划理论基础.md programmercarl/leetcode-master&#xff08;代码随…

C++的list使用

list 1.list的介绍和使用1.1. list介绍1.2. list的使用1.2.1 list的构造1.2.2. list iterator的使用1.2.3. list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效 1.list的介绍和使用 1.1. list介绍 list是可以在常数范围内在任意位置进行插入…

chatgpt赋能Python-python2的n次方

Python2中实现n次方的方法 Python是一种非常受欢迎的编程语言&#xff0c;其简单易学的特性吸引了大量的开发者前来学习和使用。在Python2中&#xff0c;实现n次方有多种方法&#xff0c;下面就给大家介绍一些。 方法一&#xff1a;使用运算符 在Python2中&#xff0c;可以使…

不重启Linux修改主机名,以CentOS 7举例

在 Linux 中&#xff0c;可以通过修改主机名配置文件的方式更改主机名&#xff0c;不需要重启机器即可立即生效。 下面介绍一下具体步骤&#xff1a; 1、查看原始主机名 比如我的主机名叫small-black 2、使用命令行修改主机名 2.1 修改主机名 首先&#xff0c;使用以下命…

2023年的深度学习入门指南(14) - 不能只关注模型代码

2023年的深度学习入门指南(14) - 不能只关注模型代码 最近&#xff0c;有一张大模型的发展树非常流行&#xff1a; 这个图是相当不错的&#xff0c;对于加深对于Transformer模型编码器、解码器作用的理解&#xff0c;模型的开源和闭源情况等等都相当有帮助&#xff0c;大家使…

尝试Google Bard并对比OpenAI ChatGPT,一个擅长创造性,一个擅长事实查询?

文章目录 尝试Google Bard并对比OpenAI ChatGPT&#xff0c;一个擅长创造性&#xff0c;一个擅长事实查询&#xff1f;Google Bard 的自我介绍Google Bard 暂时不支持中文Google Bard除了支持英语外&#xff0c;还支持日语Google Bard和OpenAI ChatGPT的对比Google Bard的回答O…

音乐宿主软件排行榜前十名,音乐宿主要买正版吗

随着电子音乐的不断发展&#xff0c;一些电子音乐爱好者开始尝试自己编写电子音乐。而编写电子音乐必不可少的一点就是需要一款非常好用的音乐宿主软件&#xff0c;那么今天我们就来说一说音乐宿主软件排行榜前十名以及音乐宿主软件要买正版吗这两个问题。 一、音乐宿主软件排…

数组【C语言】

目录 一维数组的创建和初始化 数组创建 数组的初始化 一维数组的使用 一维数组在内存中的存储 二维数组的创建与初始化 二维数组的创建 二维数组的初始化 二维数组的使用 二维数组在内存中的存储 数组越界 数组名作为函数参数 数组名 一维数组的创建和初始化 数组…