场景:再次复习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');):
要继续打工,就记录到此吧😂