MYSQL三、MYSQL的函数与约束

一、函数

  1. 函数:是指一段可以直接被另一段程序调用的程序或代码。
  2. MySQL中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数。

1、字符串函数

在这里插入图片描述

--  concat : 字符串拼接 
select concat('Hello' , ' MySQL');  -- 输出: Hello MySQL--  lower : 全部转小写select lower('Hello');  -- 输出:hello-- upper : 全部转大写
select upper('hello'); -- 输出:HELLO--  lpad : 左填充(向01的左边填充-,使它达到5个字符的长度)select lpad('01', 5, '-');  --  输出:---01--  rpad : 右填充(向01的右边填充-,使它达到5个字符的长度)
select rpad('01', 5, '-');  -- 输出:01----- trim : 去除空格(去掉字符串头部和尾部的空格)
select trim(' Hello  MySQL '); -- 输出:Hello  MySQL--  substring : 截取子字符串(从字符串'Hello MySQL'的第1个字符起,截取5个字符的长度)select substring('Hello MySQL',1,5);  -- 输出:Hello

2、数值函数

在这里插入图片描述

-- ceil:向上取整
select ceil(1.1); -- 输出:2-- floor:向下取整select floor(1.9);  -- 输出:1-- mod:取模select mod(7,4); -- 输出:3-- rand:获取0-1内的随机数
select rand();-- round:四舍五入(取小数点后2位数)
select round(2.344,2); -- 输出:2.34

测试:通过数据库的函数,生成一个六位数的随机验证码。
思路: 获取随机数可以通过rand()函数,但是获取出来的随机数是在0-1之间的,所以可以在其基础上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0

select lpad(round(rand()*1000000 , 0), 6, '0');

3、日期函数

在这里插入图片描述

--  curdate:当前日期
select curdate();--  curtime:当前时间select curtime(); -- now:当前日期和时间select now(); --  YEAR , MONTH , DAY:当前年、月、日select YEAR(now()); select MONTH(now());select DAY(now());-- date_add:增加指定的时间间隔 (70的值为正表示日期时间增加,为负表示日期时间减少)
select date_add(now(), INTERVAL 70 YEAR );--  datediff:获取两个日期相差的天数select datediff('2024-10-01', '2024-11-01'); -- 输出:-31

4、流程函数

  1. 流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。
    在这里插入图片描述
-- 如果false的值为true,则返回Ok,否则返回Error
select if(false, 'Ok', 'Error'); -- Error-- ifFull,如果参数1不为null,则返回参数1,否则返回参数2select ifnull('Ok','Default'); -- Okselect ifnull('','Default'); -- 返回空的字符串,即前面的参数select ifnull(null,'Default'); -- 返回Default-- case when then else end
-- 需求: 查询emp表的员工姓名和工作地址 (北京/上海 ----> 一线城市 , 其他 ----> 二线城市)selectname,( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end ) as '工作地址'from emp;  -- 如果workaddress的值='北京'或者'上海'则返回一线城市,否则返回二线城市

二、约束

  1. 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
  2. 目的:保证数据库中数据的正确、有效性和完整性。
    在这里插入图片描述
    约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

案例演示
在这里插入图片描述

CREATE TABLE tb_user(id int AUTO_INCREMENT PRIMARY KEY  COMMENT  'ID唯一标识',name varchar(10) NOT NULL UNIQUE  COMMENT  '姓名' ,age int check (age > 0 && age <= 120)  COMMENT  '年龄' ,status char(1) default  '1'  COMMENT  '状态',gender char(1)  COMMENT  '性别');

在为字段添加约束时,我们只需要在字段之后加上约束的关键字即可,需要关注其语法。

外键约束

  1. 外键:用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。

1.1、添加外键

 CREATE TABLE 表名(
字段名    数据类型,...[CONSTRAINT]  [外键名称]  FOREIGN  KEY (外键字段名)   REFERENCES   主表 (主表列名)
);ALTER   TABLE  表名   ADD  CONSTRAINT   外键名称   FOREIGN   KEY (外键字段名)  
REFERENCES  主表 (主表列名) ;--CONSTRAINT关键字用于为外键约束指定一个名称,以便对其进行引用和操作
 create table tb_user(id int auto_increment primary key comment '主键ID',name varchar(10) comment '姓名',age int comment '年龄',gender char(1) comment '1: 男 , 2: 女',phone char(11) comment '手机号') comment '用户基本信息表';create table tb_user_edu(id int auto_increment primary key comment '主键ID',degree varchar(20) comment '学历',major varchar(50) comment '专业',primaryschool varchar(50) comment '小学',middleschool varchar(50) comment '中学',university varchar(50) comment '大学',userid int unique comment '用户ID',constraint fk_userid foreign key (userid) references tb_user(id)) comment '用户教育信息表';

