数据库order by 无序
问题数据分页时需要根据数据记录sort字段倒序,即使用order by sort desc limit ?,?,但是我们会发现,前端进行请求时获取的数据并不正确,分页中出现了一定的重复数据。
原理如果没有指定ORDER BY语句,则 MySQL (或任何RDBMS)不保证以特定顺序返回结果。 有些人认为,如果没有指定order by子句,行总是以聚簇索引顺序或物理磁盘顺序返回。 然而,这是不正确的,因为在查询处理期间可以改变行顺序的许多因素,例如并行的HASH连接是更改行顺序的操作符的一个很好的例子。如果指定ORDER BY语句,MySQL将对行进行排序,并按请求的顺序返回。 但是,如果该顺序不是确定性的,即可能有重复的值,则在每个具有相同值的组中,由于与上述相同的原因,该顺序是“随机的”。
vue-seamless-scroll在vue3.0引入
背景:vue-seamless-scroll 是目前vue无限滚动插件中相对比较好用的一个。刚好项目需要做个列表无限滚动。
官方参考文档:https://chenxuan0000.github.io/vue-seamless-scroll/zh/guide/
在官方文档中,未涉及到对createApp的引用。为此展示代码给予参考
12345678910111213141516171819202122232425262728<vue-seamless-scroll :data="listData" :class-option="classOption" class="seamless-warp"> <ul id="ul1" class="item" > <li v-for="item in listData" v-bind:key="item.i ...
数据库优化之加索引语句不加锁
线上无锁添加索引:加索引的语句不加锁ALGORITHM=INPLACE, LOCK=NONE
1ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;
ALGORITHM=INPLACE更优秀的解决方案,在当前表加索引,步骤:1.创建索引(二级索引)数据字典2.加共享表锁,禁止DML,允许查询3.读取聚簇索引,构造新的索引项,排序并插入新索引4.等待打开当前表的所有只读事务提交5.创建索引结束
ALGORITHM=COPY通过临时表创建索引,需要多一倍存储,还有更多的IO,步骤:1.新建带索引(主键索引)的临时表2.锁原表,禁止DML,允许查询3.将原表数据拷贝到临时表4.禁止读写,进行rename,升级字典锁5.完成创建索引操作
12345LOCK=DEFAULT:默认方式,MySQL自行判断使用哪种LOCK模式,尽量不锁表LOCK=NONE:无锁:允许Online DDL期间进行并发读写操作。如果Online DDL操作不支持对表的继续写入,则DDL操作失败,对表修改无效 ...
Linux下安装Beego:go install: cannot install cross-compiled binaries when GOBIN is set
Linux下安装Beego出错问题:go install: cannot install cross-compiled binaries when GOBIN is set遇到这个问题一般是在环境变量中设置了 GOBIN 可以打开 /etc/profile 把这个变量注释掉就,执行 source /etc/profile生效即可同样安装完成之后需要在环境变量中追加bee的路径
解决思路
注释GOBIN选项,并在 /etc/profile 文件中设置GOPATH/bin(永久)
1export PATH=$GOPATH/bin:$PATH
重新生成配置
1source /etc/profile
可能遇到的问题:添加之后执行bee不成功。查看bee的所在路径 :
12echo $GOPATH //获取GOPATH的路径 本人是在/data/www/go:find /home/chun/go -name "bee" //查找目录的 ...
axios的post请求后台(ThinkPHP5)接收不到数据
最近做vue项目,做分页的功能,使用post给后台发送数据,使用接口还是工具(postman)都可获取数据,唯独axios获取不到;经过排除,发现这与axios的post传参格式有关系;
123456789 this.$axios({ method: 'post', url:url, params: { seller_id:seller_id }}).then((res)=>{ })
在使用axios时,要注意到配置选项中包含params和data两者,以为他们是相同的,实则不然。因为params是添加到url的请求字符串中的,用于get请求。而data(form-data)是添加到请求体(body)中的, 用于post请求。
解决方法方法1:配置如下:在main.js里 设置配置,修改Content-Type
123import axios from 'axios';axios.defaults.headers.post['Cont ...
Go 学习之路:异常处理defer,panic,recover
Go没有像Java那样的异常机制,它不能抛出异常。因为设计者们认为,将异常与控制结构混在一起容易使得代码变得混乱。于是乎引入Exception处理: defer,panic,recover;
简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。
例子代码:
1234567891011121314151617181920package mainimport "fmt"func demo(){ fmt.Println("Welcome, my name is fudomine") panic(400) fmt.Println("Hello")}func main(){ defer func(){ fmt.Println("defer start") errorMsg := recover() fmt.Println("Error msg :", errorMsg) fmt.P ...
Go 学习之路:引用类型与值类型
Golang中只有三种引用类型:slice(切片)、map(字典)、channel(管道);引用类型
引用类型理解为(C语言):指针
值类型
值的拷贝
下面以值类型和slice(切片)例子可知:
1234567891011package mainimport "fmt"func main(){ a := [5]int{2, 3, 4, 5, 6} b := a fmt.Println(a,b) b[2] = 77 fmt.Println(a,b)}
上面定义了一个数组a,它是值类型,复制给b是copy,当b发生变化后a并不会发生任何变化,结果如下:
1234567891011package mainimport "fmt"func main(){ a := []int{2, 3, 4, 5, 6} b := a fmt.Println(a,b) b[2] = 77 fmt.Println(a,b)}
上面 ...
Go 学习之路:Println 与 Printf 的区别
Println 和Printf 都是fmt包中公共方法;在需要打印信息时常用的函数,那么二函数有什么区别呢?附上代码123456789101112131415161718192021222324package mainimport ( "time" "fmt")const ( Man = 1 Female = 2)func main(){ timer := time.Now().Unix() if(timer % Female == 0){ fmt.Println("%d is Female", timer) fmt.Printf("%d is Female", timer) }else{ fmt.Println("%d is Man", timer) fmt.Printf("%d is Man", timer) }}
运行结果12%d is Man ...
Go 学习之路:new和make的区别
Go语言中new跟make是内置函数,主要用来创建分配类型内存。
new( )new(T)创建一个没有任何数据的类型为T的实例,并返回该实例的指针;
源码解析123func newfunc new(Type) *TypeThe new built-in function allocates memory. The first argument is a type, not a value, and the value returned is a pointer to a newly allocated zero value of that type.
make( )make(T, args)只能创建 slice、map和channel,并且返回一个有初始值args(非零)的T类型的实例,非指针。
源码解析12345678910111213141516func makefunc make(Type, size IntegerType) TypeThe make built-in function allocates and initializes an object of type ...
Laravel 自带时间处理函数
Carbon 是继承自 PHP DateTime 类 的子类,但比后者提供了更加丰富、更加语义化的 API。其中一个比较实用的 API 就是 diffForHumans 方法,几乎每个用 Laravel 构建的项目中都有用到它。
比如,一个博客系统里的文章发布时间,显示格式可能就像下面这样:
12345**距离现在时间** **显示格式** < 1小时 xx分钟前 1小时 - 24小时 xx小时前 1天 - 15天 xx天前 > 15天 直接显示日期
** 第一步:本地化 Carbon。在 AppServiceProvider 的 boot 方法中添加 Carbon::setLocale(‘zh’)。
1Carbon::setLocale('zh');
** 第二步:在 Model 中设定要人性化显示的字段。以 Article Model 的 created_at 字段为例。
123public function getCreatedAtAttribute($value) ...