#Mysql的like语句最全介绍#
MySQL的`LIKE`语句是用于在`WHERE`子句中搜索列中的指定模式的。它经常与通配符一起使用,以匹配多个可能的值。以下是`LIKE`语句的详细解析:
### 1. 基本语法:
```sql
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
2024年10月30日
#Mysql的like语句最全介绍#
MySQL的`LIKE`语句是用于在`WHERE`子句中搜索列中的指定模式的。它经常与通配符一起使用,以匹配多个可能的值。以下是`LIKE`语句的详细解析:
### 1. 基本语法:
```sql
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
2024年10月30日
用过sql的同学基本都会过like,但是大家对like了解多少,很多同学可能认知在like条件,如果第一个字符为通配符,sql语句就不会走索引,如果不为通配符,sql语句就会走索引,真相真的是这样的吗,我用实际测试案例来说明。
在mysql5.7数据库上我用sysbench做了一张5000w记录的表来模拟测试,表结构如下
Create Table: CREATE TABLE `sbtest1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`k` int(10) unsigned NOT NULL DEFAULT '0',
`c` char(120) COLLATE utf8_bin NOT NULL DEFAULT '',
`pad` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k_1` (`k`),
KEY `idx_pad` (`pad`)
) ENGINE=InnoDB AUTO_INCREMENT=50000001 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
2024年10月30日
相信你还在为SSM框架繁琐的搭建过程而苦恼,还在为复杂的配置文件而忧心,现在SpringBoot终于来了,它化繁为简,让开发变得极其简单而快速,短短几年时间已经成为了开发的主流框架。作为一个与时俱进的程序员,当然要把握时代的潮流,因此将从这篇文章开始,由基础到进阶,开始对springboot进行一个全面的分析。
一、什么是Springboot
其实Springboot是Spring家族中的一个全新的框架,它是用来简单应用程序的创建和开发过程,化繁为简,简化SSM框架的配置。比如说在使用SSM框架开发的时候,我们需要配置web.xml,配置spring,配置mybatis,并将它们整合到一起,而是用Springboot就不同了,它采用了大量的默认配置来简化这些文件的配置过程。我们在百度指数看看这几年springboot和SSM框架的搜索指数:
2024年10月30日
前言:MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似 json 的 bjson 格式,因此可以存储比较复杂的数据类型。其语法对面向对象语言比较友好,及其适用于java编程。
适用场景:
1,大量且无强关系型数据。--比如日志,缓存等
2024年10月30日
补 充 show tables 同 show collections 修改集合名称 db.collectionName.renameCollection('newName') 查找操作 select ... from tablename where ... 指定集合方法 1. db.collectionName. e.g. db.student.find() 2. db.getCollection(collectionName). e.g. db.getCollection('student').find() find(query,{field:0/1}) 功能:查找集合中所有复合要求的文档 参数:query 表示查找条件 相当于 mysql中的where语句 {field:0/1} 展示的域,其中0表示不展示该域 1表示展示该域 返回值:返回查找到的结果 注意:当find()函数不加任何参数,或者只加{}表示查找所有内容 db.collectionName.find() 等价于 select * from tableName findOne(query,{field:0/1}) 功能:查找复合条件的一条文档 参数:同find e.g. db.class2.findOne() 查找所有文档中的第一条符合条件的 选择field进行展示 设置field值,1表示查询结果显示该field,0表示不显示 当写了其中某一个field的值,如果该值为1,那么默认其他field值为0,如果该值设置为0,那么其他的默认为1 db.class3.find({},{_id:0,name:0,sex:0}) * 同时设置多个字段的时候,如果一个设置为0,因为其他的默认为1,再设置其他字段的时候只设置想为0的项即可 * 反之亦然,如果一个设置为1,因为其他的默认为0,再设置其他字段的时候只设置想为1的项即可 _id值比较特殊,如果不显式给出则它的默认值始终为1 如果不加该参数,则默认所有field都显示 query 查找第一个 name 为 zhang的同学 db.class2.findOne({name:'zhang'},{_id:0}) 10:40 比较操作符 $eq 等于 db.class2.find({age:{$eq:12}},{_id:0}) * 等价于 db.class2.find({age:12},{_id:0}) $lt 小于 e.g. db.class2.find({age:{$lt:15}},{_id:0}) * 也可以比较字符串,按照逐位的ascii码值进行比较 $lte 小于等于 e.g. db.class2.find({age:{$lte:12}},{_id:0}) $gt 大于 db.class2.find({age:{$gt:12}},{_id:0}) $gte 大于等于 db.class2.find({age:{$gte:12}},{_id:0}) $ne 不等于 db.class2.find({name:{$ne:'zhang'}},{_id:0}) $in 是否包含 db.class2.find({age:{$in:[10,11,12,13]}},{_id:0}) *只要值在数据范围内的都显示出来 $nin 是否不包含 db.class2.find({age:{$nin:[10,11,12]}},{_id:0}) 逻辑条件组合 $and 逻辑与 db.class2.find({$and:[{name:'zhang'},{sex:'m'}]},{_id:0}) *等价于 db.class2.find({name:'zhang',sex:'m'},{_id:0}) $or 逻辑或 e.g. db.class2.find({$or:[{name:'zhang'},{sex:'m'}]},{_id:0}) $not 逻辑非 db.class2.find({name:{$not:{$eq:'zhang'}}},{_id:0}) $nor 既不也不 db.class2.find({$nor:[{name:'zhang'},{age:11}]},{_id:0}) *查找不满足列表中任意一个条件的文档 条件混合查找 name != 'zhang' and (age == 12 or age == 13) db.class2.find({name:{$ne:'zhang'},$or:[{age:12},{age:13}]}) age > 13 or (name = 'zhang' and sex = 'm') db.class2.find({$or:[{age:{$gt:13}},{name:'zhang',sex:'m'}]},{_id:0}) 数组查找(hobby是一个数组) 查找集合中hobby数组里包含‘song’的文档: db.student.find({hobby:'song'}) 查找集合中hobby数组里同时包含‘song’和‘run’的文档: db.student.find({hobby:{$all:['song','run']}},{_id:0}) 查找一个数组中是否包含一个区间 db.student.find({score:{$elemMatch:{$gt:70,$lte:90}}},{_id:0}) 看score数据中是否有(70,90] 的元素 查找一个数组中包含值得个数 db.student.find({hobby:{$size:2}},{_id:0}) 查找hobby数组中包含2个元素的文档 对数据进行筛选 显示score数组中的前三项 db.student.find({},{_id:0,score:{$slice:3}}) 显示score数组中的跳过前两项的后面三项 db.student.find({},{_id:0,score:{$slice:[2,3]}}) 其他查找条件 查找某个字段存在的记录 查找存在score字段的记录 db.student.find({score:{$exists:true}}) 查找不存在score字段的记录 db.student.find({score:{$exists:false}}) 查找某个域的值 匹配给定除数和余数的记录 查找age 被2除余数是1的记录 db.student.find({age:{$mod:[2,1]}},{_id:0}) 查找某个域指定数据类型的记录 db.student.find({score:{$type:4}},{_id:0}) *在mongo中每种数据类型都匹配了一个整数值 和查找相关的一些函数 查看一个集合中某个域的值都包含哪些(类似于关系型数据库中取出某一列的值) db.collectionName.distinct('col') e.g. 列出student集合中所有name域的取值内容,如果name是一个列表则将所有name列表中的元素进行整合 db.student.distinct('name') pretty() 将find结果格式化显示 db.class3.find().pretty() limit(num) 显示find结果的前num条记录 db.class2.find().limit(2) skip(num) 跳过前num条记录进行显示 db.class2.find().skip(2) count() 统计匹配到的记录的条数 db.class2.find().count() sort({}) 按照指定字段进行排序 {age : 1} 按照age进行升序排列 {age : -1} 按照age进行降序排列 当有多个排序项时为复合排序 db.class2.find({},{_id:0}).sort({age:-1}) db.class2.find({},{_id:0}).sort({age:-1,name:1}) 删除文档 db.collectionNmae.remove(query,justOne) 功能:删除记录 参数: query : 定位要删除的记录 类似mysql中where 详见 查找部分 justOne:如果不加此参数则删除所有符合query (bool) 条件的记录 如果赋值为true或者1 表示只删除第一条符合query的记录 e.g. 删除所有name为‘zhang’的文档 db.class2.remove({name:'zhang'}) 删除第一条age为11的文档 db.class2.remove({age:11},1) 删除全部文档 db.class2.remove({}) 练习: 1. 创建一个数据库 名字为 grade 2. 数据库中创建集合集合名称为 class 3. 向集合中插入若干文档文档结构如下 {name:‘小红’,age:10,sex:‘w’,hobby:['a','b']} 注意并不一定所有同学都有这些域,爱好个数也不相同 4.查找练习: 查看该班所有学生 查看该班所有年级为4岁的学生 查看该班所有年龄大于4岁的学生 find({age:{$gt:4}}) 查看该班所有年龄4--7岁之间的学生 find({age:{$gte:4,$lte:7}}) 查看所有年龄大于4岁并sex是‘m’的学生 find({age:{$gt:4},sex:'m'}) 查看所有年龄小于4岁或者大于7岁的学生 find({$or:[{age:{$lt:4}},{age:{$gt:7}}]}) 查看所有年龄是4岁或者6岁的学生 find({age:{$in:[4,6]}}) 查找所有兴趣爱好有两项的学生 find({hobby:{$size:2}}) 查找兴趣爱好有画画的学生 find({hobby:'画画'}) 查找兴趣爱好既有画画又有跳舞的学生 find({hobby:{$all:['画画',‘跳舞’]}}) 统计兴趣爱好有三项的学生的人数 find({hobby:{$size:3}}).count() 查找本班第二位学生 find().skip(1).limit(1) 将本班学生按年龄升学排列,年龄一样的按姓名升序 统计本班同学兴趣爱好都覆盖哪些范围 db.collectionName.distinct('hobby') 删除所有年龄不到4岁和大于9岁的同学 remove({$or:[{age:{$lt:4}},{age:{$gt:9}}]}) 更新文档 update tablename set .... where .... db.collectionName.update(query,update,upsert,multi) 功能:更新集合中的文档 参数:query 确定要更新的文档 相当于where 用法见查找 update 将文档更新为什么 相当于set... upsert boolean 如果为true 则定位的文档不存在就插入一条新的文档,false相反,默认为false multi boolean 如果为true 则更新所有query定位到的文档,false则更新第一条,默认为false e.g. $set 是一个修改器 将姓名为wangwu的文档age改为20,如果不存在age域则自动添加 db.class3.update({name:'wangwu'},{$set:{age:20}}) 修改所有name为huairen的age为25 db.class3.update({name:'huairen'},{$set:{age:25}},false,true) 如果name为haoren的文档存在则修改其age为27,如果不存在则插入{name:'haoren',age:27} db.class3.update({name:'haoren'},{$set:{age:27}},true,false) 作业: 1.梳理mongo的增删改查操作 2.对常用语句进行练习
2024年10月30日
声明:本文乃“运维家”原创,转载请注明出处,更多内容请关注公众号“运维家”。
主旨
本文主要介绍下mongodb的一些日常使用的简单命令。
2024年10月30日
刚刚看到基于 spring-data-mongodb 的增强工具包mongoHelper 发布了更新,这个工具包简化 CRUD 操作,并且提供了类 jpa 的数据库操作。
都知道在传统关系型数据库及围绕它们构建的 orm 在项目开发中有很多难用的痛点,然而随着 mongodb 这种文档性数据库的出现,完美的解决了 sql 数据库在项目开发中的诸多痛点,在 mongodb4.0 以后支持了事务,已经可以完美的用于工程项目。spring-data-mongodb 已经对 mongodb 的操作做了一部分封装,但依然不够用,Query 与 Criteria 的操作依然有比较大的局限性,而且对于习惯 sql 操作和 sql orm 的人来说,其使用法则依然稍显别扭。mongoHelper 对 spring-data-mongodb 又进行了进一步封装,补充了 mysql 有但 mongodb 没有的特性,比如字段默认值,使其更易于使用,更接近与关系型数据库 orm 库,并添加了很多易于项目管理的功能。
2024年10月30日
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
2024年10月30日
前段时间分享了关于Spring Boot中使用Redis的文章,除了Redis之后,我们在互联网产品中还经常会用到另外一款著名的NoSQL数据库MongoDB。
下面就来简单介绍一下MongoDB,并且通过一个例子来介绍Spring Boot中对MongoDB访问的配置和使用。
MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。