首页
网站导航
关于
Search
1
解决Typecho Joe主题访问fastly.jsdelivr.net速度慢的方案 | 快速优化技巧
2,252 阅读
2
解决WSL2内存不释放问题的最佳指南
1,529 阅读
3
如何在 Typecho Joe 主题的文章中增加目录
1,186 阅读
4
GO语言环境的搭建教程 - 完全指南
1,042 阅读
5
如何解决Win11电脑桌面上方显示横线问题 | 窗口11教程
1,028 阅读
默认分类
编程语言
GO语言
PHP
Node
javascript
html
rust
java
Css
Python
资源分享
chrome插件
阅读思考
运维架构
redis
Nginx
linux
memcached
mongodb
mysql
windows
docker
k8s
Mq
apache
CI
Git
swoole
elk
系统设计
thinkPhp
beego
登录
Search
标签搜索
重要
go基础
git 命令
go包
phpstorm
sublime
thinkphp6
mysql问题
软件分享
redis命令
php基础
thinkphp3.2
php第三扩展包
小蚯蚓博客
累计撰写
335
篇文章
累计收到
48
条评论
首页
栏目
默认分类
编程语言
GO语言
PHP
Node
javascript
html
rust
java
Css
Python
资源分享
chrome插件
阅读思考
运维架构
redis
Nginx
linux
memcached
mongodb
mysql
windows
docker
k8s
Mq
apache
CI
Git
swoole
elk
系统设计
thinkPhp
beego
页面
网站导航
关于
搜索到
35
篇与
的结果
2022-07-29
SQL查询 - 如何检索包含反斜杠编码的JSON字段值
概述 经常会在mysql字段中存josn_encode后的数据,如果数据中的字段有中文,那么会被转义,这个时候查询的时候就要加上一些反斜杠 解决 例如数据字段的值是: {"device_list":[["\u96f7\u795eKU27F144M","JT00ER0090008N2UH01T"]],"short_series":{"\u96f7\u795eKU27F144M":"1"}} 那么要查询\u96f7\u795eKU27F144M就要使用sql LIKE '%"\\\\\u96f7\\\\\u795eKU27F144M"%'; 前面要加上4个斜杠,配合php的话,php代码可以使用json_ecode来转义字符串 $pn = str_replace('\\','\\\\\\\\\\',json_encode($pn)); // 数据存储的json中文会转码 $pn = trim($pn,'"'); // json编码会自动加上引号,这边去掉 $sql = 'LIKE \'"%{$pn}"%\'';
2022年07月29日
406 阅读
0 评论
0 点赞
2022-07-21
常用SQL语句:完整指南和优化策略
索引操作 查看索引 SHOW INDEX FROM <表名>; 删除索引 alter table <表名> drop index <索引名>; 删除主键 alter table <表名> drop primary key; 删除外键 alter table <表名> drop foreign key <外键名称>; 添加主键索引 ALTER TABLE <表名> ADD PRIMARY KEY (`column`) USING BTREE 添加唯一索引 ALTER TABLE <表名> ADD UNIQUE (`column`) USING BTREE 添加全文索引 ALTER TABLE <表名> ADD FULLTEXT idx_name (`column`) -- 例如 ALTER TABLE news ADD FULLTEXT idx_full_text (`content`); 添加普通索引,索引的名称推荐 idx_ 开头 ALTER TABLE <表名> ADD INDEX idx_name (`column` ) USING BTREE 添加组合索引 ALTER TABLE <表名> ADD INDEX idx_name (`column1`, `column2`, `column3`) USING BTREE 修改列 修改列 列名称必须存在 alter table <表名> modify column `<字段名>` varchar(6) default '' comment '接单地区(区)'; 添加列 alter table <表名> add column `<字段名>` varchar(6) default '' comment '接单地区(区)' after `<字段名>`; 删除列 alter table <表名> drop column <列名>; 修改列的名称 ALTER TABLE erp_material_request_order_detail CHANGE COLUMN no_return_reason is_need_return_reason varchar(100) NOT NULL DEFAULT '' COMMENT '操作退回或者无需退回的原因'; 表操作 截断表 truncate table <表名>; 创建表 mysql 5.5 之后默认就是 innodb,所以不指定存储引擎也是可以的 CREATE TABLE `erp_api_log` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', `type` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '类型(1api发起,2api接受)', `url` text COMMENT '请求地址',// text 类型不可以设定默认值字,默认就是空字符,只能通过 = '' 和 != '' 可以筛选 `ip` varchar(500) NOT NULL DEFAULT '' COMMENT '请求id', PRIMARY KEY (`id`), KEY `idx_dev_ids` (`dev_ids`,`status`,`check_time`) USING BTREE, ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='api调用请求日志'; 以某张表为模板创建表 CREATE TABLE IF NOT EXISTS content_operation_log_2023_08 LIKE content_operation_log 修改表名称 alter table ts01 rename to ts01_new; 查看表状态 可以查看数据库所有表的大小等信息 SHOW TABLE STATUS FROM db_name; 查看表的创建语句 --- 显示表创建语句 SHOW CREATE TABLE 104_server_auto_unregister_config; --- 这个只有显示字段信息 DESC 104_server_auto_unregister_config; 用户权限 创建用户 mysql 5.6 5.7 用户管理,'david'@'%' 会作为一个唯一索引,localhost 和 127.0.0.1 是不一样的东西 create user 'david'@'%' identified by '03203511';// 添加 删除用户 删除用户,已经在连接的还是会继续连接 drop user 'david'@'%'; 修改密码 这个条语句只适合 mysql 5.7,5.6 不行,8.0 没有试过 alter user 'test'@'%' identified by '03203512'; 5.6 版本使用这个修改密码 SET PASSWORD FOR 'david'@'%' = PASSWORD('mypass'); 查看权限 显示有什么权限 show grants for 'test'@'%'; 赋予权限 grant select,update,insert,delete,create,index on test.* to 'test'@'%'; 回收权限 回收部分权限 revoke create,index on test.* from 'test'@'%'; 回收所有的权限 revoke all on test.* from 'test'@'%'; 数据库 创建数据库 创建数据库,utf 8 只能保存 3 字节,不能保存表情符号等四字节的 create database egg default character set utf8mb4 collate utf8mb4_bin; 增删改查 删除操作 delete from <表名称> where id = 1 limit 1 如果唯一 key 冲突了,则更新,否则是插入数据 下面例子中,假设唯一索引是字段 logical_region_id,如果已经存在 logical_region_id=1010 的,则是修改字段 day、updated_at、updater 三个字段 INSERT INTO `104_server_auto_unregister_config` ( `logical_region_id`, `day`, `updater`, `updated_at`, `created_at` ) VALUES ( 1, 1010, '小明', 1703640088, 1703640088 ) ON DUPLICATE KEY UPDATE `day` = VALUES(`day`), `updated_at` = VALUES(`updated_at`), `updater` = VALUES(`updater`)
2022年07月21日
386 阅读
0 评论
0 点赞
2022-06-28
创建表的基本字段教程和技巧
概述 很多是时候,有些字段在后续的需求中有很大的作用,这里整理几个基本字段。 常用字段 主键id,这个字段的用处不过多解释 `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', 创建方式,经常会用于区分数据,数据统计 `create_type` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建方式(1表单,2导入)', 创建人,经常回用于数据统计 `create_user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建人id', 创建时间,用显示 `created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '创建时间', 更新时间 `updated_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间' 删除时间 `deleted_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '删除时间'
2022年06月28日
208 阅读
0 评论
0 点赞
2022-06-27
解决SQL更新时反斜杠丢失的问题
概述 如果再更新字段的sql如下: UPDATE o2o_delivery_parts SET logistics_fail_param = '{"order_type":10,"send_name":"\u5468\u5f66"}' WHERE id=288944 LIMIT 1; 那么实际执行的结果logistics_fail_param的值是: -- 反斜杠消失 logistics_fail_param = '{"order_type":10,"send_name":"u5468u5f66"}' 解决办法 要用双斜杠代表一个斜杠 UPDATE o2o_delivery_parts SET logistics_fail_param = '{"order_type":10,"send_name":"\\u5468\\u5f66"}' WHERE id=288944 LIMIT 1;
2022年06月27日
242 阅读
0 评论
0 点赞
2022-06-20
解决MySQL使用GROUP BY时查询速度慢的问题
概述 MySQL使用group by的时候,经常会Using temporary; Using filesort,这将导致查询速度很慢 表ddl如下所示,有50多万条: CREATE TABLE `erp_storage_flow_log_report` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id', `factory_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '工厂id', `material_sku_depot_unique_index` varchar(50) NOT NULL DEFAULT '' COMMENT '物料仓库唯一索引', `material_inbound_amount` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '料件入库', `deleted_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '删除时间', PRIMARY KEY (`id`), KEY `factory_id` (`factory_id`), KEY `material_sku_depot_unique_index` (`material_sku_depot_unique_index`) USING BTREE, KEY `deleted_at` (`deleted_at`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=512683 DEFAULT CHARSET=utf8mb4 COMMENT='出入库报表'; 使用如下sql进行查询,查询时间很久: SELECT `storageSummaryReport` .*, SUM(material_inbound_amount) AS `sum_material_inbound_amount` FROM `erp_storage_flow_log_report` `storageSummaryReport` WHERE ( `storageSummaryReport`.`factory_id` = 1 ) AND `storageSummaryReport`.`deleted_at` = 0 GROUP BY `material_sku_depot_unique_index` ORDER BY `storageSummaryReport`.`id` DESC LIMIT 0, 10 分析原因: 因为数据表中的factory_id都为1,deleted_at都等0,所以这两个where条件会导致几乎要遍历所有的数据,这个会导致很慢。 在group by 中使用order by,会导致file sort,这个也会导致速度很慢,既然它默认会排序,我们不给它排是不是就行啦。 我们一起来想下,执行group by语句为什么需要临时表呢?group by的语义逻辑,就是统计不同的值出现的个数。如果这个这些值一开始就是有序的,我们是不是直接往下扫描统计就好了,就不用临时表来记录并统计结果了 group by列加索引是必然需要的 解决办法 去掉无实际意义的筛选条件 去掉order by语句
2022年06月20日
552 阅读
0 评论
0 点赞
1
...
3
4