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

MySQL -函数和约束

函数

MySQL中的函数主要分为以下四类: 字符串函数、数值函数、日期函数、流程函数。

字符串函数

MySQL中内置了很多字符串函数

函数功能
concat(S1,S2,…Sn)字符串拼接,将S1,S2,… Sn拼接成一个字符串
lower(str)将字符串str全部转为小写
upper(str)将字符串str全部转为大写
lpad(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
rpad(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
trim(str)去掉字符串头部和尾部的空格
substring(str,start,len)返回从字符串str从start位置起的len个长度的字符串

例:
concat : 字符串拼接
select concat('Hello' , ' MySQL');
lower : 全部转小写
select lower('Hello');
upper : 全部转大写
select upper('Hello');
lpad : 左填充
select lpad('01', 5, '-');
rpad : 右填充
select rpad('01', 5, '-');
trim : 去除空格
select trim(' Hello MySQL ');
substring : 截取子字符串
select substring('Hello MySQL',1,5);

数值函数

常见的数值函数如下:

函数功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x,y)返回x/y的模
RAND()返回0~1内的随机数
ROUND(x,y)求参数x的四舍五入的值,保留y位小数

例:
ceil:向上取整
select ceil(1.1);
floor:向下取整
select floor(1.9);
mod:取模
select mod(7,4);
rand:获取随机数
select rand();
round:四舍五入
select round(2.344,2);

日期函数

常见的日期函数如下:

函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前日期和时间
YEAR(date)获取指定date的年份
MONTH(date)获取指定date的月份
DAY(date)获取指定date的日期
DATE_ADD(date, INTERVAL exprtype)返回一个日期/时间值加上一个时间间隔expr后的时间值
DATEDIFF(date1,date2)返回起始时间date1 和 结束时间date2之间的天数

例:

curdate:当前日期
select curdate();
curtime:当前时间
select curtime();
now:当前日期和时间
select now();
YEAR , MONTH , DAY:当前年、月、日
select YEAR(now());
select MONTH(now());
select DAY(now());
date_add:增加指定的时间间隔
select date_add(now(), INTERVAL 70 YEAR );
datediff:获取两个日期相差的天数
select datediff('2021-10-01', '2021-12-01');

流程函数

流程函数也是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率。

函数功能
if (value , t , f)如果value为true,则返回t,否则返回f
ifnull (value1 , value2)如果value1不为空,返回value1,否则返回value2
case when [val1] then [res1] …else [default] end如果val1为true,返回res1,… 否则返回default默认值
cases [ expr ] when [ val1 ] then[res1] … else [ default ] end如果expr的值等于val1,返回res1,… 否则返回default默认值

例:
if
select if(false, 'Ok', 'Error');
ifnull
select ifnull('Ok','Default');
select ifnull('','Default');
select ifnull(null,'Default');
case when then else end
查询emp表的员工姓名和工作地址

select
	name,
	( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else
'二线城市' end ) as '工作地址'
from emp;

约束

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

分类:

约束描述关键字
非空约束限制该字段的数据不能为nullnot null
唯一约束保证该字段的所有数据都是唯一、不重复的unique
主键约束主键是一行数据的唯一标识,要求非空且唯一primary key
默认约束保存数据时,如果未指定该字段的值,则采用默认值default
检查约束(8.0.16版本之后)保证字段值满足某一个条件check
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性foreign key

注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束
在这里插入图片描述

外键约束

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

  • 添加外键:
CREATE TABLE 表名(
	字段名 数据类型,
	...
	[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
);

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;

  • 删除外键:

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

删除/更新行为

添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行
为有以下几种:

行为说明
no action当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 restrict 一致) 默认行为
restrict当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 no action 一致) 默认行为
cascade当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
set NULL当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)。
set default父表有变更时,子表将外键列设置成一个默认的值 (Innodb不支持)

具体语法为:
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

来源

笔记是观看黑马程序员的教学视频总结而成


http://www.kler.cn/a/450634.html

相关文章:

  • Spring AOP 中记录日志
  • 开发一个DApp项目:DeFi、DApp开发与公链DApp开发
  • 什么是MVCC?
  • Day1 苍穹外卖前端 Vue基础、Vue基本使用方式、Vue-router、Vuex、TypeScript
  • KingbaseES(金仓数据库)入门学习
  • Tomcat负载均衡全解析
  • VS2022 中的 /MT /MTd /MD /MDd 选项
  • 分布式事务的解决方案(欢迎讨论~)
  • springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
  • 机器学习-KMeans聚类
  • clickhouse分布式表插入数据不用带ON CLUSTER
  • SpringBoot状态机
  • Xilinx 平台 drp 动态调节 mmcm
  • python基础知识(六)
  • 【day15】String常用API
  • 【论文阅读笔记】Learning to sample
  • 数据结构经典算法总复习(上卷)
  • redis延迟队列
  • 云边端一体化架构
  • pyinstaller打包资源文件和ini配置文件怎么放
  • 油漆面积(2017年蓝桥杯)
  • 在瑞芯微RK3588平台上使用RKNN部署YOLOv8Pose模型的C++实战指南
  • ABP vNext框架之EntityVersion
  • 绩效考核试题
  • 技术文档的语言表达:简洁、准确与易懂的平衡艺术
  • 嵌入式科普(24)从SPI和CAN通信重新理解“全双工”