儲存過程迴圈插入資料和duplicate的使用

2022-06-27 20:24:14 字數 1752 閱讀 7452

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 取迴圈次數...