咱们好啊,又跟咱们见面了,最近有个需求便是批量修改公司的数据报表,正式环境!! 而且要履行update!!

update it_xtgnyhcebg I set taskStatus = XXX

而且是没有加where条件的,相当于全表更新,这可大意不得,咱们在任何操作正式数据库之前一定一定要对数据库备份!!不要问我怎样知道的,因为我就因为有一次把测验环境的数据掩盖到正式环境去了。。。

三分钟,趁同事上厕所的时间,我覆盖了公司的正式环境数据

别到时分就后悔莫及,那是没有用的!

三分钟,趁同事上厕所的时间,我覆盖了公司的正式环境数据
三分钟,趁同事上厕所的时间,我覆盖了公司的正式环境数据

因为这个需求是需求在跨库操作的,所以咱们在查询数据的时分需求带上库的称号,例如这样

SELECT
	* 
FROM
	BPM00001.ACT_HI_PROCINST P 
	LEFT JOIN BPM00001.ACT_HI_VARINST V ON V.PROC_INST_ID_ = P.ID_ 
	AND V.NAME_ = '__RESULE'

这样假如咱们在任何一个库里边,只要在一个mysql服务里边都可以访问到这个数据 查出这个表之后

三分钟,趁同事上厕所的时间,我覆盖了公司的正式环境数据
咱们需求根据这儿的内容显示出不同的东西 就例如说是APPROVAL”我就显示“已通过” 这就类似与java中的Switch,其实sql也能实现这样的作用 如下:
三分钟,趁同事上厕所的时间,我覆盖了公司的正式环境数据
这便是sql的case句子的使用 有了这些数据之后咱们就可以更新数据表了,回到咱们之前讨论过的,这是及其危险的操作 咱们先把要set的值给拿出来
三分钟,趁同事上厕所的时间,我覆盖了公司的正式环境数据

三分钟,趁同事上厕所的时间,我覆盖了公司的正式环境数据
但是咱们怎样知道这个里边的主键呢? 你假如直接这么加,肯定是不行的
三分钟,趁同事上厕所的时间,我覆盖了公司的正式环境数据
所以咱们需求在sql后边参加这样的一条句子
三分钟,趁同事上厕所的时间,我覆盖了公司的正式环境数据
留意,这个句子一定要写在set句子的里边,这样sql就能根据里边判别的条件进行逐个赋值 最终,将这个sql句子履行到出产库中

拓宽:

作为查询句子的key肯定不能重复,否则会失利(找bug找了半天的人的好心提醒) 例如上面的句子中P.BUSINESS_KEY_必需要确保是唯一的!!

三分钟,趁同事上厕所的时间,我覆盖了公司的正式环境数据
成功履行!!! 怎样样,这些sql的小妙招你学会了吗?