Mysql批量插入数据(存储过程)
有个需求:需要在table1中插入205条数据,role_id固定为65,menu_id从91开始
方法一:存储过程
1、什么是存储过程?
MySQL 存储过程(Stored Procedure)是一组为了完成特定功能的 SQL 语句集合。用户通过指定的存储过程名称和参数(如果有的话)来调用并执行它。存储过程可以在程序中被多次调用,并且可以接受参数、返回数据、对数据进行复杂的计算和转换等。
2、存储过程的特点?
1、代码复用:存储过程可以在不同的地方被多次调用,通过定义一次存储过程,可以减少代码的重复性,提高开发效率。这种特性使得存储过程在数据库编程中成为了一种重要的代码复用工具。
2、安全性提升:存储过程可以对数据进行有效的安全验证和权限控制,只有被授权的用户才能执行存储过程中的操作。这在一定程度上增强了数据库的安全性,降低了数据泄露或被非法访问的风险。
3、性能优化:存储过程在数据库服务器上执行,可以减少网络传输量,提高数据库的执行效率。这是因为存储过程在首次执行时会被编译并存储在数据库中,后续调用时可以直接执行而无需再次编译,从而减少了网4、络传输的开销和数据库的响应时间。
5、事务控制:存储过程可以将一系列SQL语句包裹在一个事务中,实现原子性操作,确保数据的一致性。这种特性使得存储过程在处理复杂的数据库操作时更加可靠和稳定。
6、增强SQL语言的功能和灵活性:存储过程可以使用流控语句(如if/else、case、while等)编写,具有强大的灵活性和可扩展性。通过编写存储过程,可以实现复杂的逻辑功能和数据处理操作,从而增强SQL语言的功能和灵活性。
7、提高SQL的复用性和标准:由于存储过程可以被多次调用和共享,因此它可以提高SQL代码的复用性和标准化程度。这有助于减少代码冗余和提高代码质量。
8、模块化、封装和代码复用:存储过程具有函数的普遍特性,如模块化、封装和代码复用等。这使得存储过程可以作为一个独立的模块进行开发和维护,提高了代码的可读性和可维护性
3、存储过程格式
delimiter 自定义结束符号 create procedure 储存名(IN IN_NAME VARCHAR(255)) begin sql语句 end 自定义的结束符合 delimiter ;
注意:
DELIMITER
用于更改标准分隔符,以便可以在存储过程中使用BEGIN
和END
语句。在存储过程定义结束后,再将其改回原来的值(通常是分号;
)。IN_NAME
是一个输入参数,其数据类型为VARCHAR(255)
。也可以不带参数
实现方法:
-- 存储过程批量插入数据--执行SQL脚本 DELIMITER // CREATE PROCEDURE PrintNumbers() BEGIN DECLARE v_counter INT DEFAULT 1; WHILE v_counter <= 200 DO INSERT INTO table1(role_id, menu_id) VALUES ('65', '91'+v_counter); SET v_counter = v_counter + 1; END WHILE; END // DELIMITER ; -- 调用存储过程 --执行SQL语句 CALL PrintNumbers(); -- 查询存储过程--执行SQL语句 SELECT * FROM information_schema.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' and SPECIFIC_NAME ='PrintNumbers'; -- 删除存储过程--执行SQL语句 DROP PROCEDURE IF EXISTS PrintNumbers;
结果: