首页
关于
Search
1
sublime 3155-3175 LICENSE
7,731 阅读
2
mysql存储过程&时间累加插入
7,616 阅读
3
在投射和录制时显示敏感信息写给TeamViewer,anydesk,向日葵
7,607 阅读
4
永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
4,438 阅读
5
mysql-workbench中duration fetch的含义
4,380 阅读
ubuntu
centos
sublime
php
mysql
JS
CSS
其他
chrome
redis
登录
Search
标签搜索
mysql
curl
grep
journalctl
rename
only_full_group_by
警示
dropbox
mtr
curl抓取重定向
floor
intval
ceil
round
pixmap
adwaita
date.utc
gmmktime
unity8
查询自定义字段
五好的Book
累计撰写
182
篇文章
累计收到
24
条评论
首页
栏目
ubuntu
centos
sublime
php
mysql
JS
CSS
其他
chrome
redis
页面
关于
搜索到
47
篇与
的结果
2021-12-15
凭空select出连续的日期数据
我们在做数据统计的时候, 尤其按照特定的日期序列得到数据,每天都要展示没有的展示0,这个时候如果我们group by日期,很容易就得到我们的数据了。但是每天都要展示, 没有的用0填充,这可有点不好办,那么有什么办法可以实现这样的需求呢。方法1: 创建一个日期表,把group by的数据 join 对应的日期,那么就可以实现需求了,nice!如创建 date表(每天写一条日期数据)select a.dt,rmb from date d join left( select from_unixtime(ctime,'%Y-%m-%d')dt,sum(Rmb)rmb from Table group by dt)a on d.dt=a.dt; 方法2: 不需要创建date表,直接凭空生成连续的日期~方法参考stackoverflow的大神。 select Days from ( SELECT curdate() - INTERVAL (a.a + (10 * b.a) + (100 * c.a)) DAY AS Days FROM (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS b CROSS JOIN (SELECT 0 AS a UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS c )aa WHERE aa.Days >= '2021-12-10' - INTERVAL 30 DAY order by Days limit 30 该语句执行后得到从 2021-12-10开始之前的30天内的日期值,需要其他日期自己灵活运用就行了。同样的 结合方法1:date表的内容 被上述sql替代即可,very nice!方法3:mysql8+才支持,缩短了方法2的语句 with recursive all_dates(dt) as ( select '2021-12-1' dt union all select dt + interval 1 day from all_dates where dt + interval 1 day <= '2021-12-15' ) select * from all_dates very very nice!具体应用场景 如下图:
2021年12月15日
920 阅读
0 评论
0 点赞
2021-12-13
看我如何解决自增ID带来的麻烦
自增ID还有麻烦?有啊, 自增可预测,很方便采集的人员。如何解决这种麻烦呢?看我运用 mysql的函数,视图来解决这个问题。上代码:CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`%` SQL SECURITY DEFINER VIEW `txt_ms` AS SELECT 相关字段, CAID(`txt`.`id`) AS `mid` FROM `txt` WHERE (`txt`.`status` = 1) 视图txt_ms创建好后,调数据 就像调 txt 一样,只是多了一个 字段 mid,而mid 是通过自定义函数 CAID得到的CAID的代码:由于代码避免敏感,需要按照自建的算法来生成 这里就不写了, 自定函数的方法 可以参考mysql函数的应用
2021年12月13日
627 阅读
0 评论
0 点赞
2021-12-10
mysql8 安装与更改datadir数据目录
先上一张安装过程的输出日志:sudo apt install mysql-server 完全干净的删除 mysql 用sudo apt remove mysql* --purge 从日志来看, 安装过程中,显示创建一个root帐号然后 因为IO interfaces failed和mysqlx.sock failed 重启 逐个解决了这2个问题后安装并且启动完成。 现在我们来讲讲更改datadir的操作,经过卸载重安装多次循环操作后掌握了其更改datadir的核心技术^_^关于更改datadir 之前我有做过记录mysql 8 更改数据存放目录,不过现在再用这个办法已经不适用了,于是乎有了这新的篇章。 vi /etc/mysql/mysql.conf.d/mysqld.cnf 增加 datadir 的设置 如设置为:datadir = /data/mydata/ 设置好后 :x 或者:wq 保存退出这次其实就多了一步 就是设置 apparmor 设置好这里的别名,设置后就好了。vi /etc/apparmor.d/tunables/alias 打开后插入一行 如下:/data/mydata/ 为你希望的datadir alias /var/lib/mysql/ -> /data/mydata/, 值得注意的是:上面那个逗号不能少设置好后 :x 或者:wq 保存退出sudo systemctl restart apparmor 或者sudo service apparmor restart 然后初始化一下sudo mysqld --initialize 或者sudo mysqld --initialize-insecure --initialize-insecure 将初始化一个没有密码的root帐号最后 启动 mysqlsudo service mysql start
2021年12月10日
687 阅读
0 评论
0 点赞
2021-12-08
mysql之函数的应用
先上代码DELIMITER $$ CREATE DEFINER=`root`@`%` FUNCTION `aa`(ids int,tim varchar(16)) RETURNS int(11) BEGIN declare aaa int; if tim>0 then set @tim=tim; set @st = UNIX_TIMESTAMP(@tim); set @et=UNIX_TIMESTAMP(DATE_ADD(@tim, INTERVAL 1 MONTH)); select sum(m) into aaa from( SELECT `money_out`.`bid` AS `bid`, (SUM(`money_out`.`money`) / 100) AS `m` FROM `money_out` where bid=ids and ctime>=@st and ctime<@et union select `money_out_book`.`bid` AS `bid`, (SUM(`money_out_book`.`money`) / 100) AS `m` FROM `money_out_book` where bid=ids and ctime>=@st and ctime<@et) a; else select sum(m) into aaa from( SELECT `money_out`.`bid` AS `bid`, (SUM(`money_out`.`money`) / 100) AS `m` FROM `money_out` where bid=ids union select `money_out_book`.`bid` AS `bid`, (SUM(`money_out_book`.`money`) / 100) AS `m` FROM `money_out_book` where bid=ids) a; end if; RETURN aaa; END$$ DELIMITER ; 功能:该函数...先不说。 CREATE DEFINER=`root`@`%` FUNCTION `aa`(ids int,tim varchar(16)) RETURNS int(11) 创建一个函数名称是 aa 可以接收 2个参数 ids,和 tim 返回 一个整型的数据。 declare aaa int; 定义一个变量set @tim=tim; set @st = UNIX_TIMESTAMP(@tim); set @et=UNIX_TIMESTAMP(DATE_ADD(@tim, INTERVAL 1 MONTH)); 输入参数的传递 与转换select sum(m) into aaa from(...) tmp 把查询到的数据写入到变量 aaaRETURN aaa; 返回aaaOK,这个函数的功能是 计算给定的 书ID和时间 返回 对应的 的消费情况。如果有时间输入 则返回指定时间的数据, 否则返回该书所有的数据。这里是关于mysql 触发器的应用
2021年12月08日
672 阅读
0 评论
0 点赞
2021-11-29
用触发器来记录操作记录
直接上代码DROP TRIGGER IF EXISTS `trigger_book` ; DELIMITER $$ CREATE DEFINER=`root`@`%` TRIGGER trigger_book after update ON book FOR EACH ROW BEGIN declare nowtime int(11); set @b1 =''; set nowtime=unix_timestamp(now()); if (old.cooperation!=new.cooperation or new.base!=old.base or new.buyout!=old.buyout or new.into!=old.into or new.quan!=old.quan) then if (old.cooperation!=new.cooperation) then set @b1=concat(" 修改签约类型为:",new.cooperation," 旧值:",old.cooperation); end if; if (new.base!=old.base) then set @b1=concat(@b1," 修改保底为:",new.base," 旧值:",old.base); end if; if (new.buyout!=old.buyout) then set @b1=concat(@b1," 修改买断为:",new.buyout," 旧值:",old.buyout); end if; if (new.quan!=old.quan) then set @b1=concat(@b1," 修改全勤为:",new.quan," 旧值:",old.quan); end if; if (new.`into`!=old.`into`) then set @b1=concat(@b1," 修改分成为:",new.`into`," 旧值:",old.`into`); end if; insert into opt_log(opt_uid,opt_value,opt_time,bid)value(new.opt_uid,@b1,nowtime,new.id); end if; end $$# DELIMITER ; 以上是修改书的签约类型时,记录对应的人以及对应的修改前后的值。可能应用场景有限,但是这不需要在应用层去做相关功能, 直接数据库里就完事了。如果感兴趣还可以看看函数的应用
2021年11月29日
957 阅读
0 评论
0 点赞
1
2
3
...
10