当前位置: 首页 > article >正文

3、函数和约束

# 提供的数据sql
CREATE TABLE IF NOT EXISTS student(no BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT '学号',name VARCHAR(20) NOT NULL COMMENT '姓名',sex VARCHAR(2) DEFAULT '男' COMMENT '性别', age INT(3) DEFAULT 0 COMMENT '年龄',score DOUBLE(5,2) COMMENT '成绩'
)ENGINE = InnoDB CHARSET = UTF8 COMMENT = '学生表';
#插入数据
INSERT INTO student(no,name,sex,age,score) VALUES(DEFAULT ,'张三','男',20,59);
INSERT INTO student(no,name,sex,age,score) VALUES(DEFAULT ,'李四','女',19,62);
INSERT INTO student(no,name,sex,age,score) VALUES(DEFAULT ,'王五','其他',28,81);
INSERT INTO student(no,name,sex,age,score) VALUES(DEFAULT ,'龙华','男',22,75);
INSERT INTO student(no,name,sex,age,score) VALUES(DEFAULT ,'金凤','女',18,80);
INSERT INTO student(no,name,sex,age,score) VALUES(DEFAULT ,'张华','其他',27,88);
INSERT INTO student(no,name,sex,age,score) VALUES(DEFAULT ,'李刚','男',30,88);
INSERT INTO student(no,name,sex,age,score) VALUES(DEFAULT ,'潘玉明','女',28,81);
INSERT INTO student(no,name,sex,age,score) VALUES(DEFAULT ,'凤飞飞','其他',32,90);

一、计算函数

函数说明示例
ABS(x)返回X的绝对值
FLOOR(X)返回<=X的最大整数
CEIL(X)返回>=X的最小整数
TRUNCATE(X,D)返回数值X,保留到小数点后D位的值不进行四舍五入
ROUND(X)返回离X 最近的整数四舍五入
ROUND(X,D)保留X小数点后D位的值四舍五入
RAND()返回0-1的随机数 。
MOD(N,M)返回N/M 以后的余数
  • 示例如下
--查询绝对值大于60的分数
SELECT * FROM student WHERE ABS(score)>60;
--查询小于或等于90.1向下取整的分数
SELECT * FROM student WHERE score<=FLOOR(90.1);
--查询大于或等于90.1向上取整的分数
SELECT * FROM student WHERE score>=CEIL(90.1);
--查询大于或等于90.0截断为一位小数的分数
SELECT * FROM student WHERE score>=TRUNCATE(90.0,1);
--查询大于或等于四舍五入到一位小数的91.1的分数
SELECT * FROM student WHERE score>=ROUND(91.1);
--查询大于或等于四舍五入到一位小数的90.0的分数
SELECT * FROM student WHERE score>=ROUND(90.0,1);
--查询分数大于一个0到100之间的随机数的记录
SELECT * FROM student WHERE SCORE>RAND()*100; SELECT RAND();
--查询分数除以10的余数大于6的记录
SELECT * FROM student WHERE MOD(score,10)>6;

二、字符串函数

函数说明示例
CHAR_LENGTH(str)字符串的字符个数
LENGTH(str)字符串长度
LOWER(str)小写
UPPER(str)大写
TRIM(str)2边空格
LEFT(str,n) 和 RIGHT(str,n)分别从字符串的左边和右边提取指定数量的字符。
LTRIM(str)和RTRIM(str)分别去除字符串左边和右边的空格。
REPLACE(s,s1,s2)s2替换s中的s1部分
SUBSTR(str)从字符串中提取子字符串。
CONCAT(str1,str2…)用于连接两个或多个字符串。

三、日期和时间函数

函数说明
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前日期和时间
YEAR(d)返回给定日期d的年
MONTH(d)返回给定日期D是当月的第几天
HOUR(d)返回给定日期D的小时数
MINUTE(d)返回给定日期D的分钟数
SECOND(d)返回给定日期D的秒数
ADDDATE(d,n)返回给起始日期d加上n天的日期
TIMESTAMPDIFF(type,d1,d2)返回给定日期d1和d2的时间差
DATE_FORMAT(d,fomat)返回给定日期格式的字符串

四、条件判断函数

1、IF(条件, 表达式1, 表达式2)

如果条件满足,则使用表达式1,否则使用表达式2

SELECT (IF( score>0 ,score,name)) from student;+----------------------------+
| (IF( score>0 ,score,name)) |
+----------------------------+
| 59.00                      |
| 62.00                      |
| 81.00                      |
| 75.00                      |
| 80.00                      |
| 88.00                      |
| 88.00                      |
| 81.00                      |
| 90.00                      |
+----------------------------+

