首页 > 数据库 >sql脚本

sql脚本

时间:2024-07-21 21:09:42浏览次数:14  
标签:脚本 varchar DEFAULT age batch sql NULL id



-- 创建临时表记录分批复制的日志
CREATE TABLE temp_copy_log (
    id INT AUTO_INCREMENT PRIMARY KEY,
    batch_start_id INT,
    batch_end_id INT,
    start_time DATETIME,
    end_time DATETIME,
    duration INT,
    records_copied INT
);

CREATE TABLE demo_user (
	id INT NOT NULL,
	name varchar(100) NULL,
	age INT NULL,
	createby varchar(100) NULL,
	createdate TIMESTAMP NULL,
	updateby varchar(100) NULL,
	updatedate TIMESTAMP NULL
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COLLATE=utf8_general_ci;
CREATE INDEX demo_user_age_IDX USING BTREE ON gts_test.demo_user (age);

CREATE TABLE `A` (
  `id` int NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `createby` varchar(100) DEFAULT NULL,
  `createdate` timestamp NULL DEFAULT NULL,
  `updateby` varchar(100) DEFAULT NULL,
  `updatedate` timestamp NULL DEFAULT NULL,
  KEY `demo_user_age_IDX` (`age`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `B` (
  `id` int NOT NULL,
  `username` varchar(100) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `createby` varchar(100) DEFAULT NULL,
  `createdate` timestamp NULL DEFAULT NULL,
  `updateby` varchar(100) DEFAULT NULL,
  `updatedate` timestamp NULL DEFAULT NULL,
  KEY `demo_user_age_IDX` (`age`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `C` (
  `id` int NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `createby` varchar(100) DEFAULT NULL,
  `createdate` timestamp NULL DEFAULT NULL,
  `updateby` varchar(100) DEFAULT NULL,
  `updatedate` timestamp NULL DEFAULT NULL,
  KEY `demo_user_age_IDX` (`age`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


-- 初始化变量
SET @batch_size = 10000; -- 每批次复制的记录数
SET @total_records = 2000000; -- A表中年龄大于18的记录总数
SET @batch_count = CEIL(@total_records / @batch_size); -- 计算需要多少批次
SET @current_batch = 0;
SET @total_copied = 0; -- 记录已复制的记录数

-- 将A表中年龄大于18的数据复制到C表
INSERT INTO C (id, name, age, createby, createdate, updateby, updatedate)
SELECT id, name, age, createby, createdate, updateby, updatedate
FROM A
WHERE age > 18;

-- 循环分批复制数据
WHILE @current_batch < @batch_count DO
    -- 获取当前批次的起始和结束ID
    SET @start_id = @current_batch * @batch_size + 1;
    SET @end_id = IF(@current_batch = @batch_count - 1, @total_records, @start_id + @batch_size - 1);

    -- 检查日志表中是否已经存在相同的id范围
    IF NOT EXISTS (SELECT 1 FROM temp_copy_log WHERE batch_start_id = @start_id AND batch_end_id = @end_id) THEN
        -- 开始复制数据
        START TRANSACTION;
        INSERT INTO B (uasename, age, createby, createdate, updateby, updatedate)
        SELECT name, age, createby, createdate, updateby, updatedate
        FROM C
        WHERE id >= @start_id AND id <= @end_id;
        COMMIT;

        -- 记录当前批次的复制日志
        INSERT INTO temp_copy_log (batch_start_id, batch_end_id, start_time, end_time, duration, records_copied)
        VALUES (@start_id, @end_id, NOW(), NOW(), TIMESTAMPDIFF(SECOND, NOW(), NOW()), @batch_size);

        -- 更新已复制的记录数
        SET @total_copied = @total_copied + @batch_size;
    ELSE
        -- 如果日志已存在,跳过该批次复制
        SELECT 'Skipping batch from ' + CAST(@start_id AS CHAR) + ' to ' + CAST(@end_id AS CHAR) AS message;
    END IF;

    -- 更新批次计数器
    SET @current_batch = @current_batch + 1;
END WHILE;

-- 校验复制总数是否正确,并记录日志
IF @total_copied = @total_records THEN
    SELECT 'All records copied successfully.' AS message;
ELSE
    SELECT 'Error: Total copied records do not match the expected count.' AS message;
END IF;



DELIMITER $$
CREATE PROCEDURE MockData()
BEGIN
  DECLARE i INT DEFAULT 1;
  WHILE i <= 200000 DO
    INSERT INTO A (id, name, age, createby, createdate, updateby, updatedate)
    VALUES (i, CONCAT('Name', i), FLOOR(RAND() * 100), CONCAT('User', i), NOW(), CONCAT('User', i), NOW());
    SET i = i + 1;
  END WHILE;
END$$
DELIMITER ;

CALL MockData();


DELIMITER $$
CREATE PROCEDURE MockData()
BEGIN
  DECLARE i INT DEFAULT 1;
  WHILE i <= 200000 DO
    INSERT INTO A (id, name, age, createby, createdate, updateby, updatedate)
    VALUES (i, CONCAT('Name', i), FLOOR(RAND() * 100), CONCAT('User', i), NOW(), CONCAT('User', i), NOW());
    SET i = i + 1;
  END WHILE;
END$$
DELIMITER ;

CALL MockData();


DELIMITER $$

CREATE PROCEDURE InsertData()
BEGIN
  DECLARE i INT DEFAULT 1;

  WHILE i <= 200000 DO
    INSERT INTO A (id, name, age, createby, createdate, updatedate)
    VALUES (i, CONCAT('Name', i), FLOOR(RAND() * 100), 'User', NOW(), NOW());
    SET i = i + 1;
  END WHILE;
END$$

DELIMITER ;

CALL InsertData();

DELIMITER $$

CREATE PROCEDURE InsertData()
BEGIN
  DECLARE i INT DEFAULT 1;

  WHILE i <= 200000 DO
    INSERT INTO A (id, name, age, createby, createdate, updatedate)
    VALUES (i, CONCAT('Name', i), FLOOR(RAND() * 100), 'User', NOW(), NOW());
    SET i = i + 1;
  END WHILE;
END$$

DELIMITER ;

CALL InsertData();

标签:脚本,varchar,DEFAULT,age,batch,sql,NULL,id
From: https://www.cnblogs.com/youkiko/p/18314945

相关文章

  • SQL server基于报错的注入(使用sqlmap进行get shell)
    SQLserver基于报错的注入1.访问MSSQLSQLiLabs网站点击按钮,我们使用GET请求上传参数“id”,当id=1时,页面显示id=1的用户名Dump、密码Dump:2.寻找注入点http://[靶机IP]/less-1.asp?id=1'运行后报错,说明我们可以利用参数“id”作为我们的注入点,根据回显我们可以判断这是字......
  • MySQL入门学习-SQL高级技巧.透视表
        在MySQL中,虽然没有直接提供像Excel中那样的透视表功能,但可以通过一些技巧来实现类似的效果。通常,我们可以使用聚合函数和'GROUPBY' 子句来创建数据的透视表。一、透视表的概念:    透视表是一种数据汇总和分析的工具,它可以将数据按照不同的维度进行......
  • MySQL入门学习-SQL高级技巧.Window Function
        在MySQL中,窗口函数(WindowFunction)是一种强大的分析工具,它可以在查询结果的基础上进行更复杂的计算和分析。一、窗口函数的概念:    窗口函数可以对查询结果的每一行数据,根据指定的分区(Partition)和排序规则(Order)进行计算。它可以在同一查询中同时返回基础......
  • 【QT开发】数据库连接管理QSqlDatabase类详解及实战应用
    QSqlDatabase是Qt提供的一个功能强大且灵活的数据库连接管理类,通过本篇文章的学习,你应该对QSqlDatabase有了全面的理解,能够在自己的项目中正确使用它。QSqlDatabase在用户......
  • MySQL执行状态查看与分析
     当mysql出现性能问题时,一般会查看mysql的执行状态,执行命令:showprocesslist各列的含义列名含义id一个标识,你要kill一个语句的时候使用,例如 mysql>kill207user显示当前用户,如果不是root,这个命令就只显示你权限范围内的sql语句host显示这个语句是从哪个ip的哪个端口上......
  • NSSCTF———Web(sql注入)
    [LitCTF2023]这是什么?SQL!注一下![SWPUCTF2022新生赛]ez_sql[GXYCTF2019]BabySqli                                     点击右下角文章可跳转[LitCTF2023]这是什么?SQL!注一下!首先我们打开......
  • 掌控数据库:在 PHPStudy 中玩转 MySQL 命令行的终极指南
    文章目录引言1.PHPStudy简介理解数据库,表,字段的模型2.打开MySQL命令行2.1启动PHPStudy2.2启动MySQL服务2.3打开命令行2.4登录MySQL3.MySQL基本命令3.1查看(进去)数据库3.2创建数据库3.3使用数据库3.4创建数据表3.5插入数据3.6查询数据(查表)3.7更新数据3.8......
  • 关于mysql架构的思考
    MySQLMySQL的逻辑架构主要可以分成哪几个部分?每部分的主要职责是什么?MySQL的逻辑架构主要可以分成三个主要部分:连接层、服务层和引擎层。每个部分都有其特定的职责和功能,以确保MySQL数据库系统的高效运行。1.连接层主要职责:负责与客户端建立连接和通信。当客户端发起......
  • 免费分享一套SpringBoot+Vue高校心理咨询(心理教育辅导)系统【论文+源码+SQL脚本】,帅
    ​大家好,我是java1234_小锋老师,看到一个不错的SpringBoot+Vue高校心理咨询(心理教育辅导)系统,分享下哈。​项目视频演示【免费】SpringBoot+Vue高校心理咨询(心理教育辅导)系统Java毕业设计_哔哩哔哩_bilibili项目介绍随着Internet技术的发展,心理教育辅导系统应运而生,心......
  • sql修炼笔记——基础操作指南篇
    基础操作指南1.新建数据库createdatabase·名称·(使用的是反引号,后者皆同)2.展示,showdatabases展示全部数据表3.数据类型INT --整数decimal(m,n)--有小数点的数如decimal(3,2)共三位数小数点占两位,如2.33varchar(n)最多存放n个字符blobBinarylargeobject图片影片档......