SQL:函数以及约束

目录

介绍

函数

字符串函数

数值函数

日期函数

流程函数

约束

总结


介绍

说到函数我们都不陌生,在C,C++,java等语言中都有库函数,我们在平时也是经常使用,函数就是一段代码,我们既可以自定义实现,又可以使用库里内置的函数;从来更加简洁方便的完成业务;同样的在SQL中也有一些内置函数来供我们使用;

函数

函数:一段可以直接别另一段程序调用的程序或代码;
注意:要看到函数的结果要使用select +函数;

字符串函数

1>字符串拼接(concat)

使用语句

select concat("hello ","mysql");

结果: 

2>转换为小写(lower)

将字符串中的大写字符转换为小写,原本是小写的不变;
使用语句:

select lower("HellO");

结果: 

3>转换为大写(upper)

使用语句:

select upper("hello");

结果: 

4>使用自定义字符左填充(lpad)

这个函数的参数有三个;分别是填充前的字符串,填充后字符串的长度,填充字符;
注意这里的填充字符可以是一个单个字符,也可以是字符串;

如果是单个字符
使用语句:

select lpad("1",5,'0');

结果:

如果是字符串

使用语句:

select lpad("2",6,'01');

这里我设置的长度为6,只有5个位置可以填充,所以这里是01依次填充,直到填完;
结果:

5>使用自定义字符右填充(rpad)

这里需要注意的是有填充是从最右端依次依次向左填充的:
eg:使用语句:

select rpad("2",6,'01');

 结果是201010;

6>去头去尾的空格(trim)

使用语句:

select trim("  Hello , mysql");

结果: 把头部和尾部的空格去掉了;

7>返回指定字符串长度部分(substring)

使用语句:

select substring("abcdefg",1,5);

结果:"abcde";

注意如果没有写len长度的话,就会取起始位置到字符串的末尾;

数值函数

对x向下取整:取小于x的最大整数;
对x向上取整:取大于x的最小整数;
x模y:x/y的余数;

问题:我们如何返回0~10^x之间整数的随机数呢?

我们可以先使用rand生成一个0~1之间的小数,然后乘上10^x,这时候随机数的整数部分是有x位,但是小数部分还需要处理,我们就可以使用round来保留0位小数;这样就得到了0~10^x之间的随机数整数了; 

日期函数

这里的日期是年-月-日,time是时-分-秒,now就是年-月-日-时-分-秒;

流程函数

第一个if(value,t,f)与C语言中的三元表达式(value!=0?t:f;)很相似;后面的根据需求了解即可;

约束

概念:约束是作用于表中字段上的限制,用于限制存储在表中的数据;
目的:保证表中数据的正确性,有效性和完整性; 

 格式:
1.在创建表时,直接写在字段的数据类型后面;
2.在已经创建好的表中的字段中添加约束需要使用关键字alter;具体后面会有;

现在创建一个用户表,并同时加上约束;(一个字段并不是只能有一个约束);

1>主键(primary)和自增(auto_increment)


设置主键后,该字段的数据就要保持完整性(不为空且唯一);这个很好理解,下面来看一下自增性;

现在我向表中插入三个数据,但是我并没有插入id(id的约束是主键自增),虽然我们没有写,但是因为有自增,所以id不为空,而且是唯一的;下面我们来看看表;
自增的作用就是会自动的根据序列递增式的填充;

注意:如果我们插入失败了一个行数据,虽然没有插入成功,但是已经向数据库申请到了空间,下次插入的时候自增约束的字段并不会按照表格中现有的数据挨着填充;
比如:上表中id已经自动填充到3了,如果我插入一行数据失败了,然后我再插入一行数据成功了,那么新插入的一行数据的id就是5,而不是4;

 2>检查(check)

这个比较简单,只需要注意格式就可以了,格式与where的格式相同;

3>外键(foreign key (从表字段) reference (主表)(主表字段))

外键:外键是用来让两张表的数据建立联系,从而保证数据的一致性和完整性; 

以这两张表为例,每个员工都有一个所属的部门,部门都有一个id序号,而我们在填员工的部门id时必须得按照部门表中的id来填,也就是员工表中的dept_id的范围约束在了部门表的id取值中,这样就可以保证每个员工的所属部门都是存在的;

