sql語句迴圈插入資料
一、有時為了測試介面需要手動插入很多測試資料,為了節省時間避免做更多複雜無味的ob操作,寫乙個儲存過程來批量插入多條資料;
# 刪除test表結果:drop table if exists test;
# 建立test表
create table `test` (
`id` varchar (255) not null,
`filename` varchar (255) default null,
`downloadcount` int (11) default null,
primary key (`id`),
key `idx_key` (
`id`,
`filename`,
`downloadcount`
) using btree
) engine = innodb default charset = utf8;
# 刪除dowhile儲存過程
drop procedure dowhile;
# 建立dowhile儲存過程
create procedure dowhile ()
begin
declare i int;
set i = 1;
start transaction;
while i < 11 do
insert into test (
`id`,
`filename`,
`downloadcount`
)values
( concat(i),
concat('檔案', '_', i),
1 );
set i = i + 1;
endwhile;
commit;
end;
# 檢視test表的所有儲存過程
show procedure status where db = 'test';
# 檢視test表的全部儲存過程
select *from mysql.proc;
# 執行dowhile儲存過程
call dowhile ();
有則更新,無則新增
二、insert ... on duplicate key update ... 批量插入與更新(存在則更新,不存在則插入)
insert into test (結果:`id`,
`filename`,
`downloadcount`
)values
('11', '我的檔案', 1) on duplicate key update downloadcount = downloadcount + 1;
另外,如果執行時含duplicate的sql報錯,請參考:
# 1024*1024代表1m, set global max_allowed_packet = 2*1024*1024*10;show variables like '%max_allowed_packet%';
MySQL 利用儲存過程while迴圈插入資料
個人學習的時候通常需要創造一些測試資料,一般是利用儲存過程。例如向test表中插入大量資料 create table test id int 11 not null auto increment,name varchar 10 default null,primary key id 定義語句結束符為...
mysql 儲存過程按日期迴圈插入
參考部落格 定義與使用變數時需要注意以下幾點 1 declare語句必須用在degin end語句塊中,並且必須出現在degin end語句塊的最前面,即出現在其他語句之前。2 declare定義的變數的作用範圍僅限於declare語句所在的degin end塊內及巢狀在該塊內的其他degin en...
Oracle迴圈插入儲存過程轉Mysql經驗積累
oracle迴圈插入儲存過程 oracle的入參可自定義object types 為陣列型別 create or replace procedure test pro newarray in msg array asdatacount number 10 newarray.count 2 取迴圈次數...