2、IFNULL(字段, 表达式)

如果字段值为空,则使用表达式,否则,使用字段值

SELECT (IFNULL(name,age)) FROM student;
--name 不为空,执行的name
+--------------------+
| (IFNULL(name,age)) |
+--------------------+
| 张三               |
| 李四               |
| 王五               |
| 龙华               |
| 金凤               |
| 张华               |
| 李刚               |
| 潘玉明             |
| 凤飞飞             |
+--------------------+

3、CASE WHEN 条件1 THEN 表达式1 [WHEN 条件2 THEN 表达式2 …] ELSE 表达式n END

CASE WHEN 条件1 THEN 表达式1 [WHEN 条件2 THEN 表达式2 ...] ELSE 表达式n END 

如果条件1满足,则使用表达式1;【如果条件2满足,则使用表达式2, … 】否则,使用表达式n。相当 于Java/cpp中的多重if…else语句。

select (CASE WHEN score>0 THEN score WHEN name is null THEN name ELSE no END) from student ;+------------------------------------------------------------------------+
| (CASE WHEN score>0 THEN score WHEN name is null THEN name ELSE no END) |
+------------------------------------------------------------------------+
| 59.00                                                                  |
| 62.00                                                                  |
| 81.00                                                                  |
| 75.00                                                                  |
| 80.00                                                                  |
| 88.00                                                                  |
| 88.00                                                                  |
| 81.00                                                                  |
| 90.00                                                                  |
+------------------------------------------------------------------------+

4、CASE … WHEN

CASE 表达式 WHEN1 THEN 表达式1 [WHEN2 THEN 表达式2 ...] ELSE 表达式n END

如果表达式的执行结果为值1,则使用表达式1;【执行结果为值2,则使用表达式2, … 】否则,使用 表达式n。相当于Java/cpp中的switch语句。

 select (CASE name WHEN "张三" THEN name ELSE no END) from student ;
+-------------------------------------------------+
| (CASE name WHEN "张三" THEN name ELSE no END)   |
+-------------------------------------------------+
| 张三                                            |
| 2                                               |
| 3                                               |
| 4                                               |
| 5                                               |
| 6                                               |
| 7                                               |
| 8                                               |
| 9                                               |
+-------------------------------------------------+

五、约束

1、了解约束

  • 约束是用于确保数据表中数据的完整性和一致性的规则。它们定义了表中数据的限制条件,避免不符合业务逻辑的错误数据被插入或修改。以下是 MySQL 中常见的约束类型及详细说明:
约束描述关键字
非空约束限制该字段的数据不能为空NOT NULL
唯一约束保证该字段的所有数据都是唯一不重复的UNIQUE
主建约束组件是一行数据的唯一标识要求非空且唯一PRIMARY KEY
默认约束保存数据时如果未指定该字段的值则采用默认值DEFAULT
检查约束(8.0.16后才有)保证字段值满足某一个条件CHECK
外键约束用于两张表的数据之间建立连接保证数据的一致性和完整性。引用另一个表的主键,用于维护表之间的关系。FOREIGN KEY

2、约束的创建(部分举例)

在这里插入图片描述

  • 创建表 user
	CREATE TABLE user(id int PRIMARY KEY AUTO_INCREMENT COMMENT  "主键",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 "性别")engine = INNODB CHARSET= UTF8 COMMENT= "约束练习";
  • 插入数据
insert into user(name,age,status,gender) values("Tom1",19,"1","男"),("Tom2",19,"0","男");insert into user(name,age,status,gender) values("Tom3",19,"1","男");
  • 让后开始判断约束的性质了
insert into user(name,age,status,gender) values(NULL,19,"1","男");
--我把主键改NULL,会报错
--1048 - Column 'name' cannot be null--我再次插入Tom3,会报错,主键是唯一且不重复的
insert into user(name,age,status,gender) values("Tom3",19,"1","男");

3、再次介绍(详细)

3.1、插入和删除主键

  • 注意:AUTO_INCREMENT下无法删除主键
-- 添加主键约束:保证数据的唯一性
ALTER TABLE 表名 ADD PRIMARY KEY(字段名1,字段名2, ..., 字段名n);
-- 删除主键约束
ALTER TABLE 表名 DROP PRIMARY KEY;

主键的添加和删除

3.2、插入和删除外键