现在创建员工表:

 
在没有使用外键之前,尽管两张表在逻辑上有联系,但是在物理上是没有关系的,也就是说我更改部门表中的id员工表没有任何反应,我在员工表中填一个不存在的一个部门id也不会报错;

1>添加外键

使用语句:

 

外键添加后会在字段前出现一个蓝色的小钥匙标志 ;

2>检验是否两个表建立了联系

现在我删除掉部门表中的id为1的部门,在员工表中有好多行的员工在该部门,删除后如果报错了说明两个表之间建立了联系,如果没有报错说明两个表之阿金仍然没有建立物理上的联系;
我删除执行会出现一条报错语句,说明外键发挥了作用;不可以删除或更新主表数据;因为这样会影响到从表的很多数据都需要改变; 下面我们来说说外键的删除和更新行为;

3>删除和更新行为

1>CASCADE(同步)

如果我把部门表中id为1的数据更改为6,那么员工表中的原来dept_id是1的也会变成6;
如果我如果把部门表中id为1的数据删除,那么员工表中的原来dept_id是1的那一行的数据都会被删除;

2>SET NULL 

如果我把部门表中id为1的数据更改为6或者删除,那么员工表中的原来dept_id是1就会全部变成null;

总结

非空约束:NOT NULL
唯一约束:UNIQUE
主键约束:PRIMARY(自增:AUTO_INCREMENT)
默认约束:DEFAULT
检查约束:CHECK
外键约束:FOREIGN KEY

其中最重要的是主键和外键,他们与其他的使用格式不同;要求更严格;
外键的使用使得表与表之间不再是独立的,为以后的多表操作奠定了基础;

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

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

相关文章

从0到1深入浅出构建Nest.Js项目

