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

MySQL 函数与约束

MySQL 函数与约束

文章目录

  • MySQL 函数与约束
    • 1 函数
      • 1.1 字符串函数
      • 1.2 数值函数
      • 1.3 日期函数
      • 1.4 流程函数
    • 2 约束
      • 2.1 概述
      • 2.2 约束演示
      • 2.3 外键约束
      • 2.4 删除/更新行为

1 函数

  函数是指一段可以直接被另一程序调用的程序或代码。

1.1 字符串函数

MySQL中内置了很多字符串函数,常用的几个如下 :

在这里插入图片描述

-- 左填充
select lpad('01',5,'-');	-- 得到---01
-- 右填充
select rapd('01',5.'-');	-- 得到01---

1.2 数值函数

常见的数值函数如下:

在这里插入图片描述

案例: 通过数据库的函数,生成一个六位数的随机验证码。

思路: 获取随机数可以通过rand()函数,但是获取出来的随机数是在0-1之间的,所以可以在其基础上乘以1000000,然后舍弃小数部分,如果长度不足6位,补0

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

1.3 日期函数

常见的日期函数如下:

在这里插入图片描述

-- 增加指定的时间间隔
select date_add(now(), INTERVAL 70 YEAR );

1.4 流程函数

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

在这里插入图片描述

select if(false, 'Ok', 'Error');
select ifnull('Ok','Default');
select ifnull('','Default');
select ifnull(null,'Default');
-- 需求: 查询emp表的员工姓名和工作地址 (北京/上海 ----> 一线城市 , 其他 ----> 二线城市)
select
name,
( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else
'二线城市' end ) as '工作地址'
from emp;
create table score(id int comment 'ID',name varchar(20) comment '姓名',math int comment '数学',english int comment '英语',chinese int comment '语文'
) comment '学员成绩表';
insert into score(id, name, math, english, chinese) VALUES (1, 'Tom', 67, 88, 95), (2, 'Rose' , 23, 66, 90),(3, 'Jack', 56, 98, 76);select
id,
name,
(case when math >= 85 then '优秀' when math >=60 then '及格' else '不及格' end ) '数学',
(case when english >= 85 then '优秀' when english >=60 then '及格' else '不及格' end ) '英语',
(case when chinese >= 85 then '优秀' when chinese >=60 then '及格' else '不及格' end ) '语文'
from score;

2 约束

2.1 概述

  • 概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据

  • 目的:保证数据库中数据的正确、有效性和完整性。

  • 分类:

    在这里插入图片描述

    注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。

2.2 约束演示

案例:根据需求 完成表结构的创建

在这里插入图片描述

create table user(id int PRIMARY KEY AUTO_INCREMENT 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 '性别'
);

2.3 外键约束

  • 概念

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

在这里插入图片描述

左侧的emp表是员工表,里面存储员工的基本信息,包含员工的ID、姓名、年龄、职位、薪资、入职日期、上级主管ID、部门ID,在员工的信息中存储的是部门的ID dept_id,而这个部门的ID是关联的部门表dept的主键id,那emp表的dept_id就是外键,关联的是另一张表的主键。

注意:目前上述两张表,只是在逻辑上存在这样一层关系;在数据库层面,并未建立外键关联,所以是无法保证数据的一致性和完整性的

  • 添加外键语法

    CREATE TABLE 表名(

    字段名 数据类型,

    ...

    [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)

    );

-- 为emp表的dept_id字段添加外键约束,关联dept表的主键id
alter table emp add CONSTRAINT waijian FOREIGN KEY(dept_id) REFERENCES dept(id);
  • 删除外键

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

    -- 删除emp表的外键waijian
    alter table emp drop foreign key waijian;
    

2.4 删除/更新行为

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

在这里插入图片描述

  • 语法:

    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;

alter table emp add constraint waijian foreign key (dept_id) references
dept(id) on update cascade on delete cascade ;alter table emp add constraint waijian foreign key (dept_id) references
dept(id) on update set null on delete set null ;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CISP究竟适合谁?这四类人没跑了
  • 数组中的第K个最大元素
  • 2021 hnust 湖科大 操作系统课设 报告+原代码+指导书+流程图源文件
  • 【初阶数据结构】深入解析顺序表:探索底层逻辑
  • Facebook开户|Facebook广告设计与测试优化
  • 假期已结束,大家都开始上班了吗
  • if 语句、布尔类型、关系表达式
  • Ktor库的高级用法:代理服务器与JSON处理
  • linux中sed命令和awk命令如何使用??????
  • k8s小型实验模拟
  • mac环境基于llama3和metaGPT自动开发2048游戏
  • HTML静态网页成品作业(HTML+CSS)—— 金宝贝儿童教育机构介绍网页(2个页面)
  • 箭头函数 this
  • 纷享销客安全体系:安全运维运营
  • mysqldump常用备份数据库命令
  • [NodeJS] 关于Buffer
  • 4个实用的微服务测试策略
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • java 多线程基础, 我觉得还是有必要看看的
  • Java精华积累:初学者都应该搞懂的问题
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • php面试题 汇集2
  • Vue学习第二天
  • Webpack 4 学习01(基础配置)
  • 搞机器学习要哪些技能
  • 基于HAProxy的高性能缓存服务器nuster
  • 讲清楚之javascript作用域
  • 网络应用优化——时延与带宽
  • 线性表及其算法(java实现)
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • $L^p$ 调和函数恒为零
  • (1)STL算法之遍历容器
  • (19)夹钳(用于送货)
  • (2022 CVPR) Unbiased Teacher v2
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (八)Flink Join 连接
  • (二十六)Java 数据结构
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (面试必看!)锁策略
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)Windows2003安全设置/维护
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .net CHARTING图表控件下载地址
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .Net(C#)自定义WinForm控件之小结篇
  • .net开发日常笔记(持续更新)
  • .net连接oracle数据库
  • .pop ----remove 删除
  • @EnableWebSecurity 注解的用途及适用场景