MySQL基础——函数和约束

news2024/11/25 0:54:35

目录

1函数

1.1字符串函数

1.2数值函数

1.3日期函数

1.4流程函数

2约束

2.1约束概述和演示

2.2外键约束(表连接键)

1函数

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

1.1字符串函数

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

语法:select 函数(参数);

练习:

#concat连接字符

select concat('hell','o');



#lower 将字符串全部转为小写

select lower('HEllo');



upper 将字符串全部转为大写

select upper('HEllo');



#lpad左填充到5个字符

select lpad('he',5,'-');



#rpad右填充

select rpad('he',5,'-');



#trim 去掉头尾的空格,中间不管

select trim(' he llo ');



#substring(str,start,len) 返回从字符串str从start位置起的len个长度的字符串

select substring('helloworld',1,5)

案例:由于业务需求变更,企业员工的工号,统一5位数,目前不足5位数的全部在前面补0。比如:1号员工的工号应该为00001.

update emp set workno=lpad(workno,5,'0');

select * from emp

1.2数值函数

常见的数值函数如下:

语法:select 函数(参数);

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

我的代码:不严谨
select round(rand()*1000000,0);

正确代码:还要补0

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

1.3日期函数

常见的日期函数如下:

练习:

#当前日期

select curdate();

#当前时间

select curtime();

#当前日期和时间

select now();

#获取指定date的年份

select year(now());

#返回一个日期/时间值加上一个时间间隔expr后的时间值,这里是加上70年后

select now() ,date_add(now(),interval 70 year);

#时间差:返回起始时间date1和结束时间date2之间的天数

select datediff('2024-6-23','2024-6-14');

案例:查询所有员工的入职天数,并根据入职天数倒序排序。

分析:入职天数=当前日期-入职日期,时间差用datediff函数,当前日期用curdate函数。

代码:

select name, datediff(curdate(),endate) entrydate 

from emp

order by entrydate desc;

1.4流程函数

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

案例:查询emp表的员工姓名和工作地址(北京/上海---->一线城市,其他---->二线城市)

代码1:case when

select name,workaddress,

       case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end address

from emp;

代码2:case when 这种写法可以用于不等式

select name,workaddress,

       case when workaddress='北京' then '一线城市' when workaddress='上海' then '一线城市' else '二线城市' end address

from emp;

代码3:if

select name,workaddress,

       if(workaddress in ('北京','上海'),'一线城市','二线城市') address

from emp;

结果都是一样的:

2约束

2.1约束概述和演示

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

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

分类:

案例:根据需求,完成表结构的创建。需求如下:

对应创建SQL代码:

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 '性别'

)comment '用户表'

如果插入的数据中,age超过范围,check就会报错:

因为name varchar(10) not null unique comment '姓名',如果name为null也会报错。

如果是通过图形化界面添加表,可以直接进行勾选:

2.2外键约束(表连接键)

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

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

添加外键:

alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id);

现在就不能直接删除某个表中的记录了。这就保证了数据的一致性和完整性。

删除外键:

alter table emp drop foreign key fk_emp_dept_id;

删除:表或表键用drop,数据字段用delete

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

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

相关文章

【C语言习题】31.冒泡排序

文章目录 作业标题作业内容2.解题思路3.具体代码 作业标题 冒泡排序 作业内容 实现一个对整形数组的冒泡排序 2.解题思路 先了解一下冒泡排序&#xff1a; 两两相邻的元素进行比较&#xff0c;如果前面元素大于后面元素就交换两个元素的位置&#xff0c;最终的结果是最大的…

三星S20以上手机中的动态相片及其分解

三星S20以后的相机&#xff0c;相机拍出来的图片&#xff0c;用三星手机自带的“相册”打开之后&#xff0c;还会有“查看动态照片”的选项&#xff0c;点击之后就能查看拍照片时前后2秒左右的视频&#xff01; 不知道这个功能是不是三星独有的。 这样得到的图片非常大。因为…

一个简单的信号发射电路的构建

在基本的信号发射电路中&#xff0c;线圈&#xff08;电感器&#xff09;和电阻的组合可以产生振荡信号&#xff0c;而天线&#xff08;通常通过线圈&#xff09;用于发射信号。 LC振荡电路&#xff1a; **线圈&#xff08;L1&#xff09;和电容器&#xff08;C&#xff09;**串…

MySQL 基本语法讲解及示例(上)

第一节&#xff1a;MySQL的基本操作 1. 创建数据库 在 MySQL 中&#xff0c;创建数据库的步骤如下&#xff1a; 命令行操作 打开 MySQL 命令行客户端或连接到 MySQL 服务器。 输入以下命令创建一个数据库&#xff1a; CREATE DATABASE database_name;例如&#xff0c;创建一…

Locust框架

Locust 简介&#xff1a;是一个Python的第三方库&#xff0c;专门用来进行性能并发测试 Locust特点&#xff1a; 基于Python的开源负载测试工具支持多种操作系统支持二次开发能够模拟更多用户基于协程&#xff08;微线程&#xff09;的并发 Jmeter与Locust对比 Locust安装 …

街道网格宣传稿件投稿我知道了好方法

作为街道信息宣传员,我的日常是将街道的每一项重要活动、每一份温暖故事编织成文字,传递给公众。这份工作既充满挑战又极具意义,但在最初,我却在这份看似简单的任务上屡屡受阻。那时,我的投稿方式单一且传统——依赖电子邮件,将稿件发送至各大媒体的投稿箱。我本以为,只要内容足…

Linux操作系统学习:day03

