Mysql使用别名多表查询join时问题
1 | SELECT * FROM t1, t2 LEFT JOIN t3 ON (t1.id=t3.id) WHERE t1.id=t2.id |
重置root密码
1 | kill `cat /mysql-data-directory/host_name.pid` |
mysql5.7无法远程连接问题
1 | mysql -uroot -p |
select *导致的mysql线程sending data
1 | 当有大量的”select * from xxx”存在时,虽然这个表的数据量不是很大,只有区区几千条记录记录,但是大量的查询引起mysql线程状态卡在”sending data”时,服务器的负载就上来了。 |
lumen数据库时区设置
1 | http://www.helpergarden.com/2018/05/lumen%e6%95%b0%e6%8d%ae%e5%ba%93%e6%97%b6%e5%8c%ba%e8%ae%be%e7%bd%ae.html |
nginx跨域设置
1 | location / { |
swoole process父子进程使用队列通信
1 | <?php |
yum安装elasticsearch
1 | //http://www.helpergarden.com/2018/03/yum%e5%ae%89%e8%a3%85elasticsearch.html |
grant
1 | mysql>grant select,delete,update,create,drop on *.* to test@"%" identified by "1234"; |
EXPLAIN 查看SQL执行计划
1 | EXPLAIN SELECT …… |
卸载mysql8
1 | [root@VM_0_14_centos ~]# rpm -qa|grep mysql |
安装mysql5.7
1 | wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm |
查看实时执行的SQL语句
1 | mysql> SHOW VARIABLES LIKE "general_log%"; |
Can’t connect to local MySQL server
1 | [root@localhost app]# mysql |
Access denied for user ‘root‘@’localhost’
1 | # /etc/init.d/mysqld stop //停止mysql服务的运行 |
Can’t connect to MySQL server on ‘127.0.0.1’
1 | [root@localhost ~]# mysql -uroot -p -h 127.0.0.1 |
转换编码
1 |
|
安装 MySQL8.0.13
1 | wget -c 'https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.13-1.el7.x86_64.rpm-bundle.tar' |
查询指定数据库的所有表名称
1 | USE information_schema; |
MySQL 分区表
1 | //https://learnku.com/articles/22947 |
limit优化
1 | MySQL的 limit m,n 工作原理就是先读取符合where条件的前面m+n条记录,然后抛弃前m条,返回后面n条,所以m越大,偏移量越大,性能就越差。这也是大部分ORM框架生成的分页sql |
insert
1 |
|
bindParam 和 bindValue
1 |
|
行列转换
1 | #准备示例数据 |
MySQL密码
1 | mysql> select password('root'),concat('*',sha1(unhex(sha1('root')))); |
导出表数据
1 | select * from table into outfile "/home/root/example.sql" where +条件 |
从数据库中获取随机的数据
1 | User::inRandomOrder()->get(); |
mysql5.7 datetime 默认值为‘0000-00-00 00:00:00’值无法创建问题解决
1 | 1、使用root登陆数据库 命令界面执行 |
Redis 分布式锁
1 | /** |
redis-cli
1 | //https://juejin.im/book/5afc2e5f6fb9a07a9b362527/section/5bcfd27051882577e962f064 |
每个分组的最后一条记录
1 | select * from t_tmp group by FCityId order by FUpdateTime desc;` 结果却是错误的!http://blog.text.wiki/2015/04/03/retrieve-the-last-record-in-each-group.html |
超过经理收入的员工
1 | SELECT e.Name AS Employee |
MySQL 之事务隔离级别
1 | MySQL事务主要用于处理一个包含操作量比较大、复杂的业务。比如说,删除一个学生,我们除了要删除该学生的基本信息,同时也要删除考试记录、违规记录等。诸多的操作组成一个事务。事务是用来管理insert、update、delete基本指令的。当MySQL使用innodb引擎的前提下才支持事务操作 |
MySQL性能突发事件问题排查技巧
1 | https://mp.weixin.qq.com/s/qCRfxIr1RoHd9i8-Hk8iuQ |
Mysql 批量写入数据
1 | https://my.oschina.net/famoustone/blog/856736 |
Redis延时队列
1 | https://rsy.me/posts/redis-application-in-web-development/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io |
redis 分布式锁
1 | $lockStatus = $redis->setnx($lockKey, 1); |
redis 无法启动
1 | redis突然挂掉后,无法启动,查看log日志,发现报Short read or OOM loading DB. Unrecoverable error, aborting now |
redis 导出 导入
1 | [root@localhost tank]# yum install ruby rubygems ruby-devel //安装rubygems 以及相关包 |
优化not in 和<>查询
1 | http://fanqieto.top/2017/11/26/mysql%E6%9F%A5%E8%AF%A2%E4%BC%98%E5%8C%96/ |
Redis的n种妙用
1 | setnx key value,当key不存在时,将 key 的值设为 value ,返回1。若给定的 key 已经存在,则setnx不做任何动作,返回0。 |
防止库存超卖
1 | https://www.fanhaobai.com/2017/09/record-question-1.html |
Redis管道提升性能
1 | Redis 的 管道 (pipelining)是用来打包多条无关命令批量执行,以减少多个命令分别执行带来的网络交互时间。在一些批量操作数据的场景,使用管道可以显著提升 Redis 的读写性能 |
处理重复数据
1 | CREATE TABLE `allowed_user` |
lua 抢购场景
1 | $key = 'number:string'; |
缓存与数据库双写一致性问题
1 | 周所周知,在项目性能优化、提升的时候,我们引进了一个缓存的概念,即一款缓存数据的技术,项目在最初期架构规划时都会引进的一个组件。使用缓存有很多好处:加快请求的响应速度、减少数据库的交互与浪费大量的IO操作等,但是在某些场景下使用缓存也有可能会造成雪崩、剧透、数据不一致等问题,我们研究下使用缓存会导致有哪些数据不一致的情况发生以及在哪些场景会使用哪些具体的解决方案,首先我们必然还是会使用缓存的。 |
MongoDB读写分离
PHP7中的MongoDB\Driver\ReadPreference MongoDB读写分离(Read Preference)的几种模式
1 | const integer RP_PRIMARY = 1 ; |
Laravel 分组获取最新记录
1 | ///https://learnku.com/articles/20626 |
将分组无结果的记录显示为0
1 | http://hshine.net/article/12 |
MISCONF Redis is configured to save RDB snapshots
1 | 使用redis-cli,你可以这样做: |
MySQL数据库主从复制
1 | $ systemctl start mysqld.service |
Redis 快速实现签到统计
1 | https://learnku.com/articles/25181 |
MySQL分组查询TOP N的实践和踩坑
1 | https://blog.yiranzai.cn/posts/991/ 三个字段 课程 学生 成绩,如何取每门课程成绩 top3 的学生 |
case when
1 | SELECT |
mysql replace into 坑
1 |
|
类型转换对 MySQL 选择索引的影响
1 | mysql [localhost] {msandbox} (test) > explain select age from |
redis keys scan
1 | $redis->keys('login:201903*') |
mysql5.7Incorrect datetime value: ‘0000-00-00 00:00:00’ for column
1 | `created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', |
mysql的limit进行分页时出现重复
1 | select * from table order by xx limit 0,10 |
预估 Mysql 数据表的数据大小和索引大小
1 | SELECT data_length,index_length |
mysql limit查询优化方法
1 | 对同一张表在不同的地方取10条数据: 1)offset比较小时 |
FOUND_ROWS()
1 | 分页程序一般由两条SQL组成: |
left join on where
1 | 使用了 left join,where 是针对左表,但左表是日期表,那如何做业务表上的条件限制 |
如何索引 JSON 字段
1 | CREATE TABLE `players` ( |
length 检测 vachar 字节长度
1 | insert into test value (1, '测') |
浅析乐观锁与悲观锁
1 | 使用悲观锁https://learnku.com/articles/27880 |
mysql 8.0 使用简单密码
1 | 直接在 my.cnf 配置文件中 [mysqld] 部分加入下面参数,然后重启 mysqld 即可。 |
Mysql 批量更新多行
1 | update test set test.sex = case name |
MySQL中的注释符
# 注释从#字符到行尾
-- 注释从–序列到行尾,后面需要跟上一个或多个空格,tab也可以
/* */ 注释中间的字符
获取元数据
1 | 获取当前的数据库用户,数据库名称,数据库的版本信息 |
SQL 注入
1 | select * from user where username='' and pass='' |
取出一组热门作者及他们最近发表的 3 篇文章
1 | $users = \App\Models\User::limit(10)->get(); |
多更新
1 | update your_table set is_default = (case when id = 3 then 1 else 0 end) |
MySQL 调优经历
1 | create table `users` ( |
exists
1 | https://learnku.com/articles/29168 |
批量更新所有字段字符集
1 | begin |
每门科目成绩前三的数据
1 | 表:student_score,姓名:name,科目:subject,分数 score |
删除表中重复数据,并保留一条
1 | DELETE FROM student WHERE |
并列排名和顺序排名查询
1 | 获取分数排名,要求并列排名。如果两个分数相同,则两个分数排名(rank)相同。名次之间不应该有“间隔”。 |
MySQL 分页数据错乱重复
1 | select xx from table_name wheere xxx order by 字段A limit offset;, |
MySQL 闪回工具之 binlog2sql
1 | 直接整个解析 mysql-bin.000001 日志 |
You can’t specify target table for update
1 | mysql不允许update目标表和子查询里面的表为同一张表 |
分组无数据查询填充0
1 | select date(t.create_time) as `date`, |
保留 IN 中的顺序
1 | SELECT * FROM `user_temporary` WHERE ( `id` IN ('29500','29582','29583','28299') ) LIMIT 0, 20; |
分组取前3
1 | cs_goods 表结构 |
升级mongodb3
1 |
|
Mysql 大表分页查询优化
1 | select id, content from table_name where status = 1 order by id asc limit 1328000, 1000 |
不区分大小写
1 |
|
MySQL 备份
1 | [root@localhost mc_orderdb]# mysqldump -ubackup -p --master-data=2 --single-transaction --routines --triggers --events --tab="/tmp/mc_orderdb" mc_orderdb |
groupBy 分组统计
1 | 数据中 4 号~7 号的时间段没有返回,我们理想中的返回格式是补全没有的日期,然后在这个日期对应的数量字段填 0。 |
导入文件
1 | 修改 my.cnf [mac],my.ini.[win], |
关联查询
1 | 内连接分为三类 |
MySQL大数据分页
1 | SELECT * FROM test where status = 1 limit start, 1000 |
MySQL 索引使用策略及优化
1 | MySQL 的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization)。 |
datetime 默认值为‘0000-00-00 00:00:00’值无法创建
1 | 使用root登陆数据库 命令界面执行 |
删除重复数据
1 | select *from hso_min WHERE id not IN (SELECT bid FROM (SELECT min(id) as bid FROM hso_min where symbol='xau' and uts>1565971200 GROUP BY min)as b) and symbol='xau' and uts>1565971200; |
每个用户最新一条
1 | 表一 messages |
mysql索引测试
1 | 命令行直接查询sql |
MySQL 避坑宝典
1 | 修改表的默认字符集不会改表各个字段的字符集 ALTER TABLE tbl_name [DEFAULT] CHARACTER SET 'UTF8' 误认为会修改所有字段的字符集,但实际上它只会影响后续新增的字段不会改表已有字段的字符集。如果想修改整张表所有字段的字符集建议使用 ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name; |
数据中的排名
1 | CREATE TABLE IF NOT EXISTS `employee` ( |
树查询
1 | CREATE TABLE category( |
profile 工具
1 | //开启操作 |
limit 语句的索引使用优化
1 | 针对于 limit 语句的优化,我们可以在它前面加 order by 索引字段 |
group by 城市行业后获取工资最低
1 | MySQL 求助, group by 城市行业后获取工资最低的一条数据https://cn.v2ex.com/t/600001#reply34 |
每个司机今天最早的一笔订单
1 | https://mp.weixin.qq.com/s?__biz=MzI1MzY0MzE4Mg==&mid=2247483773&idx=1&sn=d2578386819d66147f09209ecc834436&chksm=e9d011bcdea798aa21d65f935567eb1c66511d2fc9925b51ccea6a4985a21d85d95c01a513b3&scene=21#wechat_redirect |
删除重复
1 |
|
MySQL 通过 binlog 恢复数据
1 | 如果不知道 mysql 的配置文件路径,可以使用 mysql 命令进行查找, |
MySQL 8.0 加密方式不兼容
1 | Illuminate\Database\QueryException : SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: select * from information_schema.tables where table_schema = weibo and table_name = migrations and table_type = 'BASE TABLE') |
MySQL 安装常见错误
1 |
|
数据库脏读
1 | MYSQL查看数据库事务隔离级别 |
创建外键报错
1 | 外键关联的数据结构不对,查看了表的数据结构发现 ID 主键自增是 int unsigned 类型的,而我关联的 parent_id 是 int 类型的,所以数据结构不一致才会报错 |
并发测试
1 | DB::table('articles')->where('id' , $request->id)->increment('like'); |
mysql update超卖
1 | 以抢购 100 件商品为例,商品表 num=100 |
mysql5.7 datetime 默认值为‘0000-00-00 00:00:00’值无法创建
1 | 1、使用root登陆数据库 命令界面执行 |
INFORMATION_SCHEMA
1 | INFORMATION_SCHEMA 是用来访问数据库的元数据(比如数据库,表的名称,列的数据类型或者访问权限等)的,在每个 MySQL 的实例中,INFORMATION_SCHEMA 保存了它维护的所有数据库的信息 |
Got error 134 from storage engine
1 | SELECT * FROM `xx_article` WHERE `cid1` =6 LIMIT 0 , 30 |
MySQL批量更新与插入
1 | replace into table ( `column1`,`column2`,`column3` )values (1,2,3),(2,3,4),(5,6,7) |
恢复误删的数据库
1 | mysql -h127.0.0.1 -uroot -p del < bak.sql |
show processlist 神器
1 | SELECT id, db, USER, HOST, command, time, state, info FROM information_schema. PROCESSLIST WHERE command != 'Sleep' ORDER BY time DESC; |
like 条件的优化
1 | like 语句查询慢的可以尝试使用函数来查询,具体为 instr (字段名,' 值 ')>0 |
MySQL事务隔离
1 | 事务就是一组原子性的sql查询,或者说是一个独立的工作单元。简而言之,事务内的语句要么全部执行成功,要么全部执行失败。 |
后台权限表
1 | DROP TABLE IF EXISTS `crm_admin_permission`; |
取分组数据的前N条纪录
1 | CREATE TABLE tbl ( cate varchar(10), item int, note varchar(20)); |
MySQL 定时备份
1 |
|
MySQl事务最全详解
1 | MySQL 中的事务有如下几个特点(ACID): |
MySQL大小写不敏感问题
1 | show create table t3\G |
MySQL分页offset过大性能问题与优化
1 | SELECT b FROM t WHERE c<1000 LIMIT 2000000, 500 |
MySQL 反向模糊查找
1 | 假如数据库我们只存一条记录, 不管用户输入, 大卫还是大卫王我们都会回复它同一个内容.这时候我们只需要反向模糊查找即可 |
大表分页查询调研
1 | mysql> explain select * from user_status_record_1 order by id limit 5000000,5; |
修改密码
1 | 先把root的旧密码置空 |
Orderby 排序优化
1 | Create Table: CREATE TABLE `user` ( |
更新同一个表不同字段
1 | update diag_product_list_ios as a join (select soft_package_id,soft_name from diag_product_list_ios where pdt_code='ThinkDiag' ) as b on a.soft_package_id=b.soft_package_id set a.soft_name=b.soft_name where a.pdt_code='EASYDIAG4' and a.soft_name is null |
慢查询分析调优工具
1 | show variables like 'profiling%';//默认关闭,保存近15次的运行结果 |
慢查询分析调优工具
1 | show variables like '%slow_query_log%'; |
索引失效
1 | explain select * from user where name = 'zhangsan' and age = 20 and pos = 'cxy' and phone = '18730658760'; |
布尔值来作为 Group By Raw 条件
1 | 如何根据「 2001 年之前和 2001 年之后出生」 的条件进行分组?这是代码: |
悲观锁与乐观锁
1 | CREATE TABLE `order_stock` ( |
MySQL 递归查询
1 | create table question_type ( |
MySQL 行列转换
1 | drop table if exists exam; |
MySQL 获取随机条数据
1 | create table topic ( |
SQL注入总结https://anemone.top/sqli-SQL%E6%B3%A8%E5%85%A5%E6%80%BB%E7%BB%93/
Navicat Premium 12 for Mac无补丁无毒的激活方法
一个 sql 转 mongo query 的小工具, https://github.com/guxingke/sql2mongo
Mysql 使用 optimizer_trace 查看执行流程,分析、验证优化思路
sql_mode=only_full_group_by 错误
mysql 证明为什么用limit时,offset很大会影响性能
PHP+Redis,实现延迟任务 实现自动取消订单,自动完成订