学习过程中需要创建一张含有批量数据的测试表,可以使用高级语言插入,但感觉比较麻烦,搜了搜可以采用SQL函数,直接在命令行页面批量插入。
- 数据库名为studytest,表名为student:
1
2
3
4
5
6
7
8
9
10CREATE DATABASE studytest;
use studytest;
CREATE TABLE `student` (
`s_id` int(11) NOT NULL AUTO_INCREMENT,
`s_name` varchar(100) DEFAULT NULL,
`s_age` int(11) DEFAULT NULL,
`s_phone` varchar(30) DEFAULT NULL,
PRIMARY KEY (`s_id`),
KEY `s_name` (`s_name`)
) ENGINE=InnoDB, CHARSET=utf8; - SQL函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14-- 定义分界符
DELIMITER $$
CREATE PROCEDURE insert_student(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT START;
-- 关闭自动提交
SET autocommit=0;
REPEAT
SET i=i+1;
INSERT INTO student (s_id,s_name,s_age,s_phone) VALUES (i,CONCAT('name_',i),MOD(i,70),CONCAT('phone_',i));
UNTIL i=max_num
END REPEAT;
COMMIT;
END $$ - 调用该函数:
1
2
3-- 先把分隔符换回来,方便操作。不换回来也行,就是以后的;都要写成 $$
DELIMITER ; $$
CALL insert_student(0,100000); 恢复自动提交:
MySQL默认开启自动提交。除非显式地开始一个事务,否则每个查询都被当做一个单独的事务自动执行。1
SET autocommit=1;
查看autocommit状态:
命令:show variables like ‘autocommit’;
结果:PS:也可以直接利用SQL工具,如Navicat创建函数,完成批量插入。详见:mysql使用函数批量插入数据
完成后的student表:
参考博客:
mysql使用存储过程&函数实现批量插入
MySQL用存储过程与函数批量插入数据
MySQL事务autocommit自动提交