为表添加数据时,先添加没有外键的表,然后有外键的表再根据主表的的数据添加数据

-- 为emp表的dept_id字段添加外键约束,外键名称为fk_emp_dept_id,关联dept表的主键id。
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

1.2、删除外键

ALTER   TABLE  表名   DROP  FOREIGN  KEY  外键名称;
-- 删除emp表的外键fk_emp_dept_id。alter table emp drop foreign key fk_emp_dept_id;

1.3、 删除/更新行为

  1. 添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行为有以下几种:
    在这里插入图片描述
 ALTER TABLE  表名  ADD CONSTRAINT  外键名称  FOREIGN KEY  (外键字段)   REFERENCES   
主表名 (主表字段名)   ON UPDATE CASCADE ON DELETE CASCADE;
-- cascadealter table emp add constraint fk_emp_dept_id foreign key (dept_id) references 
dept(id) on update cascade on delete cascade ;-- set nullalter table emp add constraint fk_emp_dept_id foreign key (dept_id) references 
dept(id) on update set null on delete set null ;

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

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

相关文章

通用代码生成器应用场景六,为完善的应用系统收集需求

通用代码生成器应用场景六&#xff0c;为完善的应用系统收集需求 使用急就章功能可以开发一个简单的应用先凑和着使用。此应用系统也可以成为完善的应用系统的原型和祖先。如果您新规划一个完善的应用系统&#xff0c;您可以先使用通用代码生成器生成一个临时使用的系统&#x…

【TB作品】MSP430F5529,单片机,Picture to pixels,乌鸦喝水OLED

功能 Picture to pixels. Use bitmaps to tell a story. Convert pictures to bitmaps and store the bitmaps in a header file. In the main program, draw the pictures on the OLED screen in sequence to tell a story. Use the text to help tell the story 乌鸦喝水故…

Python一般用什么IDE:深入剖析四大主流选择

Python一般用什么IDE&#xff1a;深入剖析四大主流选择 在Python编程的世界里&#xff0c;选择合适的集成开发环境&#xff08;IDE&#xff09;对于提升编程效率和体验至关重要。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;深入剖析Python开发者常用的四大主…

【linux】(1)文件操作及vi

文件和目录的创建 创建文件 touch 命令&#xff1a;创建一个新的空文件。 touch filename.txtecho 命令&#xff1a;创建一个文件并写入内容。 echo "Hello, World!" > filename.txtcat 命令&#xff1a;将内容写入文件。 cat > filename.txt然后输入内容&…

人脸识别系统之动态人脸识别

二&#xff0e;动态人脸识别 1.摄像头人脸识别 1.1.导入资源包 import dlib import cv2 import face_recognition from PIL import Image, ImageTk import tkinter as tk import os注&#xff1a;这些导入语句允许您在代码中使用这些库和模块提供的功能&#xff0c;例如创建…

Cacti EZ中文版 12.2.27 ISO 下载安装

简介 修改了yum源为中国高校联合镜像源 github改为gitee。 系统增加中文语言包。 修改时区为东八区。 增加了常用的软件包。 PS&#xff1a;CactiEZ是一个自动化安装cacti和插件的ISO镜像&#xff0c;本教程的ISO是基于官方的IOS针对国内网络做了修改。 可按照目前最新的Ca…

方法递归案例

文件搜索 需求&#xff1a;从D盘中,搜索idea64.exe这个文件,找到后输出其位置 public static void main(String[] args) {searchFile(new File("D:/") , "idea64.exe");}/*** 去目录搜索某个文件* param dir 目录* param fileName 要搜索的文件名称*/pub…

Java1.8 vue版家政服务系统成品源码 家政管家系统源码 家政月嫂系统源码 家政保洁系统源码 在线派单,师傅入驻全套商业源码

Java1.8 vue版家政服务系统成品源码 家政管家系统源码 家政月嫂系统源码 家政保洁系统源码 在线派单&#xff0c;师傅入驻全套商业源码 一、系统定义 家政上门服务系统是一种利用互联网技术&#xff0c;将家政服务需求与专业的家政服务人员进行高效匹配的平台。它允许用户通过…

