MySQL笔记-函数,约束

news2024/11/18 8:21:32

本文标签 : 数据库函数  约束

目录

一、函数

1.字符串函数.

2.数值函数.

3.日期函数.

4.流程函数

二、约束

1.概述

2.约束演示

3.外键约束

 1.概念 :

 2. 实现:

 3.删除/更新行为:

三、总结


一、函数

1.字符串函数.

 实现:

                            -- 函数演示 --
    -- 语法: select 函数(参数);

-- 1.字符串函数
-- 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(返回当前字符串的前len个字符)
select substring('hello MySQL',1,5);

练习:

-- 1.企业员工的工号,统一为5位数, 目前不足5位数的全部在前面补0.比如: 1号员工的工号应该是00001.
update emp set workno = lpad(workno,5,'0');

2.数值函数.

 

 实现:

-- 2.数值函数
-- ceil (向上取整)
select ceil(1.5);

-- floor(向下取整)
select floor(1.1);

-- mod(求模 7%4)
select mod(3,4);

-- rand(生成 0~1 之间的随机数)
select rand();

-- roune(四舍五入,保留几位小数)
select round(2.345,2);

-- 需求 : 通过数据库的函数,生成一个六位数的随机验证码.(0.01*1000000=10000,所以再加个 lpad 函数,不足 6 位补 0)
select lpad(round(rand()*1000000 , 0),6,'0');

3.日期函数.

 实现:

-- 3.日期函数
-- curdate(当前日期)
select curdate();

-- curtime(当前时间)
select curtime();

-- now(当前日期和时间)
select now();

-- year , month , day
select YEAR(now()); -- 当前日期 now ,所属年份 year

select MONTH(now()); -- 当前日期 now ,所属月份 month

select DAY(now()); -- 当前日期 now ,所属日期 day

-- date_add(返回一个日期/时间,加上一个时间间隔后的时间值)
select date_add(now(),INTERVAL 70 DAY );   -- now 当前时间 (INTERVAL 固定写法) ,加上 70day 后的时间/日期.
select date_add(now(),INTERVAL 70 MONTH );
select date_add(now(),INTERVAL 70 YEAR );

-- datediff(两个指定时间之间相差的天数),第一个时间 - 第二个时间
select datediff('2023-4-17','2022-4-17');

-- 需求 : 查询所有员工的入职天数,并根据入职天数倒序排序.
select name,datediff(curdate(),entrydate) as 'entrydays' from emp order by entrydays desc;
-- 时间相减函数datediff( 当前时间函数curdate - 列表名 entrydate) desc降序

结果: 

4.流程函数

 

 实现:

-- 4.流程函数
-- if(判断是否为 true ,为 true 返回 ok ,不是返回 Error)
select if(true,'ok','Error');

-- ifnull(判断非空,非空返回 ok ,空则返回后面的 default)
select ifnull('ok','default');

select ifnull('','default');  -- 字符串 空,返回空字符串

select ifnull(null ,'default');  -- 返回 null

-- case when then else end
-- 需求:查询 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);


-- 需求:统计班级各个学员的成绩, 展示的规则如下:
-- >=85,展示优秀,
-- >=60,展示及格,
-- 其他,展示不及格.


实现:
    select
    id,name,
        (case when math >=80 then '优秀' when math >= 60 then '及格' else '不及格' end) '数学',
        (case when english >=80 then '优秀' when english >= 60 then '及格' else '不及格' end) '英语',
        (case when chinese >=80 then '优秀' when chinese >= 60 then '及格' else '不及格' end) '语文'
from score;

结果: 

二、约束

1.概述

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

2.    目的:保证数据库中数据的正确,有效性和完整性.

3.    分类:

 注意  :  约束是作用表中字段上的,可以在创建表/求该表的时候添加约束.

2.约束演示

按照需求 完成下列表结构的创建: 

 实现:

-- 创建用户表
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 '状态',
    genter char(1) comment '性别'
) comment '用户表';

3.外键约束

 1.概念 :

        外键是用来让两张表的数据之间建立联系,从而保证数据的一致性和完整性. 

 2. 实现:

        实现如下两张关系表的主键和外键约束:

 注意 : 目前上述的两张表,在数据库层面,并未建立连接,所以是无法保证数据的一致性和完整性的.

实现:

-- ---------------------------------- 约束 (外键) --------------------------

-- 准备数据

create table dept(
    id   int auto_increment comment 'ID' primary key,
    name varchar(50) not null comment '部门名称'
)comment '部门表';
INSERT INTO dept (id, name) VALUES (1, '研发部'), (2, '市场部'),(3, '财务部'), (4, '销售部'), (5, '总经办');


create table emp(
    id  int auto_increment comment 'ID' primary key,
    name varchar(50) not null comment '姓名',
    age  int comment '年龄',
    job varchar(20) comment '职位',
    salary int comment '薪资',
    entrydate date comment '入职时间',
    managerid int comment '直属领导ID',
    dept_id int comment '部门ID'
)comment '员工表';