Nest (NestJS) 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的开发框架。它利用JavaScript 的渐进增强的能力,使用并完全支持 TypeScript (仍然允许开发者使用纯 JavaScript 进行开发),并结合了 OOP (面向对…

Spring Boot技术栈:打造高效在线商城

2 相关技术 2.1 Springboot框架介绍 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring…

sentinel原理源码分析系列(三)-启动和初始化

本文是sentinel原理源码分析系列第三篇,分析sentinel启动和初始化 启动/初始化 sentinel初始化分两块,静态初始和适配器(包括aop) 静态初始 1. Root EntranceNode 如果我们用一栋楼类比资源调用,root EntranceNode好比一栋楼的大门&…

vulnhub-unknowndevice64 2靶机

vulnhub:https://www.vulnhub.com/entry/unknowndevice64-2,297/ 导入靶机,放在kali同网段,扫描 靶机在192.168.81.9,扫描端口 啥啊这都是,详细扫描一下 5555是adb,6465是ssh,12345看样子应该是…

简单的springboot 编写Socket服务接口

简单的springboot 编写Socket服务接口 1.需求 我们项目中有部分老接口为票据接口,其中实现为java socket形式进行实现,但是其中大部分信息都是原始公司封装的包进行实现的,想要修改非常费劲,所以此处简单了解了一下socket&#…

洛谷 P11045 [蓝桥杯 2024 省 Java B] 最优分组

[Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 首先得注意这么一点: k k k 必须得是 n n n 的因数(这里的 n , k n,k n,k 对应于题目的 N ,…

量化交易backtrader实践(三)_指标与策略篇(2)_内置指标A开头

在第1节中,我们学习了移动平均线的原理,中位数以及正态分布的概念,并通过python手工做了一个双均线的策略回测。了解了怎么用pandas计算移动平均线(rollingmean),怎么得到某一列上1个的值(shift)&#xff0…

【算法与图】通向高效解决方案的钥匙

文章目录 遍历算法BFS(广度优先遍历)1. 什么是 BFS?2. 特点和应用3. BFS 示例 DFS(深度优先搜索)1. 什么是 DFS?2. DFS 的基本步骤3. 特点4. DFS 的应用5. DFS 示例 最小生成树问题1. 什么是最小生成树&…

【mmengine】优化器封装(OptimWrapper)(入门)优化器封装 vs 优化器

MMEngine 实现了优化器封装,为用户提供了统一的优化器访问接口。优化器封装支持不同的训练策略,包括混合精度训练、梯度累加和梯度截断。用户可以根据需求选择合适的训练策略。优化器封装还定义了一套标准的参数更新流程,用户可以基于这一套流…

虚拟机三种网络模式详解

在电脑里开一台虚拟机,是再常见不过的操作了。无论是用虚拟机玩只有旧版本系统能运行的游戏,还是用来学习Linux、跑跑应用程序都是很好的。而这其中,虚拟机网络是绝对绕不过去的。本篇文章通俗易懂的介绍了常见的虚拟网络提供的三种网络链接模…

数据结构-3.5.队列的顺序实现

一.队列的顺序实现&#xff0c;初始化操作以及判断队列是否为空&#xff1a; 1.图解&#xff1a; 2.代码&#xff1a; #include<stdio.h> #define MaxSize 10 //定义一个队列最多存储的元素个数 ​ typedef struct {int data[MaxSize]; //用静态数组存放队列元素int f…

【springboot】整合沙箱支付

目录 1. 配置沙箱应用环境2. 配置springboot项目1. 引入依赖2. 配置文件注册下载ngrok 3. 创建支付宝支付服务类4. 支付界面模板5. 控制类实现支付6. 测试 1. 配置沙箱应用环境 使用支付宝账号登录到开放平台控制台。 使用支付宝登录后&#xff0c;看到以下页面&#xff0c;下…

MFC工控项目实例二十二主界面计数背景颜色改变

承接专栏《MFC工控项目实例二十一型号选择界面删除参数按钮禁用切换》 1、在SEAL_PRESSUREDlg.h文件中添加代码 class CSEAL_PRESSUREDlg : public CDialog { public: CBrush m_brush1;CBrush m_brush2;CBrush m_brush3;... } 2、在SEAL_PRESSUREDlg.cpp文件中添加代码 BO…

在2核2G服务器安装部署MySQL数据库可以稳定运行吗?

阿里云2核2G服务器可以安装MySQL数据库吗&#xff1f;当然可以&#xff0c;并且可以稳定运行MySQL数据库&#xff0c;目前阿里云服务器网aliyunfuwuqi.com使用的就是阿里云2核2G服务器&#xff0c;在云服务器上安装MySQL数据库&#xff0c;可以稳定运行。 目前阿腾云用于运行M…

查看 git log的过程中看到 :说明日志输出可能超出屏幕大小,系统进入了分页模式

在命令行提示符中&#xff0c;通常 : 表示系统等待进一步的输入。如果你在查看 git log 的过程中看到 :&#xff0c;说明日志输出可能超出屏幕大小&#xff0c;系统进入了分页模式&#xff0c;默认使用 less 命令查看内容。 此时你可以&#xff1a; 按 q 退出日志查看。按 En…

算法笔记(五)——分治

文章目录 算法笔记&#xff08;五&#xff09;——分治快排颜色分类排序数组数组中的第K个最大元素库存管理 III 归并排序数组交易逆序对的总数计算右侧小于当前元素的个数翻转对 算法笔记&#xff08;五&#xff09;——分治 分治算法字面上的解释是“分而治之”&#xff0c;就…

Python 从入门到实战32(数据库MySQL)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了数据库编程接口操作的相关知识。今天我们将学习…

【框架篇】过滤器和拦截器的区别以及使用场景

在项目开发中&#xff0c;常常会同时配置拦截器&#xff08;Interceptor&#xff09;和过滤器&#xff08;Filter&#xff09;&#xff0c;以下就是它们两个主要的区别&#xff1a; 过滤器&#xff08;Filter&#xff09; 配置和实现 Filter的实现还是很简单的&#xff0c;可…

【微服务】组件、基础工程构建(day2)

组件 服务注册和发现 微服务模块中&#xff0c;一般是以集群的方式进行部署的&#xff0c;如果我们调用的时候以硬编码的方式&#xff0c;那么当服务出现问题、服务扩缩容等就需要对代码进行修改&#xff0c;这是非常不好的。所以微服务模块中就出现了服务注册和发现组件&…

计算机毕业设计 基于Python的广东旅游数据分析系统的设计与实现 Python+Django+Vue Python爬虫 附源码 讲解 文档

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…