【OceanBase诊断调优】—— obdiag 工具助力OceanBase数据库诊断调优(DBA 从入门到实践第八期)

1. 前言 昨天给大家分享了【DBA从入门到实践】第八期&#xff1a;OceanBase数据库诊断调优、认证体系和用户实践 中obdiag的部分&#xff0c;今天将其中的内容以博客的形式给大家展开一下&#xff0c;方便大家阅读。 2. 正文 在介绍敏捷诊断工具之前&#xff0c;先说说OceanBa…

springboot配置

springboot配置 配置文件分类 springboot提供了多种属性配置方式 application.xml(只有老的spring项目使用)application.propertiesapplication.yml(或yaml) 优先级:properties>yml>yaml 配置文件 pom.xml★ 在Spring Boot项目中&#xff0c;pom.xml文件是Maven项目…

x264帧级码率控制解析

目前x264代码中表面看到的码率控制方式有CQP,CRF和ABR三种。 CQP(Constant Quantitative Parameters), 固定QP,直接整帧都用相同的QP值。CRF (Constant Rate Factor),固定码率因子,更注重质量,x264默认的码控方式,CRF会动态的调整每帧的QP,对比CQP在同等码率下CRF能…

Unity3D 基于YooAssets的资源管理详解

前言 Unity3D 是一款非常流行的游戏开发引擎&#xff0c;它提供了丰富的功能和工具来帮助开发者快速创建高质量的游戏和应用程序。其中&#xff0c;资源管理是游戏开发中非常重要的一部分&#xff0c;它涉及到如何有效地加载、管理和释放游戏中的各种资源&#xff0c;如模型、…

PLM系统与PDM系统、ERP系统、CRM系统有哪些关系?

在当今快速发展的信息技术时代&#xff0c;企业信息化已成为提升管理水平和增强竞争力的关键。其中&#xff0c;产品生命周期管理&#xff08;PLM&#xff09;作为企业信息化的基石&#xff0c;与其他信息系统如产品数据管理&#xff08;PDM&#xff09;、企业资源规划&#xf…

基于SpringBoot+Vue的公园管理系统的详细设计和实现(源码+lw+部署文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;还…

富格林:掌握正规甄别欺诈信息

富格林认为&#xff0c;在追求财富增值的道路上&#xff0c;掌握一项正规甄别欺诈信息的投资技能至关重要。现货黄金交易作为一种古老且稳定的投资方式&#xff0c;吸引了无数投资者的目光。下面富格林希望通过介绍一些正规甄别欺诈信息的技巧能够帮助大家在财富增值这条路上走…

如何自建yum源仓库

文章目录 1&#xff0c;创建可用的yum源文件夹&#xff0c;把你自己的软件包&#xff0c;并放在这个目录文件夹中2&#xff0c;将yum源文件夹目录复制到/var/www/html/中3&#xff0c;客户端修改配置文件4&#xff0c;创建一个 RPM 软件包存储库5&#xff0c;查验是否成功6&…

Dify快速接入微信

一、Dify简介 项目官网&#xff1a;Dify.AI 生成式 AI 应用创新引擎 Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务&#xff08;Backend as Service&#xff09;和 LLMOps 的理念&#xff0c;使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非…

Python中的虚拟环境

2024年6月2日&#xff0c;周日上午 在Python开发中&#xff0c;虚拟环境&#xff08;Virtual Environment&#xff09;是一个重要的工具&#xff0c;它可以为每个项目创建独立的Python环境&#xff0c;以避免不同项目之间的依赖冲突。以下是关于Python虚拟环境的详细介绍&#…

ESP32-C3模组上跑通OTA升级(11)

接前一篇文章&#xff1a;ESP32-C3模组上跑通OTA升级&#xff08;10&#xff09; 本文内容参考&#xff1a; 《ESP3-C3 物联网工程开发实战》 乐鑫科技 特此致谢&#xff01; 上一回说到解决了证书验证的问题&#xff0c;但紧接着又出现了一个新的问题&#xff1a;版本相同无…

查找最小的K个元素

输入n个正整数&#xff08;可以有重复的情况出现&#xff09;&#xff0c;输出其中最小的k个&#xff08;如有重复的情况出现&#xff0c;重复输出&#xff09;&#xff0c;其中1≤k≤n≤10000&#xff0c;每个正整数小于10000。 例如输入1、4、8、2、5、7、6、3这8个数字&…