INSERT INTO emp (id, name, age, job,salary, entrydate, managerid, dept_id) VALUES
            (1, '金庸', 66, '总裁',20000, '2000-01-01', null,5),(2, '张无忌', 20, '项目经理',12500, '2005-12-05', 1,1),
            (3, '杨逍', 33, '开发', 8400,'2000-11-03', 2,1),(4, '韦一笑', 48, '开发',11000, '2002-02-05', 2,1),
            (5, '常遇春', 43, '开发',10500, '2004-09-07', 3,1),(6, '小昭', 19, '程序员鼓励师',6600, '2004-10-12', 2,1);

 添加外键:

-- 语法:

-- 添加外键:

-- 法1.直接在创建表时添加外键约束
create table 表名(
        字段名 数据类型 , 
        ... ...
        [constraint] [外键名称] foreign key(外键字段名) refences 主表 (主表列名)
);

-- 法2.创建表后添加约束
  alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);

-- 实现添加外键 :
  alter table emp add constraint dept_id foreign key (dept_id) references dept (id);

 删除外键:

-- 删除外键
-- 语法 : alter table 表名 drop foreign key 外键名称;

alter table emp drop foreign key dept_id;

 3.删除/更新行为:

 no action 和 restrict 为默认行为, set default 基本用不到.

删除/更新行为的语法及实现:

-- ---------------------------------- 删除/更新行为 -----------------------------

-- 语法 : alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名 (主表字段名) on update cascade on DELETE cascade ;

-- 实现 :
-- cascade:

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


-- set null:

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


总结

数据库函数,约束相关笔记.如有不足,还望指出!      

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

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

相关文章

跨域和网关通俗小白理解

跨域 跨域就是协议域名端口不同的服务器不能互相请求&#xff0c;企业级解决办法一般是通过Nginx反向代理实现 我们服务&#xff0c;线上都是通过S3服务器的Nginx反向代理解决跨域问题&#xff0c;因为Nginx和服务端沟通属于服务器之间的问题&#xff0c;不像浏览器有同源策略…

哇塞,炫云的智能优化太厉害啦!渲染费用竟然大幅降低了!

你有没有遇到过因为设置参数错误而导致云渲染费用突然飙升的情况呢&#xff1f;或者不知道自己设置的参数是否过高&#xff1f;现在&#xff0c;这些问题都可以轻松解决了&#xff0c;因为炫云的渲染质量功能非常智能和人性化。根据不同用户需求&#xff0c;它将参数优化分为五…

二进制部署nacos、docker部署nacos、k8s部署nacos、helm部署nacos

目录 前言Nacos支持三种部署模式官方文档二进制部署nacos&#xff08;单机模式&#xff09;安装jdk创建数据库及用户名下载安装包并解压导入nacos的表结构修改配置文件&#xff0c;启动nacos&#xff0c;登录nacos 二进制部署nacos&#xff08;cluster模式&#xff09;安装jdk&…

干货 | 什么是高频电解电容,它有普通电解电容有什么区别?

高频电解电容是一种常见的电容器&#xff0c;它在高频电路中发挥着重要的作用。与普通电解电容不同&#xff0c;高频电解电容能够更好地适应高频电路的需求&#xff0c;具有更高的频率响应和更低的ESR&#xff08;等效串联电阻&#xff09;。 电解电容重要性&#xff1a;电解电…

射频功率放大器在超声换能器声场特性校准中的应用

实验名称&#xff1a;基于水听器法的超声换能器声场特性校准技术的研究 研究方向&#xff1a;超声换能器 测试目的&#xff1a; 超声无损检测是无损检测领域重要的技术之一&#xff0c;而换能器作为超声检测中的关键部件&#xff0c;广泛应用于工业检测和医用超声成像领域。其性…

opencv配置安装

opencv配置安装 1、安装方式 https://blog.csdn.net/qq_45022687/article/details/120241068 根据这个网址的配置进行安装 2、解编译 mutex/thread等 似乎因为mingw的问题,#include 等直接引入线程无法直接引用&#xff0c;这导致了原有代码中直接使用mutex/thread的部分需要…

关于ARM核心板、一体板、底板的知识分享

嵌入式处理器模组&#xff0c;又称嵌入式核心板&#xff0c;或为CPU模组/核心板/SOM&#xff08;System on Module)&#xff0c;它是包含处理系统的核心电子部件的子电路板&#xff0c;集成了主芯片、存储器&#xff08;eMMC/Nand Flash)、运行内存&#xff08;DDR&#xff09;…

太神奇了,1984 年的电脑也能跑 Chat-GPT

新加坡的逆向计算爱好者 Yeo Kheng Meng 发布了一个 “doschgpt” ChatGPT 客户端&#xff0c;这个客户端适用于上世纪八十年代的 MS-DOS 系统。 目前这个 DOS 系统的 ChatGPT 客户端已成功在 1984 年的 IBM 5155 便携式 PC 上运行&#xff0c;这台机子配备 4.77Mhz 主频的 In…

