批量插入数据脚本|学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 快速学习批量插入数据脚本

开发者学堂课程【MySQL 高级应用 - 索引和锁批量插入数据脚本】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/598/detail/8627


批量插入数据脚本


前言:如果要往表里插入1000w 数据,该怎么办


一、复习

复习上课的内容:

函数和存储过程是用 SQL 脚本语言写的数据库编程。

功能:一批次数据的插入。

函数和存储过程的区别:函数有返回值,存储过程没有返回值。

关键词:建表 create table ,建索引 create index ,建函数 create function ,建视图 create view


二、批量插入数据脚本

1.建表

如果愿意单独建一个大数据的 bigData 可以执行下面代码。

#新建库

create database bigData:

use bigData; I

如果不愿意可以忽略上面代码,直接操作下面代码

#1建表 dept

//构建部门表

CREATE TABLE dept(

id INT UNSIGNED PRIMARY KEY AUTO INCREMENT

deptno MEDIUMINT UNSIGNED NOT NULL DEFAULTO

dnameVARCHAR(20)NOT NULL DEFAULT"",

loc VARCHAR(13)NOT NULL DEFAULT"

)ENGINE=INNODBDEFAULTCHARSET=GBK:

image.png

#2建表 emp

//构建员工表

CREATE TABLE emp

id INT UNSIGNED PRIMARY KEY AUTO INCREMENT

empno MEDIUMINT UNSIGNED NOTNULL DEFAULTO/*编号*/ ename VARCHAR(20)NOT NULL DEFAULT"/*名字*/ job VARCHAR(9) NOT NULL DEFAULT"",/*工作*/

