update

Mysql批量更新的三种方式

本秂侑毒 提交于 2020-02-06 02:14:54
前言 批量插入由于mysql的VALUES原生支持,使用较为便利。 批量更新的写法一般有三种,在更新数量较少的情况下,前两种性能不相上下。但是在更新字段增加,更新条数较多(500以上)建议使用第三种写法。 常规写法,拼接多个单条更新语句。 CASE...WHEN... 写法 JOIN 写法 Batch Update spring/mybatis/JDBI都支持这种批量更新方式。 这种更新方式需要设置jdbc连接的参数: allowMultiQueries=true # 完整url举例 jdbc.url=jdbc:mysql://localhost:3306/db_name?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true 具体实现以Spring的 JdbcTemplate 为例。 batchUpdate 的主要代码如下图: 首先检查了jdbc连接是否支持批量更新操作,如果 allowMultiQueries 值为 false ,将被拦截。 然后拼接了SQL语句,拼接代码如下: 直接用分号拼接。 CASE WHEN 示例: UPDATE test SET code = ( CASE WHEN id = 1 THEN 11 WHEN id = 2 THEN 22 WHEN id = 3 THEN 33 END )

mysql事务隔离界别与锁机制

你说的曾经没有我的故事 提交于 2020-02-05 22:58:43
数据库锁 共享锁(Shared lock) 例1: ---------------------------------------- T1: select * from table (请想象它需要执行1个小时之久,后面的sql语句请都这么想象) T2: update table set column1='hello' 过程:T1运行 (加共享锁) T2运行等待T1运行完之后再运行T2 之所以要等,是因为T2在执行update前,试图对table表加一个排他锁,而数据库规定同一资源上不能同时共存共享锁和排他锁。所以T2必须等T1执行完,释放了共享锁,才能加上排他锁,然后才能开始执行update语句。 例2: ---------------------------------------- T1: select * from table T2: select * from table 这里T2不用等待T1执行完,而是可以马上执行。 分析: T1运行,则table被加锁,比如叫lockA T2运行,再对table加一个共享锁,比如叫lockB。 两个锁是可以同时存在于同一资源上的(比如同一个表上)。这被称为共享锁与共享锁兼容。这意味着共享锁不阻止其它session同时读资源,但阻止其它session update 例3: ---------------------------------