CREATE TABLE 表名字([CONSTRAINT] 外键名字 FOREIGN KEY(外键字段名字) REFERENCES 主表(主表字段名)
);
ALTER TABLE 表名字 ADD CONSTRAINT 外键名字 FOREIGN KEY(外键字段名) REFERENCES 主表(主表字段名);
ALTER TABLE 表名字 DROP FOREIGN KEY 外键名字;

外键的添加和删除

注意:ADD添加时,与主键不同 。

在这里插入图片描述

3.3、插入和删除唯一约束

-- 添加唯一约束
ALTER TABLE 表名字 ADD CONSTRAINT 唯一约束的名字 UNIQUE (字段);
-- 删除唯一约束
ALTER TABLE 表名字 DROP INDEX 字段名字;

注意:删除有INDEX

3.4、插入和删除检查约束

-- 添加检查约束
ALTER TABLE 表名字 ADD CONSTRAINT  检查约束名字 CHECK (条件);
-- 删除检查约束(MySQL 8.0+)
ALTER TABLE 表名字 DROP CONSTRAINT 检查约束名字;

3.5、插入和删除默认约束

ALTER TABLE stu ALTER COLUMN 字段 SET DEFAULT 默认值;
ALTER TABLE stu ALTER COLUMN 字段 DROP DEFAULT;

3.6、插入和删除自增约束

-- 为字段添加自增约束
ALTER TABLE 表名 MODIFY 字段名 列类型 AUTO_INCREMENT;
-- 为字段删除自增约束
ALTER TABLE 表名 MODIFY 字段名 列类型;

3.7、插入和删除非空约束

-- 为字段添加非空约束
ALTER TABLE 表名 MODIFY 字段名 列类型 NOT NULL;
-- 删除字段非空约束
ALTER TABLE 表名 MODIFY 字段名 列类型 NULL;

相关文章:

3、函数和约束

# 提供的数据sql CREATE TABLE IF NOT EXISTS student(no BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 学号,name VARCHAR(20) NOT NULL COMMENT 姓名,sex VARCHAR(2) DEFAULT 男 COMMENT 性别, age INT(3) DEFAULT 0 COMMENT 年龄,score DOUBLE(5,2) COMMENT 成绩…...

PhpStudy | PhpStudy 工具安装 —— Windows 系统安装 PhpStudy

&#x1f31f;想了解这个工具的其它相关笔记&#xff1f;看看这个&#xff1a;[网安工具] 服务器环境配置工具 —— PhpStudy 使用手册 笔者备注&#xff1a;Windows 中安装 PhpStudy 属于傻瓜式安装&#xff0c;本文只是为了体系完善而发。 在前面的章节中&#xff0c;笔者简…...

Debezium快照事件监听器系统设计

Debezium快照事件监听器系统设计 1. 系统概述 1.1 设计目标 为 Debezium 的快照过程提供可扩展的事件监听机制允许外部系统在快照过程中执行自定义逻辑提供线程安全的事件分发机制确保监听器的异常不会影响主快照流程1.2 核心功能 表快照开始事件监听表快照完成事件监听行数据…...

