暂无图片
MySQL 怎么根据已有的记录逆向生成insert语句?
我来答
分享
暂无图片 匿名用户
MySQL 怎么根据已有的记录逆向生成insert语句?

MySQL 怎么根据已有的记录逆向生成insert语句?

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
薛晓刚

给你举个例子。

我以前做的。

mysqlbinlog --start-datetime='2018-08-21 12:50:00' --stop-datetime='2018-08-21 13:05:00' --base64-output=decode-rows -v -v /var/lib/mysql/mysql-bin.000007 |sed -n '/### DELETE FROM `x`.`a`/,/COMMIT/p' >/setup/delete.txt


#180821 12:55:03 server id 1 end_log_pos 18532 CRC32 0x3cd1c9c1 Table_map: `x`.`a` mapped to number 131

# at 18532

#180821 12:55:03 server id 1 end_log_pos 18582 CRC32 0xd49a6ad0 Delete_rows: table id 131 flags: STMT_END_F

### DELETE FROM `x`.`a`

### WHERE

### @1=1

### DELETE FROM `x`.`a`

### WHERE

### @1=2

### DELETE FROM `x`.`a`

### WHERE

### @1=3

# at 18582

#180821 12:55:03 server id 1 end_log_pos 18613 CRC32 0xe3a62189 Xid = 2077

COMMIT/*!*/;

DELIMITER ;


cat /setup/delete.txt | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/values (/g;' | sed -r 's/(@1.*),/\1);/g' | sed 's/@[1]=//g' > /setup/test.txt


cat /setup/delete.txt | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/values (/g;' | sed -r 's/(@2.*),/\1);/g' | sed 's/@[1-2]=//g' > /setup/test.txt


mysql> select * from a;

Empty set (0.00 sec)


mysql> source /setup/test.txt

Query OK, 1 row affected (0.00 sec)


Query OK, 1 row affected (0.00 sec)


Query OK, 1 row affected (0.00 sec)


mysql> select * from a;

+------+------+

| id | name |

+------+------+

| 1 | a |

| 2 | b |

| 3 | c |

+------+------+

3 rows in set (0.00 sec)

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