内容来自&#xff1a;Linux介绍 视频推荐&#xff1a;[Linux基础入门教程-linux命令-vim-gcc/g -动态库/静态库 -makefile-gdb调试]( 目录 day0317、创建删除目录创建目录删除目录 18、文件的拷贝19、mv 命令20、查看文件内容的相关命令21、给文件创建软连接或硬链接 day03 …

docker部署dm数据库

官方文档参考 官网地址&#xff1a;https://eco.dameng.com/document/dm/zh-cn/start/dm-install-docker.html 下载镜像地址 docker部署 1、加载镜像 docker load -i dm8_20240613_x86_rh6_64_rq_ent_8.1.3.140_pack5.tar使用docker images&#xff0c;查看镜像和镜像标签…

【RK3588/算能/Nvidia智能盒子】挑战「无电无网」部署AI算法,守护大亚湾荃美石化码头工地安全

“万顷碧波之上&#xff0c;一座千米钢栈桥如蛟龙出水&#xff0c;向大海蜿蜒。钢栈桥上的项目建设者正在加紧作业&#xff0c;为助推惠州大亚湾加快建设成为世界级绿色石化基地全力奋战。”这是不久前北京日报对大亚湾惠州港荃湾港区荃美石化码头工地的描述。 △ 图片来源于北…

【RK3588/算能/Nvidia智能盒子】AI“值守”,规范新能源汽车充电站停车、烟火及充电乱象

近年来&#xff0c;中国新能源汽车高速发展&#xff0c;产量连续8年位居全球第一。根据中国充电联盟数据&#xff0c;截至2023年6月&#xff0c;新能源汽车保有量1620万辆&#xff0c;全国充电基础设施累计数量为665.2万台&#xff0c;车桩比约2.5:1。 虽然新能源汽车与充电桩供…

java架构设计-COLA

参考&#xff1a;https://github.com/alibaba/COLA 架构 要素&#xff1a;组成架构的重要元素 结构&#xff1a;要素直接的关系 意义&#xff1a;定义良好的结构&#xff0c;治理应用复杂度&#xff0c;降低系统熵值&#xff0c;改善混乱状态 创建COLA应用&#xff1a; mvn …

代理商 SAAS 系统权限设计

代理商 SAAS 系统与垂直业务系统不一样&#xff0c;代理商可以不断发展下级&#xff0c;每一级有每一级的管理员。超级管理员可以开通下级代理机构&#xff0c;同时设置下级机构的管理员账号。每一级管理员可以管理本级机构对应的部门、岗位、员工&#xff0c;并进行授权管理。…

SSH 远程执行任务

SSH 是 Linux 下进行远程连接的基本工具&#xff0c;但是如果仅仅用它来登录那可是太浪费啦&#xff01;SSH 命令可是完成远程操作的神器啊&#xff0c;借助它我们可以把很多的远程操作自动化掉&#xff01;下面就对 SSH 的远程操作功能进行一个小小的总结。 远程执行命令 如…

拦截器 之 用户登录判断

spring boot 拦截器的实现需要有两步&#xff1a; 拦截器 自定义一个拦截器 package com.example.demo.common;import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; import org.s…

【React】极客园--01.项目前置准备

项目搭建 基于CRA创建项目 CRA是一个底层基于webpack快速创建React项目的脚手架工具 # 使用npx创建项目 npx create-react-app react-jike# 进入到项 cd react-jike# 启动项目 npm start调整项目目录结构 -src-apis 项目接口函数-assets 项目资源文件&…

Flume基础教程

Apache Flume教程 资料来源&#xff1a;Apache Flume - Introduction (tutorialspoint.com) Flume是一个标准的、简单的、健壮的、灵活的、可扩展的工具&#xff0c;用于将从各种数据生产者(web服务器)中所产生的数据抽取到Hadoop中。在本教程中&#xff0c;我们将使用简单的…

内部类介绍

内部类&#xff08;Inner Class&#xff09;是在另一个类的内部定义的类。它可以访问外部类的所有成员&#xff0c;包括私有成员。内部类有两种主要形式&#xff1a;局部内部类&#xff08;定义在方法内部&#xff09;和成员内部类&#xff08;定义在类的内部&#xff0c;但不在…

《Nest系列 - 2. Nest 代码生成器,让你告别base代码书写!!!》

紧接上文我们做一些核心梳理 核心梳理&#xff1a; /controllers目录&#xff1a;存放控制器文件&#xff0c;每个控制器对应一组路由和请求处理方法。控制器处理来自客户端的HTTP请求&#xff0c;并返回相应的响应。/modules目录&#xff1a;存放模块文件&#xff0c;每个模块…

第十一章:接口

接口 文章目录 接口一、简介1.1 接口是什么1.2 接口的作用1.3 接口的开发与调用1.4 接口的组成 二、RESTful API三、json-server四、接口测试工具五、接口的创建 一、简介 1.1 接口是什么 接口是前后端通信的桥梁 简单理解&#xff1a;一个接口就是 服务中的一个路由规则&am…

7.华为交换机端口配置链路聚合Eth-trunk

目的&#xff1a;两台华为交换机端口配置链路聚合 LSW1配置 [Huawei]interface Eth-Trunk 1 [Huawei-Eth-Trunk1]q [Huawei]int g0/0/1 [Huawei-GigabitEthernet0/0/1]eth-trunk 1 [Huawei-GigabitEthernet0/0/1]int g0/0/2 [Huawei-GigabitEthernet0/0/2]eth-trunk 1LSW2配置…