批量替换sql中的id从指定的值开始
当数据库中的某个字段(例如ID)是整型,那么当新插入数据的时候需要从目前已有的数据库总最大的值加1开始排列。
当前生产数据库的id最大值为150,那么上线时候需要从151开始编号,当然可以使用sequence自增是一种方式。
这里介绍的是手动修改sql,保存如下内容到online.sql中
1 2 3 4 5 6 7 |
insert into ct values(1, 'sss', 2, 4); insert into ct values(1, 'sss', 2, 4); insert into ct values(1, 'sss', 2, 4); insert into ct values(1, 'sss', 2, 4); insert into ct values(1, 'sss', 2, 4); insert into ct values(1, 'sss', 2, 4); insert into ct values(1, 'sss', 2, 4); |
使用vim打开文件
命令模式下执行如下命令就可以搞定
1 |
:let n=151 | g/values(zsd+/s//=n/|let n+=1 |
以下是详细的解释:
这条命令各个组成元素:
1 2 3 4 5 6 7 |
let 为变量赋值 (:help let ) | 用来分隔不同的命令 (:help :bar ) g 在匹配后面模式的行中执行指定的ex命令 (:help :g ) zs 指明匹配由此开始 (:help /zs ) d+ 查找1个或多个数字 (:help /d ) s 在选中的区域中进行替换 (:help :s ) = 指明后面是一个表达式 (:help :s= ) |
所以,这条命令的执行过程为:
给变量n赋值为0;
查找模式"values(zsd+",使用变量n的值替换匹配的模式字符串;
给变量n加1;
回第二步;
通过代码实现的功能,感觉真的好神奇。