程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql向表中循環插入數據

Mysql向表中循環插入數據

編輯:MySQL綜合教程

Mysql向表中循環插入數據


今天學習Mysql,做實驗時想向一個標准插入1000行數據,在oracle中類似於這樣

begin
for i in 1..1000 loop
insert ..
end loop;
end;
/

但是Mysql中不支持匿名塊

百度了一下,方法如下:

首先設置delimiter

delimiter的作用:告訴解釋器,這段命令是否已經結束了,mysql是否可以執行了
默認情況下,delimiter是‘;’但是當我們編寫procedure時,如果是默認設置,那麼一遇到‘;’,mysql就要執行,這是我們不希望看到的

所以我們手動設置delimiter為//

delimiter //
create procedure per2() 
begin 
declare num int; 
set num=1; 
while num < 1000 do 
insert into per2(name) values(concat("fan", num)); 
set num=num+1;
end while;
end
 //

其中concat(“fan”, num),相當於oracle中fan||i的拼接效果,但是mysql不支持這樣拼接

之後我們要調用這個procedure,才會插入數據

(mysql@localhost) [fandb]> call per2();
    -> //
Query OK, 1 row affected (0.39 sec)

由於我沒有將delimiter’改回來,所以輸入‘;’後並沒有執行,還需要//

查看庫中的procedure

(mysql@localhost) [fandb]> select name from mysql.proc where db='fandb' and type='procedure';
+------+
| name |
+------+
| per2 |
+------+
1 row in set (0.00 sec)

查看創建代碼

(mysql@localhost) [fandb]> show create procedure per2\G
*************************** 1. row ***************************
           Procedure: per2
            sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER=`mysql`@`localhost` PROCEDURE `per2`()
begin 
declare num int; 
set num=1; 
while num < 1000 do 
insert into per2(name) values(concat("fan", num)); 
set num=num+1;
end while;
end
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

其他使用方法

while ·· end while:

mysql > DELIMITER //
mysql > CREATE PROCEDURE proc4()
-> begin
-> declare var int;
-> set var=0;
-> while var<6 do
-> insert into t values(var);
-> set var=var+1;
-> end while;
-> end;
-> //

? while 條件 do–循環體 endwhile

?repeat ·· end repeat:
它在執行操作後檢查結果,而 while 則是執行前迚行檢查。

mysql > DELIMITER //
mysql > CREATE PROCEDURE proc5 ()
-> begin
-> declare v int;
-> set v=0;
-> repeat
-> insert into t values(v);
-> set v=v+1;
-> until v>=5
-> end repeat;
-> end;
-> //

? repeat–循環體 until 循環條件 endrepeat;

loop ·· endloop:
loop 循環丌需要初始條件,這點和 while 循環相似,同時和 repeat 循環一樣丌需要結束條
件, leave 詫句的意義是離開循環。

mysql > DELIMITER //
mysql > CREATE PROCEDURE proc6 ()
-> begin
-> declare v int;
-> set v=0;
-> LOOP_LABLE:loop
-> insert into t values(v);
-> set v=v+1;
-> if v >=5 then
-> leave LOOP_LABLE;
-> end if;
-> end loop;
-> end;
-> //

LABLES 標號:

標號可以用在 begin repeat while 戒者 loop 詫句前,詫句標號叧能在合法的詫句前面使用。
可以跳出循環,使運行指令達到復合詫句的最後一步。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved