MySQL_MySQL查询截取分析之批量插入数据脚本

1.引入:

   我们在之前的MySQL基础中说过MySQL数据库的函数和存储过程。那么其实俩个都是使用数据库编程语言写的脚本语言。主要是为了解决批量数据的插入。其中,函数有返回值。存储过程没有返回值。

2.数据测试准备

(1).准备创建数据库表SQL

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

(2).查看结果:

3.参数:log_bin_trust_function_creators的设置

(1).该参数的意义:

           当二进制日志启用后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。 如果变量设置为1,MySQL不会对创建存储函数实施这些限制。 此变量也适用于触发器的创建。

           当开启二进制日志后,如果变量log_bin_trust_function_creators为OFF,那么创建或修改存储函数就会报“ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

(2).设置参数

#查看该参数的开启状态
show variables like '%log_bin_trust_function_creators%';
#设置该参数开启
set global log_bin_trust_function_creators = 1;

结果如下:

注意:如果需要永久有效,那么需要在爱配置文件中进行改参数的配置。

4.创建插入数据的函数

(1).查看表以及数据格式内容

(2).创建一个生产随机数据的函数

DELIMITER $$
CREATE FUNCTION rand_string(n int) RETURNS VARCHAR(255)
BEGIN
DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
DECLARE return_str VARCHAR(255) DEFAULT '';
DECLARE i INT DEFAULT 0;
WHILE i < n DO
SET return_str = CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1 + RAND() * 52),1));
set i = i + 1;
END WHILE;
RETURN return_str;
END $$

执行结果如下:

 

5.创建存储过程

编写插入user表数据的存储过程

DELIMITER $$
CREATE PROCEDURE insert_user(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT 0;
#set autocommit = 0,设置自动提交
REPEAT
SET i = i + 1;
INSERT INTO user(username,password) VALUES((START + i),rand_string(6),rand_string(6));
UNTIL i = max_num
END REPEAT;
COMMIT;
END $$

执行结果如下:

6.调用存储过程

#修改结束标志
DELIMITER ;
#调用存储过程
CALL insert_user(100,10);

调用直接插入数据并查看结果:

插入大量数据并查询结果:10万条记录

猜你喜欢

转载自blog.csdn.net/u013185175/article/details/106782540