學(xué)習(xí)過程中需要創(chuàng)建一張含有批量數(shù)據(jù)的測試表捞高,可以使用高級語言插入谬盐,但感覺比較麻煩甸私,搜了搜可以采用SQL函數(shù),直接在命令行頁面批量插入飞傀。
- 數(shù)據(jù)庫名為studytest皇型,表名為student:
CREATE 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函數(shù):
-- 定義分界符
DELIMITER $$
CREATE PROCEDURE insert_student(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT START;
-- 關(guān)閉自動提交
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 $$
- 調(diào)用該函數(shù):
-- 先把分隔符換回來诬烹,方便操作。不換回來也行弃鸦,就是以后的绞吁;都要寫成 $$
DELIMITER ; $$
CALL insert_student(0,100000);
- 恢復(fù)自動提交:
MySQL默認開啟自動提交。除非顯式地開始一個事務(wù)唬格,否則每個查詢都被當(dāng)做一個單獨的事務(wù)自動執(zhí)行家破。
SET autocommit=1;
查看autocommit狀態(tài):
命令:show variables like 'autocommit';
PS:也可以直接利用SQL工具,如Navicat創(chuàng)建函數(shù)购岗,完成批量插入员舵。詳見:mysql使用函數(shù)批量插入數(shù)據(jù)
-
完成后的student表:
參考博客:
mysql使用存儲過程&函數(shù)實現(xiàn)批量插入
MySQL用存儲過程與函數(shù)批量插入數(shù)據(jù)
MySQL事務(wù)autocommit自動提交