前言
面試題:如何造10w條測試數據,如何在數據庫插入10w條數據,數據不重復?
想面試高級測試、高級自動化測試、測試開發崗位,面試時候考察 SQL 就不是簡單的增刪改查的,必然會問到存儲過程。
一問到存儲過程基本上是送命題了,本篇講解下如何使用存儲過程在 mysql 數據庫快速造大量測試數據。
存儲過程基本語法
MySQL 5.0 版本開始支持存儲過程。存儲過程(Stored Procedure)是一種在數據庫中存儲復雜程序,以便外部程序調用的一種數據庫對象。
存儲過程是為了完成特定功能的SQL語句集,經編譯創建並保存在數據庫中,用戶可通過指定存儲過程的名字並給定參數(需要時)來調用執行。
存儲過程思想上很簡單,就是數據庫 SQL 語言層面的代碼封裝與重用。
創建存儲過程語法
create procedure 存儲過程名(參數)
存儲過程開始和結束符號:
begin
....
end
定義變量,如定義一個int類型變量,variable是變量的名稱,自己定義
declare variable int
其它數據類型,如
DECLARE a_int int unsigned default 10086;
DECLARE a_numeric number(8,2) DEFAULT 1.23;
DECLARE a_date date DEFAULT '2020-06-15';
DECLARE a_datetime datetime DEFAULT '2020-06-15 23:59:59';
DECLARE a_varchar varchar(255) DEFAULT 'This will not be padded';
變量賦值,變量定義后給變量一個初始值,如設置 variable = 1
SET 變量名 = 表達式值 [,variable_name = expression ...]
**循環, 批量插入數據需用到循環:while ···· end while **
while 條件 do
--循環體
endwhile
執行存儲過程
call 存儲過程名(參數);
使用存儲過程造數據
我們需要插入的sql,如果id的是是變化的,那么把id設置一個變量
INSERT INTO `apps`.`apiapp_card` (`id`, `card_id`, `card_user`, `add_time`) VALUES ('1', '', 'test123', '2019-12-17');
存儲過程代碼如下
-- 上海-悠悠
DROP PROCEDURE IF EXISTS create_user_tel;
create procedure create_user_tel()
begin
declare id int;
set id=100000;
while id <=199999
do
INSERT INTO `apps`.`apiapp_card` VALUES(id, '', 'test123', '2019-12-17');
set id=id+1;
end while;
end;
-- 執行存儲過程
call create_user_tel();
使用call 執行存儲過程名稱
如果執行存儲過程提示:PROCEDURE create_user_tel already exists
解決辦法先刪除名稱,在第一行加一句: DROP PROCEDURE IF EXISTS create_user_tel;
全部數據執行完成,大概需要十分鍾,查詢結果
SELECT COUNT(*) from apiapp_card