MySQL 学习笔记(基础篇 Day2)

「写在前面」

本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。推荐先按顺序阅读往期内容:
1. MySQL 学习笔记(基础篇 Day1)


目录

  • 3 函数
    • 3.1 字符串函数
    • 3.2 数值函数
    • 3.3 日期函数
    • 3.4 流程函数
  • 4 约束
    • 4.1 概述
    • 4.2 约束演示
    • 4.3 外键约束

3 函数

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

3.1 字符串函数

P27:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=27

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个长度的字符串

案例:

# A. concat : 字符串拼接
select concat('Hello' , ' MySQL'); # 'Hello MySQL'
# B. lower : 全部转小写
select lower('Hello'); # 'hello'
# C. upper : 全部转大写
select upper('Hello'); # 'HELLO'
# D. lpad : 左填充
select lpad('01', 5, '-'); # '---01'
# E. rpad : 右填充
select rpad('01', 5, '-'); # '01---'
# F. trim : 去除空格
select trim(' Hello MySQL '); # 'Hello MySQL'
# G. substring : 截取子字符串
select substring('Hello MySQL',1,5); # 'Hello'

3.2 数值函数

P28:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=28

常见的数值函数如下:

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

案例:

# A. ceil:向上取整
select ceil(1.1); # 2
# B. floor:向下取整
select floor(1.9); # 1
# C. mod:取模
select mod(7,4); # 3
# D. rand:获取随机数
select rand();
# E. round:四舍五入
select round(2.344,2); # 2.34

3.3 日期函数

P29:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=29

常见的日期函数如下:

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

案例:

# A. curdate:当前日期
select curdate(); # 2021-10-11
# B. curtime:当前时间
select curtime(); # 23:48:23
# C. now:当前日期和时间
select now(); # 2021-10-11 23:48:23
# D. YEAR , MONTH , DAY:当前年、月、日
select YEAR(now()); # 2021
select MONTH(now()); # 10
select DAY(now()); # 11
# E. date_add:增加指定的时间间隔
select date_add(now(), INTERVAL 70 YEAR ); # 2091-10-11 23:48:23
# F. datediff:获取两个日期相差的天数
select datediff('2021-10-01', '2021-12-01'); # -61

3.4 流程函数

P30:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=30

常见的流程函数如下:

函数功能
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默认值
CASE [ expr ] WHEN [ val1 ] THEN [res1] ... ELSE [ default ] END如果expr的值等于val1,返回 res1,... 否则返回default默认值

案例:

# A. if
select if(false, 'Ok', 'Error'); # 'Error'

# B. ifnull
select ifnull('Ok','Default'); # 'Ok'
select ifnull('','Default'); # ''
select ifnull(null,'Default'); # 'Default'

# C. case when then else end
# 需求: 查询emp表的员工姓名和工作地址 (北京/上海 ----> 一线城市 , 其他 ----> 二线城市)
select
name,
( case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end ) as '工作地址'
from emp;
函数小节

P31:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=31

4 约束

4.1 概述

P32:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=32

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

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

分类:

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

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

4.2 约束演示

P33:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=33

alt
CREATE TABLE tb_user(
id int AUTO_INCREMENT PRIMARY KEY 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 '性别'
);

通过图形化界面来创建表结构时,只需要根据我们的需要选择对应的约束即可:

alt

4.3 外键约束

P34:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=34

4.3.1 介绍

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

alt
4.3.2 语法

1. 添加外键

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

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

案例:

为emp表的dept_id字段添加外键约束,关联dept表的主键id。

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

添加了外键约束之后,我们再到dept表(父表)删除id为1的记录,然后看一下会发生什么现象。 此时将会报错,不能删除或更新父表记录,因为存在外键约束。

2. 删除外键

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

案例:

删除emp表的外键fk_emp_dept_id

alter table emp drop foreign key fk_emp_dept_id;
4.3.3 删除/更新行为

P35:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=35

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

行为说明
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;
约束小节

P36:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=36


「结束」
alt

本文由 mdnice 多平台发布

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文本溢出隐藏 显示省略号,鼠标悬浮展示 el-tooltip(TooltipIsShowMixin封装)

