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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
SQL 索引
SQL 语句执行的很慢原因是什么?
SQL 语句执行的很慢原因是什么?
102 0
|
SQL 关系型数据库 MySQL
MySQL查询进阶——从函数到表连接的使用你还记得吗
MySQL查询进阶——从函数到表连接的使用你还记得吗
129 0
|
SQL 存储 缓存
一文读懂MySQL查询语句的执行过程
一文读懂MySQL查询语句的执行过程
329 0
|
SQL 数据库 图形学
SQL语句记了又忘?常用的SQL语句,配语句和图解超详细o
SQL语句记了又忘?常用的SQL语句,配语句和图解超详细o
271 0
|
存储 关系型数据库 MySQL
MySQL存储过程——批量插入数据
MySQL存储过程——批量插入数据
1258 0
MySQL存储过程——批量插入数据
|
SQL 存储 算法
SQL(及存储过程)跑得太慢怎么办?
SQL(及存储过程)跑得太慢怎么办?
110 0
|
SQL Oracle 关系型数据库
DBeaver同时执行多条insert into报错处理
DBeaver同时执行多条insert into报错处理
DBeaver同时执行多条insert into报错处理
|
SQL 关系型数据库 MySQL
MySQL脚本命令数据简单增删改操作教程
MySQL脚本命令数据简单增删改操作教程
187 0
|
SQL 自然语言处理
SQL查询:慎用 IN 和 NOT IN
SQL查询:慎用 IN 和 NOT IN
SQL查询:慎用 IN 和 NOT IN
powerdesigner导出来的sql执行失败
powerdesigner导出来的sql执行失败,这时我们应该如何做?本文带大家一起解决这个问题。
758 0
powerdesigner导出来的sql执行失败