MySql数据库相关小知识

场景:再次复习MySql数据库相关知识,记录下

创建数据库时,推荐用下列建表语句(这样就可以存储 emjoi 表情符号了):

CREATE DATABASE IF NOT EXISTS dbname default character set utf8mb4 collate utf8mb4_unicode_ci;

SQL中的having语句:

SQL 中的 HAVING 子句用于筛选分组 ( GROUP BY ) 后的各组数据,相当于 SELECT 语句中的 WHERE 语句:

SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value;

针对于列的修改语句:

ALTER TABLE table_name ADD column_name datatype
ALTER TABLE table_name DROP COLUMN column_name

数据库视图的使用(视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。):

CREATE VIEW <视图名> AS <SELECT语句>;

SELECT *  FROM  视图名;

查看所创建的视图:

show table status where comment=‘view’;

删除指定的视图:

DROP VIEW <视图名1> [ , <视图名2> …]

Find_IN_SET函数的使用(之前在项目中引用过,所以特意去看这个函数):

Find_IN_SET:如果字符串str在由N个子字符串组成的字符串列表strlist中,则返回1到N范围内的值。字符串列表是由,个字符分隔的子字符串组成的字符串。如果第一个参数是常量字符串,第二个参数是SET类型的列,则FIND_IN_SET()函数将优化为使用位算术。如果str不在strlist中或strlist是空字符串,则返回0。如果任一参数为NULL,则返回NULL。如果第一个参数包含逗号(,)字符,则此函数无法正常工作。

-------------------------------------------------------------------------------------------------------------------------

有的朋友看完定义会有这样的疑问:[sql的like'%模糊查询%'不也是查询属性里含有的数据吗?]

是的,在某一方便他俩确实很相似,但就定义说的说的->Find_IN_SET函数查询数据时是以,进行数据分割,从而精确的进行了数据查询。下面我举例给大家示范:

1.(select * from tb_user;)

 

2.(SELECT * FROM tb_user WHERE roles LIKE '%8%';)

3.(select * from tb_user where FIND_IN_SET(8, roles);)

 模糊查询是把数据中含有这个'8'的数据全部查询出来,而FIND_IN_SET函数是按','(逗号)进行分割,精确的查询数据含有'8'的数据,部分角色权限、商品属性类型字段等,可能会应用到,这个时候我们还是用FIND_IN_SET,而不是模糊查询。

Lpad函数和Rpad函数:

​lpad(str1,length,str2)​​。其中str1是第一个字符串,length是结果字符串的长度,str2是一个填充字符串。如果str1的长度没有length那么长,则使用str2在左侧填充;如果str1的长度大于length,则截断。

Rpad(str1,length,str2)​​。其中str1是第一个字符串,length是结果字符串的长度,str2是一个填充字符串。如果str1的长度没有length那么长,则使用str2在右侧侧填充;如果str1的长度大于length,则截断。

示例:

首先表中的全部数据:

使用lpad查询:

 如果查询的字段不满足位数,则在左侧起按我们给的数值补齐5位;

再看rpad:

 

  如果查询的字段不满足位数,则在右侧起按我们给的数值补齐5位;

我们将id都修改为5位然后去查询:

看到从左边起截取两位,rpad同理;

当然另一个小用途是之前在项目用到的,当我们从A表向B表 迁移数据的时候,b表的id要求是PC拼接的32位,这个函数就很好的满足了条件。

REPLACE INTO:REPLACE INTO没有实际应用,浅浅记录:

REPLACE INTO用于实时覆盖写入数据。写入数据时,会先根据主键判断待写入的数据是否已经存在于表中,并根据判断结果选择不同的方式写入数据:

  • 如果待写入数据已经存在,则先删除该行数据,然后插入新的数据。
  • 如果待写入数据不存在,则直接插入新数据。

写法和insert语句一样(REPLACE INTO tb_user value (10000,'庞胖','10,20,30');):

 

要继续打工,就记录到此吧😂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庞胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值