sql
文章平均质量分 77
山间明月江上清风_
编程就是算法和数据结构,算法和数据结构是编程的灵魂
展开
-
mysql 设置binlog的保存时间
测试环境磁盘老爆,发现是大量mysql-bin(binlog)文件照成的,有100多个G。修改配置改成只保留7天的binlog文件vim /etc/mysql/mysql.conf.d/mysql.cnf#添加配置 保留7天expire_logs_days=7 ...原创 2019-02-22 17:47:25 · 6025 阅读 · 0 评论 -
mysql各种锁解释
mysql锁有行锁,表锁,间隙锁,乐观锁,下面我用实际操作来解释下这几种锁的区别首先建一个innodb的表,并初始化CREATE TABLE `user` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NULL DEFAULT '0', `status` VARCHAR(50) NULL DEFAULT '0'...原创 2019-03-19 14:27:13 · 538 阅读 · 0 评论 -
mysql删除重复数据只保留一条
delete from test where id not IN(SELECT tmp.id FROM (SELECT id FROM testGROUP BY NAME) tmp)原创 2019-03-13 16:18:05 · 208 阅读 · 0 评论 -
记一次mysql间隙锁照成死锁
最近项目中发生死锁问题,发现是mysql为保证可重读而使用间隙锁导致的。场景是在在一个事务里面查询了多条记录(包括记录A),而mysql数据库的隔离机制是可重复读,为了保证在这个事务里这些数据不被其他连接修改。就会吧这些数据加上间隙锁(范围锁)。这时其他线程在另一个事务里查询了数据B,(相当于给数据B加间隙锁),然后想要修改数据A,照成两个事务互相等待对方释放锁,就照成了死锁。流程图如下:程...原创 2019-03-07 09:41:14 · 606 阅读 · 0 评论 -
mysql随机取数据优化
mysql表中随机取三条数据。本来是打算用:select * from table order by rand() limit 3结果40W的表查询要2.6秒,速度贼慢。每条记录都调用了rand()行数来排序后来发现mysql官方手册也不推荐这种做法,找到下面这种方法:SELECT * FROM table AS t1 JOIN (SELECT ROUND(RAND() ...原创 2019-02-20 18:00:19 · 495 阅读 · 0 评论 -
解决 Incorrect string value: for column 'name' at row 1 问题
今天插入数据报错:Incorrect string value: '\xE5\x8D\x97\xE5\xA4\xA9...' for column 'name' at row 1首先想到的是mysql对应表的字符编码不对。后来看到确实是字符编码问题。修改编码为utf-8,解决。...原创 2018-10-25 11:45:11 · 37013 阅读 · 4 评论 -
记一次大文件导入优化
最近线上文件导入极慢,每秒才导入两行。来个25W的文件就要导半天后来发现时间消耗在每条记录的校验sql上了。每条记录要发两条sql校验耗时400毫秒,25w条数据就要27小时!这种情况在测试环境没有发生过,测试环境查询sql只要8毫秒,估计生产数据库是远程的,网络传输有延时。考虑到文件日后还有增大的可能性。遂改成:1,将导入文件不发sql校验正确性,直接落库在一张临时表里2...原创 2019-01-09 15:33:07 · 521 阅读 · 0 评论 -
SQLAlchemy使用教程
SQLAlchemy是python的ORM框架,把表映射成对象,类似于java的hibernate,mybatis。而且支持的数据库非常多:FirebirdMicrosoft SQL ServerMySQLOraclePostgreSQLSQLiteSybase还支持其他数据库扩展。下面来正式使用,首先基于之前文章在intellij idea+python plu...原创 2018-05-06 17:11:28 · 809 阅读 · 0 评论 -
sqlalchemy-clickhouse源码解析
首先下载源码git clone https://github.com/cloudflare/sqlalchemy-clickhouse.git可以看到里面有个example.py写了使用例子#!/usr/bin/env python# Use connector directlyimport connectorcursor = connector.connect('tool...原创 2018-05-06 23:03:32 · 4730 阅读 · 1 评论 -
mysql行转列
在固定列的情况下,可以group by后把每个列要显示的数据通过if指定写到sql里:...SUM(IF(条件,输出的列,默认值)),SUM(IF(条件,输出的列,默认值))...group by xxx...在动态列的情况,可以使用预编译:1,先用group_concat将动态行转出一行赋值给变量2,然后用多个变量组装成最后要执行的sql,再执行SET @SQL...原创 2019-09-12 13:35:05 · 288 阅读 · 0 评论