最近新项目版本比较赶,需要完成mysql数据库总多张表的百万级数据铺底工作,又不想写代码来完成这件事情,就想偷个懒简单一点,于是就想到了使用mysql数据库自带的insert和select来完成取基础数据和完成插入,然后为了避免出现数据重复导致辨别度不高的问题,我通过mysql自带的字符拼接函数CONCAT(爱死这些字符处理函数了),又发现ID不是自增的,这个也比较坑,我又想到了UUID来避免出现重复ID。
我们知道一个故事就是大臣和皇上下棋要赏赐,说第一个棋格子放1个米粒,第二个放2个,第三个再翻倍,最终皇上也无法满足这个大臣的赏赐。我们这里其实也是用到了这个原理,我们通过翻倍表中的数据来轻松实现百万、千万数据的生成,我们先写一个从本表中筛选数据并插入的sql(如下),然后根据自己的需要多次执行来翻倍生成数据
好了,上sql:
INSERT INTO TMD_SEND_LOG //插入表
SELECT
REPLACE(UUID(),'-','') ID , //生成UUID并把'-'字符去掉
CONCAT(BOX,'1'), //将原数据拼接字符来避免辨识度不高,这个多次执行可以随意修改
OPERATION_USER,
CREATE_DATE,
UPDATE_DATE
FROM TMD_SEND_LOG //数据来源表,在这里是本表
WHERE OPERATION_USER = '888123'
LIMIT 100000 //通过LIMIT来限制插入数量,防止数据插入太多,可以控制最终表数据总量
SELECT
ID AS "id",
BOX_CODE AS "boxCode",
SITE AS "site",
FUNCTIONS AS "functions",
SEND_WCS_STATUS AS "sendWcsStatus",
SEND_NUM AS "sendNum",
OPERATION_USER AS "operationUser",
CREATE_DATE AS "createDate",
UPDATE_DATE AS "updateDate"
FROM
LDCS_UNLOAD_SEND_WCS_LOG