python脚本更新数据库报错:pymysql.err.InternalError: (1054, u\"Unknown column '\\u533b\\u836f' in 'where clause'\")

别说谁变了你拦得住时间么 提交于 2020-02-04 22:58:59
这个错误让我很方啊。首先我的字段类型是用utf8mb4_unicode_ci编码的,防止emoji之类的显示不出来嘛,虽然说不会有emoji出现吧。 name = ['军事', '科幻', '美食', '散文', '童话', '政治', '哲学'] for na in name: a = random.randint(2, 5) #print type(a) con.execute("update b set maxstore=(%d) where bk=%s"%(a, na)) con.execute("update b set rest=(%d) where bk=%s"%(a, na)) ''' a = random.randint(2, 5) con.execute("update b set maxstore=(%d) where bk='医药'"%(a)) con.execute("update b set rest=(%d) where bk='医药'"%(a)) ''' 没加注释的是报错的,加了注释的是正确的,就是为了省时才写的脚本,结果呵呵了,这两种方式有啥区别吗?为啥上边的就不对呢?有待研究。。。 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 11.16 问题解决: bk = u'美食'

redis 5.0.7 源码阅读——跳跃表skiplist

ぐ巨炮叔叔 提交于 2020-02-04 16:06:08
redis中并没有专门给跳跃表两个文件。在5.0.7的版本中,结构体的声明与定义、接口的声明在server.h中,接口的定义在t_zset.c中,所有开头为zsl的函数。 一、数据结构 单个节点: typedef struct zskiplistNode { //key,唯一 sds ele; //分值,可重复 double score; //后退指针 struct zskiplistNode *backward; //层 struct zskiplistLevel { //前进指针 struct zskiplistNode *forward; //到本层下一节点的跨度,用于计算rank unsigned long span; } level[]; } zskiplistNode; zskiplistNode定义了跳跃表中每个节点的数据结构,它是一个变长结构体。 1 /* 2 +------------------------+ 3 |sds ele | /+-----------------------------+ 4 +------------------------+ / |struct zskiplistNode *forward| 5 |double score | / +-----------------------------+ 6 +---------------

mybaits-plus总结

孤人 提交于 2020-02-04 15:39:58
import java.math.BigDecimal; import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.Map; import javax.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.enums.SqlLike; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.plugins.Page; import com.ebc.numen.Application; import com.ebc

CocoaPods安装和使用教程

北慕城南 提交于 2020-02-04 12:03:42
CocoaPods是什么? 当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,周而复始,可见手动一个个去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦。然而CocoaPods能解决这些恼人的问题。 CocoaPods应该是iOS最常用最有名的类库管理工具了,上述两个烦人的问题,通过cocoaPods,只需要一行命令就可以完全解决,当然前提是你必须正确设置它。重要的是,绝大部分有名的开源类库,都支持CocoaPods。所以,作为iOS程序员的我们,掌握CocoaPods的使用是必不可少的基本技能了。 如何下载和安装CocoaPods? 在安装CocoaPods之前,首先要在本地安装好Ruby环境。至于如何在Mac中安装好Ruby环境,请google一下,本文不再涉及。 假如你在本地已经安装好Ruby环境,那么下载和安装CocoaPods将十分简单,只需要一行命令。在Terminator(也就是终端)中输入以下命令: sudo gem install cocoapods 但是,且慢。如果你在天朝,在终端中敲入这个命令之后,会发现半天没有任何反应。原因无他,因为那堵墙阻挡了cocoapods.org

KaliLinux切换python版本

☆樱花仙子☆ 提交于 2020-02-04 10:23:37
一、 打开终端分别输入下面两条命令: update-alternatives --install /usr/bin/python python /usr/bin/python2 100 update-alternatives --install /usr/bin/python python /usr/bin/python3 150 二、然后打开终端输入    python --version 三、 如果需要切换python版本: update-alternatives --config python 四、然后选你需要的python版本,输入序号就可以了。 如果需要重新切换回python版本:    update-alternatives --config python (选号) 来源: https://www.cnblogs.com/flawlessm/p/12258382.html

oracle——笔记——1-3内容

社会主义新天地 提交于 2020-02-04 00:40:40
select * from emp; --employee 员工表 select * from dept; --department 部门表 select * from salgrade;-- salary grade 工资等级表 ---emp empno 员工编号 ename 员工姓名 job 工作/工种 mgr manager上级编号 hiredate 入职日期 sal salary 工资 comm 奖金/津贴 deptno 部门编号 --dept deptno 部门号 dname 部门名称 loc 所在地 --salgrade grade 等级 losal lowest salary 最低工资 hisal high salary 最高工资 --------------------------- --数据查询语句 select from where --查询emp表中,所有员工的姓名、工资、部门号 select ename,sal,deptno from emp; --查询emp表中,工资大于1500 的员工信息 select * from emp where sal > 1500; --查询emp表中,上级是7698 的员工姓名和津贴 select ename,comm from emp where mgr = 7698; ---列的别名 select ename,sal

oracle——笔记——4内容

半城伤御伤魂 提交于 2020-02-04 00:40:23
--外连接 作用:查询不满足连接条件的数据 select * from emp e,dept d where e.deptno = d.deptno; select * from dept; select * from emp e,dept d where e.deptno(+) = d.deptno; ---右外 insert into emp(empno) values(1122); select * from emp e,dept d where e.deptno = d.deptno(+); ---左外 select * from emp e,dept d where e.deptno(+) = d.deptno(+); ---不存在这种写法 ----外连接的另外一种写法: select * from emp e left outer join dept d on e.deptno = d.deptno; ---left 显示左边表不满足条件的数据 ---outer 可以省略 ---on 只能写连接条件,其他条件 写到where里 select * from emp e right outer join dept d on e.deptno = d.deptno; ---右外 select * from emp e full outer join dept d on e

PLSQL——09、触发器

萝らか妹 提交于 2020-02-03 09:59:14
触发器 trigger 触发器是一种特殊的过程,它的执行是由一系列事件触发的。这些事件有用户登录注销事件,DML语句执行事件等等。我们常用的就是DML触发器, 事件的精确粒度可以是表级或行级。 trigger的实际应用非常广泛,例如A表有数据DML操作,就可以在A表上做个触发器,将数据协同更新到B表。 我们也经常用触发器来做审计。 触发器可分为: database 触发器 :审计,例如记录用户登录和退出的信息等 schema 用户触发器 :可以用于:禁用DDL、禁止某个IP登录 DML触发器(表级 和 行级) :表级 DML前(before) DML后(after) ;行级 更新每一行触发一次 (before|after),行级带有for each row关键字 创建触发器语法 CREATE OR REPLACE TRIGGER trigger_name {BEFORE|AFTER|INSTEAD OF} EVENTs ON TABLE_NAME [for each row] declare ... begin ... end; {BEFORE|AFTER|INSTEAD OF} 触发器在事件执行之前或之后触发,还有一种替代触发器 EVENTs 不同类型的触发器有不同的事件,例如DML触发器 update or delete or insert ON TABLE_NAME