SQL:函数以及约束

news2024/11/15 23:38:31

目录

介绍

函数

字符串函数

数值函数

日期函数

流程函数

约束

总结


介绍

说到函数我们都不陌生,在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

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

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

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

相关文章

vscode qt 最新开发环境配置, 基于最新插件 Qt All Extensions Pack

qt 之前发布了vscode qt offical ,但是最新更新中将其升级改为了几个不同的插件,功能更强大 1. 前置条件 qt 已安装 2. 插件安装 打开vscode 插件安装,搜索qt 会看到很多qt插件,直接选择Qt All Extensions Pack 安装 会安装qt环境所需的…

国内旅游:现状与未来趋势分析

在当今社会快速发展的背景下,国内旅游更是呈现出蓬勃的发展态势。中国,这片拥有悠久历史、灿烂文化和壮丽山河的广袤土地,为国内旅游的兴起与发展提供了得天独厚的条件。 本报告将借助 DataEase 强大的数据可视化分析能力,深入剖…

Linux:深入理解冯诺依曼结构与操作系统

目录 1. 冯诺依曼体系结构 1.1 结构分析 1.2 存储结构分布图 2. 操作系统 2.1 概念 2.2 如何管理 2.3 什么是系统调用和库函数 1. 冯诺依曼体系结构 1.1 结构分析 不管是何种计算机,如个人笔记本电脑,服务器,都是遵循冯诺依曼结构。…

小论树形dp

文章目录 树形dp 概述树形dp 路径问题 树的最长路径 思路代码树的中心 换根DP思路代码数字转换 思路代码树形dp 有依赖的背包 二叉苹果树 思路代码树形dp 状态机 没有上司的舞会 思路代码战略游戏 思路代码皇宫看守 思路代码总结 概述 树形 DP,即在树上进行的 …

通信工程学习:什么是DQDB分布式队列双总线

DQDB:分布式队列双总线 DQDB(Distributed Queue Dual Bus),即分布式队列双总线,是美国电气电子工程师学会(IEEE)802.6标准中定义的一种城域网(MAN)数据链路层通信协议。该协议主要用于城域网的数据、语音和视频传输&am…

Python 中的 os 模块

Python 中的 os 模块 在Python中,os 模块是一个内置的标准库,提供了许多与操作系统交互的功能。它允许你执行一系列操作,如文件和目录操作、环境变量管理等。要在Python脚本中使用os模块,你需要首先导入它。 一些常见的用法&…

如何在 Android 中用 Kotlin 将 dp 转换为 px

我们在开发 Android 应用时,经常需要将 dp(密度无关像素)转换为 px(像素)。这是因为不同设备有不同的屏幕密度,使用 dp 可以保持在不同设备上的一致性。📱 但究竟如何将 dp 转换为 px 呢&#x…

鸿蒙网络管理模块02——Socket

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。 1、概述 Socket 连接主要是通过 Socket 进行数据传输,支持 TCP/UDP/Mul…

Redis篇(面试题 - 连环16炮)(持续更新迭代)

目录 (第一炮)一、Redis?常用数据结构? 1. 项目里面到了Redis,为什么选用Redis? 2. Redis 是什么? 3. Redis和关系型数据库的本质区别有哪些? 4. Redis 的线程模型了解吗&#x…

探索未来:掌握python-can库,开启AI通信新纪元

文章目录 **探索未来:掌握python-can库,开启AI通信新纪元**背景介绍**python-can**库简介安装指南函数使用示例应用场景常见问题及解决方案总结 探索未来:掌握python-can库,开启AI通信新纪元 背景介绍 在人工智能和物联网的飞速…

[Go语言快速上手]函数和包

目录 一、Go中的函数 函数声明 多个返回值 可变参数 匿名函数 值传递和地址传递 函数执行顺序(init函数) 二、Go中的包 基本语法 主要包(main package) 导入其他包 包的作用域 包的使用 包名别名 小结 一、Go中的函…

重生之我们在ES顶端相遇第 18 章 - Script 使用(进阶)

文章目录 0. 前言1. 基本使用2. 读请求中访问文档字段2.1 遍历 List2.2 判断对象存不存在2.3 判断值是否为空2.4 总结 3. 写请求中访问文档字段3.1 数字相加3.2 字符串相加3.3 将字符串转为数组 0. 前言 在前面部分,我们介绍了 ES 的基本使用和要掌握的基础性读写原…

TypeScript 算法手册【快速排序】

文章目录 1. 快速排序简介1.1 快速排序定义1.2 快速排序特点 2. 快速排序步骤过程拆解2.1 选择基准元素2.2 划分数组2.3 递归排序 3. 快速排序的优化3.1 三数取中法选择基准3.2 插入排序与快速排序结合案例代码和动态图 4. 快速排序的优点5. 快速排序的缺点总结 【 已更新完 Ty…

二分查找算法专题(1)

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: 优选算法专题 目录 二分查找算法的介绍 704. 二分查找 34. 在排序数组中查找元素的第一个和 最后一个位置 35. 搜索插入位置 69. x的平…

10-指针和多维数组

多维数组,本质上是数组的数组: 一、多维数组: int B[2][3] int(*P)[3] B;Print B //400 Print *B; //400 Print B[0] //400 Print &B[0][0] // 400B[i][j] *(B[i]j) *(*(Bi)j); int C[3][2][2] int(*p)[2][2] C; Print C //800 Prin…

大数据开发--1.1大数据概论

目录 一.大数据的概念 什么是大数据? 二. 大数据的特点 三. 大数据应用场景 四. 大数据分析业务步骤 大数据分析的业务流程: 五.大数据职业规划 职业方向 岗位技术要求 六. 大数据学习路线 一.大数据的概念 什么是大数据? 数据 世界…

【北京迅为】《STM32MP157开发板嵌入式开发指南》- 第十六章 Linux 第一个程序 HelloWorld

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

LC记录二:丑数专题,一文秒解丑数3题

文章目录 263.丑数1264.丑数21201.丑数3 263.丑数1 https://leetcode.cn/problems/ugly-number/description/ 简单题,丑数只包含质因子2、3、5。所以直接使用 n 循环 除 2 3 5最后判断结果是否等于1即可。 代码: class Solution {public boolean isUg…

01_SQLite

文章目录 ** SQLite 存储各类和数据类型 **** SQLite 五种亲缘类型** SQLite 创建数据表删除数据表插入数据信息从数据表中获取数据,以结果表的形式返回数据(结果集)updatedistinctorder bygroup byhaving触发器删除一个触发器(tr…

计网问答大题(期末复习)

计网总结笔记 概述 互联网的 2 个重要基本特点:连通性,资源共享 从互联网的工作方式上看,可以划分为两大块: •边缘部分: 由所有连接在互联网上的主机组成,由用户直接使用,用来进行通信&…