四时宝库

程序员的知识宝库

#Mysql的like语句最全介绍# MySQL的...

#Mysql的like语句最全介绍#

MySQL的`LIKE`语句是用于在`WHERE`子句中搜索列中的指定模式的。它经常与通配符一起使用,以匹配多个可能的值。以下是`LIKE`语句的详细解析:

### 1. 基本语法:


```sql

SELECT column1, column2, ...

FROM table_name

WHERE column_name LIKE pattern;

你真的了解mysql数据库对like语句处理过程吗

用过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 

SpringBoot系列基础入门与MongoDB实现增删改查

相信你还在为SSM框架繁琐的搭建过程而苦恼,还在为复杂的配置文件而忧心,现在SpringBoot终于来了,它化繁为简,让开发变得极其简单而快速,短短几年时间已经成为了开发的主流框架。作为一个与时俱进的程序员,当然要把握时代的潮流,因此将从这篇文章开始,由基础到进阶,开始对springboot进行一个全面的分析。

一、什么是Springboot

其实Springboot是Spring家族中的一个全新的框架,它是用来简单应用程序的创建和开发过程,化繁为简,简化SSM框架的配置。比如说在使用SSM框架开发的时候,我们需要配置web.xml,配置spring,配置mybatis,并将它们整合到一起,而是用Springboot就不同了,它采用了大量的默认配置来简化这些文件的配置过程。我们在百度指数看看这几年springboot和SSM框架的搜索指数:

springboot中整合mongodb(springboot+mongodb)

前言:MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似 json 的 bjson 格式,因此可以存储比较复杂的数据类型。其语法对面向对象语言比较友好,及其适用于java编程。


适用场景:

1,大量且无强关系型数据。--比如日志,缓存等

Mongodb入门 day02(mongodb简单使用)

补
充

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.对常用语句进行练习

mongodb数据库的基本操作(mongodb数据库基本操作出现问题)

声明:本文乃“运维家”原创,转载请注明出处,更多内容请关注公众号“运维家”。


主旨

本文主要介绍下mongodb的一些日常使用的简单命令。

mongoHelper 0.2.5 发布,spring-data-mongodb 增强工具包

前言

刚刚看到基于 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 库,并添加了很多易于项目管理的功能。

怎样判断面试者是否有扎实的前端基础?(二)

工程能力考察:

  1. 项目能力

mongodb是干什么的,三分钟入门(mongodb mongos)

一、MongoDB是什么

1、维基百科

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

Spring Boot中使用MongoDB数据库(springboot+mongodb)

前段时间分享了关于Spring Boot中使用Redis的文章,除了Redis之后,我们在互联网产品中还经常会用到另外一款著名的NoSQL数据库MongoDB。

下面就来简单介绍一下MongoDB,并且通过一个例子来介绍Spring Boot中对MongoDB访问的配置和使用。

MongoDB简介

MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有丰富的功能)之间架起一座桥梁,它集两者的优势于一身。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接