基于vue框架的订单管理系统r3771(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;商家,用户,商品信息,订单信息,订单配送,评价记录 开题报告内容 基于Vue框架的订单管理系统开题报告 一、研究背景与意义 随着电子商务的快速发展和消费者购物习惯的改变&#xff0c;传统订单管理方式面临效率低、易出错、难以适应高并…...

【2025年前端高频场景题系列】使用同一个链接,如何实现PC打开是web应用、手机打是-个H5 应用?

面试情境与问题引入 在前端开发面试中,面试官经常会抛出一些看似简单却能考察多方面能力的问题。"如何实现同一个链接在PC端和移动端展示不同应用?"就是这样一个典型问题。为什么面试官喜欢问这个问题?因为它能同时考察候选人的设备适配知识、性能优化意识、用户…...

语音识别-2

目录 1.蓝牙优化 1.打开sco 2.外放时的蓝牙的不同版本适配 2.微软文本转语音优化 1.异步文本转语音 2.语音的个性化 上一篇关于语音识别, 虽然能用,但在系统适配,机器适配方面,速度,性能等还是有优化的地方.所以这篇是关于这些的. 1.蓝牙优化 A2DP:是一种单向的高品质音…...

React useState 的同步/异步行为及设计原理解析

一、useState 的同步/异步行为 异步更新&#xff08;默认行为&#xff09; • 场景&#xff1a;在 React 合成事件&#xff08;如 onClick&#xff09;或生命周期钩子&#xff08;如 useEffect&#xff09;中调用 useState 的更新函数时&#xff0c;React 会将这些更新放入队列…...

语音识别——语音转文字

SenseVoiceSmall阿里开源大模型&#xff0c;SenseVoice 是具有音频理解能力的音频基础模型&#xff0c;包括语音识别&#xff08;ASR&#xff09;、语种识别&#xff08;LID&#xff09;、语音情感识别&#xff08;SER&#xff09;和声学事件分类&#xff08;AEC&#xff09;或…...

兰亭妙微:用系统化思维重构智能座舱 UI 体验

兰亭妙微设计专注于以产品逻辑驱动的界面体验优化&#xff0c;服务领域覆盖AI交互、智能穿戴、IoT设备、智慧出行等多个技术密集型产业。我们倡导以“系统性设计”为方法论&#xff0c;在用户需求与技术边界之间找到最优解。 此次智能驾驶项目&#xff0c;我们为某车载平台提供…...

计算机视觉----基础概念、卷积

一、概述 1.计算机视觉的定义 计算机视觉(Computer Vision)是一个跨学科的研究领域,主要涉及如何使计算机能够通过处理和理解数字图像或视频来自动进行有意义的分析和决策。其目标是使计算机能够从视觉数据中获取高层次的理解,类似于人类的视觉处理能力。 具体来说,计算机…...

第三十七节:视频处理-视频读取与处理

引言:解码视觉世界的动态密码 在数字化浪潮席卷全球的今天,视频已成为信息传递的主要载体。从短视频平台的爆火到自动驾驶的视觉感知,视频处理技术正在重塑人类与数字世界的交互方式。本指南将深入探讨视频处理的核心技术,通过Python与OpenCV的实战演示,为您揭开动态影像…...

【自然语言处理与大模型】向量数据库:Chroma使用指南

Chroma是一款功能强大的开源 AI 应用数据库&#xff0c;专为高效数据存储与检索而设计。它不仅支持 Embedding 和 Metadata 的存储&#xff0c;还集成了多项核心功能&#xff0c;包括向量搜索、全文搜索、Document 存储、Metadata 过滤以及多模态检索。此外&#xff0c;Chroma …...

NSSCTF [GFCTF 2021]where_is_shell

889.[GFCTF 2021]where_is_shell(system($0)64位) [GFCTF 2021]where_is_shell (1) 1.准备 motalymotaly-VMware-Virtual-Platform:~$ file shell shell: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.s…...

WSL 安装 Debian 12 后,Linux 如何安装 vim ?

在 WSL 的 Debian 12 中安装 Vim 非常简单&#xff0c;只需使用 apt 包管理器即可。以下是详细步骤&#xff1a; 1. 更新软件包列表 首先打开终端&#xff0c;确保系统包列表是最新的&#xff1a; sudo apt update2. 安装 Vim 直接通过 apt 安装 Vim&#xff1a; sudo apt …...

电子数据取证(数字取证)技术全面指南:从基础到实践

为了后续查阅方便&#xff0c;推荐工具先放到前面 推荐工具 数字取证基础工具 综合取证平台 工具名称类型主要功能适用场景EnCase Forensic商业全面的证据获取和分析、强大的搜索能力法律诉讼、企业调查FTK (Forensic Toolkit)商业高性能处理和索引、集成内存分析大规模数据处…...

Ubuntu使用Docker搭建SonarQube企业版(含破解方法)

目录 Ubuntu使用Docker搭建SonarQube企业版&#xff08;含破解方法&#xff09;SonarQube介绍安装Docker安装PostgreSQL容器Docker安装SonarQube容器SonarQube汉化插件安装 破解生成license配置agent 使用 Ubuntu使用Docker搭建SonarQube企业版&#xff08;含破解方法&#xff…...

Spark SQL 之 Analyzer

Spark SQL 之 Analyzer // Special case for Project as it supports lateral column alias.case p: Project =>val resolvedNoOuter = p.projectList.map(resolveExpressionByPlanChildren(_, p...

c/c++数据类型转换.

author: hjjdebug date: 2025年 05月 18日 星期日 20:28:52 CST descrip: c/c数据类型转换. 文章目录 1. 为什么需要类型转换?1.1 发生的时机:1.2 常见的发生转换的类型: 2. c语言的类型转换: (Type) value2.1 c语言的类型变换是如何实现的? 规则是什么? 3. c 的static_cast…...

Django 项目的 models 目录中,__init__.py 文件的作用

在 Django 项目的models/init.py文件中&#xff0c;这些导入语句的主要作用是将各个模型类从不同的模块中导入到models包的命名空间中。这样做有以下几个目的&#xff1a; 简化导入路径 当你需要在项目的其他地方使用这些模型时&#xff0c;可以直接从models包导入&#xff0c…...

实验六:FPGA序列检测器实验

FPGA序列检测器实验(远程实验系统) 文章目录 FPGA序列检测器实验(远程实验系统)一、数字电路基础知识1. 时钟与同步2. 按键消抖原理代码讲解:分频与消抖3. 有限状态机(FSM)设计代码讲解:状态机编码与转移4. 边沿检测与信号同步5. 模块化设计二、实验数字电路整体思想三…...

网络的知识的一些概念

1.什么是局域网&#xff0c;什么是广域网 局域网&#xff08;Local area network&#xff09;也可以称为本地网&#xff0c;内网&#xff0c;局域网有这几个发展经历&#xff1a; 最开始电脑与电之间是直接用网线连接的 再后来有了集线器&#xff08;&#xff09; 再后来出…...

芋道项目,商城模块数据表结构

一、需求 最近公司有新的业务需求&#xff0c;调研了一下&#xff0c;决定使用芋道&#xff08;yudao-cloud&#xff09;框架,于是从github&#xff08;https://github.com/YunaiV/yudao-cloud&#xff09;上克隆项目&#xff0c;选用的是jdk17版本的。根据项目启动手册&#…...

yarn任务筛选spark任务,判断内存/CPU使用超过限制任务

yarn任务筛选spark任务&#xff0c;判断内存/CPU使用超过限制任务 curl -s “http://it-cdh-node01:8088/ws/v1/cluster/apps?statesRUNNING” | jq ‘.apps.app | map(select(.applicationType “SPARK” ) | select(.allocatedMB > 102400 or .allocatedVCores > 50)…...

【氮化镓】HfO2钝化优化GaN 器件性能

2025年,南洋理工大学的Pradip Dalapati等人在《Applied Surface Science》期刊发表了题为《Role of ex-situ HfO2 passivation to improve device performance and suppress X-ray-induced degradation characteristics of in-situ Si3N4/AlN/GaN MIS-HEMTs》的文章。该研究基…...

c#的内存指针操作(仅用于记录)

c#也可以直接操作内存指针&#xff0c;如下为示例&#xff1a; unsafe {byte[] a {1,2,3};fixed (byte* p1 a, p2 &a[^1]){Debugger.Log(1, "test", $"max index:{p2-p1}");Debugger.Log(1, "test", $"address:{(long)p1:X}")…...

常见机器学习算法简介:回归、分类与聚类

机器学习说到底&#xff0c;不就三件事&#xff1a; 预测一个数 —— 回归 判断归属哪个类 —— 分类 自动把数据分组 —— 聚类 别背术语&#xff0c;别管定义&#xff0c;先看问题怎么解决。 一、回归&#xff08;Regression&#xff09; 干嘛的&#xff1f; 模型输出一…...

SpringBoot项目里面发起http请求的几种方法

在Spring Boot项目中发起HTTP请求的方法 在Spring Boot项目中&#xff0c;有几种常用的方式可以发起HTTP请求&#xff0c;以下是主要的几种方法&#xff1a; 1. 使用RestTemplate (Spring 5之前的主流方式) // 需要先注入RestTemplate Autowired private RestTemplate restT…...

Linux下Nginx源码安装步骤详解

以下是在Linux系统下从源码安装Nginx的详细步骤及解释&#xff1a; 1. 下载Nginx源码 步骤&#xff1a; wget http://nginx.org/download/nginx-1.25.3.tar.gz tar -zxvf nginx-1.25.3.tar.gz cd nginx-1.25.3解释&#xff1a; wget&#xff1a;从官网下载Nginx源码包&#…...

SQLMesh 增量模型从入门到精通:5步实现高效数据处理

本文深入解析 SQLMesh 中的增量时间范围模型&#xff0c;介绍其核心原理、配置方法及高级特性。通过实际案例说明如何利用该模型提升数据加载效率&#xff0c;降低计算资源消耗&#xff0c;并提供配置示例与最佳实践建议&#xff0c;帮助读者在实际项目中有效应用这一强大功能。…...

Zookeeper 入门(二)

4. Zookeeper 的 ACL 权限控制( Access Control List ) Zookeeper 的ACL 权限控制,可以控制节点的读写操作,保证数据的安全性&#xff0c;Zookeeper ACL 权 限设置分为 3 部分组成&#xff0c;分别是&#xff1a;权限模式&#xff08;Scheme&#xff09;、授权对象&#xff08…...