孤儿僵尸守护进程基本概念与使用

文章目录 前言孤儿进程僵尸进程守护进程总结 前言 孤儿进程、僵尸进程和守护进程是操作系统中的概念&#xff0c;它们分别表示不同的进程状态和特性。孤儿进程和僵尸进程了解了解(都是为守护进程做铺垫)&#xff0c;但是对于守护进程大家还是可以好好学习学习&#xff0c;相信…

人民满意手机银行服务白皮书——服务分析篇

易观&#xff1a;商业银行积极践行“金融为民”&#xff0c;坚持“以用户为中心”的发展理念&#xff0c;从全客群、全服务、全渠道推动金融服务触达广大人民群众。其中&#xff0c;手机银行作为服务及经营主阵地&#xff0c;是人民群众获取金融服务的超级入口及服务平台。 “以…

【超算/先进计算学习】日报2

目录 今日已完成任务列表遇到的问题及解决方案任务完成详细笔记编辑器Vim程序开发步骤文件编辑器 Vim 快速入门任务练习 编译器 GCC程序编译流程编译器 gcc 的简易使用gcc 编译链接命令规则及常用编译选项 工程构建工具 Makemake 命令与makefile文件的规则和逻辑makefile 文件编…

数据库ER图详解

ER图也成ERD&#xff08;Entity Relationship Diagram&#xff09;,目前对于ER图的表示有两种方式&#xff1a; 一种是Chens notation&#xff0c;1976年Peter Chen首次提出了Entity Relationship Modeling&#xff08;实体关系建模&#xff09;概念。 另一种是Crow’s foot no…

【UITableViewCell的重用 Objective-C语言】

一、UITableViewCell有哪些属性,怎么看, 1.可以按住command键,点开这个UITableView,看到如下界面: 这个时候,文字比较大,你可能看起来不是很清楚,这个时候,可以点击左上角的xcode,选择Preference, 让它变小一些, 文字变小,变成12以后,这些属性,是不是对的很齐啊…

Postcat IDEA 插件,最全的使用教程

Postcat 插件不会入侵到代码内部&#xff0c;无需添加任何jar包依赖&#xff0c;这个真的很香&#xff01; 下面说一说&#xff0c;这个插件如何使用&#xff0c;是时候展现真正的技术了~ 如何安装配置&#xff1f; IDEA 版本需大于 IntelliJ IDEA 2022.03 在 IDEA “设置-插件…

JSon使用

官方文档 JSon在线文档&#xff1a;https://www.w3school.com.cn/js/js_json_intro.asp Ajax在线文档&#xff1a;https://www.w3school.com.cn/js/js_ajax_intro.asp Json介绍 Json快速入门 <!DOCTYPE html> <html lang"en"> <head><meta c…

从编译器角度理解C++编译和连接原理

C编译链接整体介绍 链接主要工作 1 所有.o文件段的合并&#xff0c;符号表合并后&#xff0c;进行符号解析 链接时就是在符号表中找对应的符号是否只出现于.text或.data段一次&#xff0c;若一次都无&#xff0c;则符号未定义&#xff1b;若出现多次&#xff0c;符号重定义 符…

JavaSE补充 | apache-common包的使用,快速完成IO操作

目录 一&#xff1a;apache-common包的使用&#xff0c;快速完成IO操作 1. IOUtils类的使用 2. FileUtils类的使用 一&#xff1a;apache-common包的使用&#xff0c;快速完成IO操作 IO技术开发中&#xff0c;代码量很大&#xff0c;而且代码的重复率较高&#xff0c;为此Ap…

【MySQL】数据库约束和聚合函数的使用

目录 上篇在这里喔~ 1.数据库约束 1.NULL约束 2.UNIQUE唯一约束 3.DEFAULT默认值约束 4.PRIMARY KEY主键约束 5.FOREIGN KEY外键约束 2.表的设计 1.设计思路​编辑 2.固定套路​编辑 2.1一对一关系 2.2一对多关系 ​编辑 2.3多对多关系 ​编辑​编辑​编辑 3.插入…

《C++模板》(初阶)零基础讲解

本文主要介绍C的模板&#xff0c;包括函数模板和类模板 文章目录 为什么要有模板1、函数模板1.1 函数模板概念1.1 函数模板格式1.3 函数模板的原理1.4 函数模板的实例化1.5 模板参数的匹配原则 2、类模板2.1 类模板的定义格式2.2 类模板的实例化 为什么要有模板 就拿我们写的交…

从“捐赠openEuler”到“向openEuler捐赠”,openEuler生态走入高速发展期

【中国&#xff0c;上海&#xff0c;2023年4月21日】openEuler Developer Day 2023于4月20-21日在线上和线下同步举办。本次大会由开放原子开源基金会指导&#xff0c;中国软件行业协会、openEuler社区、边缘计算产业联盟共同主办&#xff0c;以“万涓汇流&#xff0c;奔涌向前…