mgr MEDIUMINT UNSIGNED NOT NULL DEFAULTO/*上级编号*/ hiredate DATE NOT NULL,/*入职时间*/ sal DECIMAL(72)NOT NULL,1*薪水*/ commDECIMAL(72)NOT NULL./*红利*1

deptno MEDIUMINT UNSIGNED NOT NUL DEFAULTO/部门编号*1)ENGINE=INNODB DEFAULT CHARSET=GBK;

image.png

2.  设置参数

做大数据插入的时候 mysqld 会报错,需要设置参数二进制日志开启模块设置

log_bin_trust_function_creators

创建函数,假如报错:

This function has none of DETERMINISTIC....

#由于开启过慢查询日志,因为我们开启了 bin-log 我们就必须为我们的 function 指定一个参数。

show variables like 'log bin trust function creators'

set global log bin trust function_creators=1;

image.png

#这样添加了参数以后,如果 mysql 重启,上述参数又会消失,永久方法:

windows 下:

myinilmysqldl加上logbintrust function creators=1

linux 下:

/etc/mycnf下mycnf[mysqld]加上logbin trust function creators=1

3.   创建函数保证每条数据都不同

由于 MySQL 的本身没有随机产生字符串和随机产生部门编号

的函数,需要自己创建。

1.随机产生字符串

DELIMITER $$

CREATE FUNCTION rand string(n INT) RETURNS VARCHAR (255)

BEGIN

DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopgrstuvwxy zABCDEFJHIJKLMNOPQRSTUVWXYZ'

DECLARE return str VARCHAR (255) DEFAULT

DECLARE 1 INT DEFAULT 0;

E WHILE i< n Do

RETURN return stri

SET return_str =CONCAT(return_str, SUBSTRING(chars_str,

FLOOR(1+RAND( *52),1));

SET i=i+i;

END WHILE;

RETURN return stri

END SS

image.png

2.随机产生部门编号

BEGIN

DECLARE i INT DEFAULT 0;

SET i = FLOOR(100+RAND(*10)

RETURN i;

END SS

image.png

4.创建存储过程

1.创建往 emp 表中插入数据的存储过程

DELIMITER $$

CREATE PROCEDURE insert_emp(IN START INT (10), IN max_num INT (10))

BEGIN

DECLARE i INT DEFAULT O;

set autocommit=0

autocommit 设置成0

SET autocommit =0;

REPEAT

SET i=i+1;

INSERT INTO emp (empno, ename ,job ,mgr ,hiredate,sal ,comm

,deptno) VALUES((START+i), rand string(6),'SALESMAN,0001, CURD

UNTIL i= max_num

END REPEAT:

COMMIT

END $$

image.png

2.创建往 dept 表中插入数据的存储过程

DELIMITER $$

CREATE PROCEDURE insert dept(IN START INT (10),IN max_num INT(10))

BEGIN

DECLARE i INT DEFAULT O;

SET autocommit =0;

REPEAT

SET i=i+1;

INSERT INTo dept (deptno dname, loc VALUES ((START+), rand string(10), rand string(8));

UNTIL i= max_nun

END REPEAT;

COMMIT

END $$

image.png

5.调用存储过程

1.dept

DELIMITER:

CALL insert_dept(100,10);

image.png

2.emp

执行存储过程,往 emp 表添加50万条数据

DELIMITER;

CALL insert_emp(100001,500000);

mysq1 >DEL IMITER SS

mysq1> CREATE PROCEDURE insert_dept(IN START INT(10)IN max num INT(10))

BEGIN

DECLARE i INT DEFAULT 0:

SET autocommit=0;

REPEAT

SET i=i+l;

INSERT INTO dept(deptno ,dname,loc)VALUES((START+i),rand _string(10),rand_string(8));

UNTIL i=max_num

END REPEAT;

COMMIT;

END SS

Query OK,0 rows affected(0.00 sec)

mysq1> DELIMITER ;

mysq1> CALL insert emp(100001500000):

Query OK,0 rows affected,1 warning(1 min 14.62 sec)

image.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
SQL 关系型数据库 数据库
Python执行PostgreSQL数据库查询语句,并打印查询结果
本文介绍了如何使用Python连接和查询PostgreSQL数据库。首先,确保安装了`psycopg2`库,然后创建数据库连接函数。接着,展示如何编写SQL查询并执行,例如从`employees`表中选取所有记录。此外,还讨论了处理查询结果、格式化输出和异常处理的方法。最后,提到了参数化查询和事务处理以增强安全性及确保数据一致性。
Python执行PostgreSQL数据库查询语句,并打印查询结果
|
5月前
|
SQL 前端开发 关系型数据库
零基础学习数据库SQL语句之查询表中数据的DQL语句
零基础学习数据库SQL语句之查询表中数据的DQL语句
36 0
|
6月前
|
SQL 数据库 HIVE
Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
【4月更文挑战第8天】Hive【基础知识 05】常用DDL操作(数据库操作+创建表+修改表+清空删除表+其他命令)
96 0
|
SQL Oracle 关系型数据库
DBeaver同时执行多条insert into报错处理
DBeaver同时执行多条insert into报错处理
DBeaver同时执行多条insert into报错处理
|
SQL 关系型数据库 MySQL
MySQL脚本命令数据简单增删改操作教程
MySQL脚本命令数据简单增删改操作教程
175 0
|
SQL 自然语言处理
SQL查询:慎用 IN 和 NOT IN
SQL查询:慎用 IN 和 NOT IN
SQL查询:慎用 IN 和 NOT IN
|
SQL 数据库
INSERT 插入语句 零基础自学SQL课程系列Day8
今天是SQL教程的第八课。 这节课讲讲 INSERT插入语句,用来像数据库中添加数据。 基本语法:
150 0
INSERT 插入语句 零基础自学SQL课程系列Day8
|
SQL 数据库
UPDATE 更新语句 零基础自学SQL课程系列Day9
今天是SQL课程的第九课。 讲讲UPDATE 更新语句,用来修改表中的一条或多条记录。 基本语法
185 0
UPDATE 更新语句 零基础自学SQL课程系列Day9
|
SQL 数据库 Python
零基础自学SQL课程 | DELETE 删除语句
今天是SQL课程的第十课。 讲讲DELETE 删除语句,用来删除表中的一条或多条记录。 基本语法:
178 0
零基础自学SQL课程 | DELETE 删除语句
|
SQL 关系型数据库 MySQL
Python编程:peewee执行多条原生sql语句
Python编程:peewee执行多条原生sql语句
563 0