千言萬語也比不上一個簡單直接明了的小例子:
CREATE PROCEDURE pro_users() begin DECLARE myid int; DECLARE no int; DECLARE mysellerid char(10); DECLARE mylink char(50); DECLARE myip char(50); DECLARE mycursor CURSOR FOR select id from table1; #把select出來的數據全部保存到游標mycursor中 DECLARE CONTINUE HANDLER FOR NOT FOUND SET no=1; #當讀到數據的最后一條時,設置no變量為1 SET no=0; #初始化變量no為0 OPEN mycursor; #打開游標 while no=0 do #判斷是不是到了最后一條數據 fetch mycursor into myid; #讀取游標中的數據一一復給變量myid。 select sellerid,link,ip into mysellerid,mylink,myip from table2 order by RAND() LIMIT 1; update table1 set wangba_uid = ceil(rand()*500), wangba_sellerid = mysellerid, wangba_link = mylink, wangba_ip = myip where id = myid; end while; close mycursor;#最后關閉游標.游標里面存放了那么多數據總是要清理掉的吧。 end
注意了:這些聲明語法必須寫在存儲過程里面才生效,否則navicat就提示語法錯誤。
完了執行一下:
call pro_users()
與sql不同,mysql執行存儲過程使用call命令。
刪除存儲過程:
drop PROCEDURE pro_users
刪除存儲過程,mysql和sql一樣都用drop。
其他:
select sellerid,link,ip into mysellerid,mylink,myip from table2 order by RAND() LIMIT 1;
mysql使用select into的形式給變量賦值,RAND()隨機記錄,LIMIT 1代替TOP 1
這句話在sql里面的寫法:
select top 1 mysellerid=sellerid,mylink=link,myip=ip from table2 order by newid();