目录 mixins 封装使用 TooltipIsShowMixin效果展示 mixins 封装 TooltipIsShowMixin.js export const TooltipIsShowMixin {data() {return {tooltipIsShow: false}},methods: {tooltipIsDisHandler(className) {this.$nextTick(() > {const dom document.querySelector…

原生IP是什么?如何获取海外原生IP?

一、什么是原生IP 原生IP地址是互联网服务提供商&#xff08;ISP&#xff09;直接分配给用户的真实IP地址&#xff0c;无需代理或转发。这类IP的注册国家与IP所在服务器的注册地相符。这种IP地址直接与用户的设备或网络关联&#xff0c;不会被任何中间服务器或代理转发或隐藏。…

allure怎么生成测试报告简单方法

方法一&#xff1a;import pytest pytest.main([‘-s’,‘./执行文件名.py’,‘–alluredir’,‘./result’]) 方法二&#xff1a;os.system(‘allure generate result -o report --clean’) 1、点击index.html&#xff0c;右上角选择浏览器打开 2、查看界面化测试报告

Linux/Validation

Enumeration nmap 第一次扫描发现系统对外开放了22&#xff0c;80&#xff0c;4566和8080端口&#xff0c;端口详细信息如下 系统对外开放了4个端口&#xff0c;从nmap的结果来看&#xff0c;8080无法访问&#xff0c;手动尝试后4566也无法访问&#xff0c;只能从80端口开始 …

Redis分段锁,如何设计?

问题场景&#xff1a;热点库存扣减问题 秒杀场景&#xff0c;有一个难度的问题&#xff1a;热点库存扣减问题。 既要保证不发生超卖 又要保证高并发 如果解决这个高难度的问题呢&#xff1f; 答案就是使用redis 分段锁。 什么是分布式锁&#xff1f; 一个分布式系统中&am…

常见四种限流算法详解(附:javaDemo)

限流简介 现代互联网很多业务场景&#xff0c;比如秒杀、下单、查询商品详情&#xff0c;最大特点就是高并发&#xff0c;而往往我们的系统不能承受这么大的流量&#xff0c;继而产生了很多的应对措施&#xff1a;CDN、消息队列、多级缓存、异地多活。 但是无论如何优化&…

Selenium自动化测试-3.元素定位(1)

这次我们要分享的是对元素的定位&#xff0c;在一个页面中有很多不同的策略来定位一个元素&#xff0c;我们选择最合适的方法即可。 一个页面最基本组成单元是元素&#xff0c;想要定位一个元素&#xff0c;我们需要特定的信息来说明这个元素的唯一特征。 selenium 主要提供了…

2024 年 AI 辅助研发趋势

随着人工智能技术的持续发展与突破&#xff0c;2024年AI辅助研发正成为科技界和工业界瞩目的焦点。从医药研发到汽车设计&#xff0c;从软件开发到材料科学&#xff0c;AI正逐渐渗透到研发的各个环节&#xff0c;变革着传统的研发模式。在这一背景下&#xff0c;AI辅助研发不仅…

浅析assert宏

浅析assert宏 文章目录 浅析assert宏前言1. 简单的断言案例2. 断言与正常错误处理3. 断言的应用场景总结 前言 首先声明一点&#xff0c;断言&#xff08;assert&#xff09;是宏&#xff0c;而非函数。 ​ assert 宏的原型定义在 <assert.h>&#xff08;C&#xff09;、…

DIN11 OC系列导轨式光电隔离变送器模拟信号转换0-75mV0-50mV0-100mV转4-20mA0-5V0-10V

概述&#xff1a; 导轨安装DIN11 IPO OC系列模拟信号隔离放大器是一种将输入信号隔离放大、转换成按比例输出的直流信号混合集成厚模电路。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等需要直流信号隔离测控的行业。此系列产品内部采用了线性光电隔离技术相…

C++ 哈希表OJ

目录 1、1. 两数之和 2、面试题 01.02. 判定是否互为字符重排 3、217. 存在重复元素 4、 219. 存在重复元素 II 5、49. 字母异位词分组 频繁查找某一个数的时候可以使用哈希表&#xff0c;哈希表可以使用容器&#xff0c;也可以使用数组模拟&#xff0c;当元素是字符串中的字…

类和对象周边知识

再谈构造函数 前几期我们把六个默认成员函数一一说明后&#xff0c;构造函数还有一些周边知识。 初始化列表 我们在没有了解初始化列表的时候一般都是使用构造函数初始化或者在声明哪里给予缺省值&#xff0c;那么为什么好药存在初始化列表呢&#xff1f;是因为①.有些值必须…