mysql中怎么使用循環
delimiter $$ // 定義結束符為 $$ drop procedure if exists wk; // 刪除 已有的 存儲過程 create procedure wk() // 創建新的存儲過程 begin declare i int; // 變量聲明 set i = 1; while i < 11 do // 循環體 insert into user_profile (uid) values (i); set i = i +1; end while; end $$ // 結束定義語句 // 調用 delimiter ; // 先把結束符 回復為; call wk();delimter : mysql 默認的 delimiter是; 告訴mysql解釋器,該段命令是否已經結束了,mysql是否可以執行了。
mysql存儲過程里怎么循環一張表
給你一個 參考,自己套著 試吧--存儲過程名和參數,參數中in表示傳入參數,out標示傳出參數,inout表示傳入傳出參數create procedure p_procedurecode(in sumdate varchar(10)) begin declare v_sql varchar(500); --需要執行的SQL語句 declare sym varchar(6); declare var1 varchar(20); declare var2 varchar(70); declare var3 integer; --定義游標遍歷時,作為判斷是否遍歷完全部記錄的標記 declare no_more_departments integer DEFAULT 0; --定義游標名字為C_RESULT DECLARE C_RESULT CURSOR FOR SELECT barcode,barname,barnum FROM tmp_table; --聲明當游標遍歷完全部記錄后將標志變量置成某個值 DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1; set sym=substring(sumdate,1,6); --截取字符串,并將其賦值給一個遍歷 --連接字符串構成完整SQL語句,動態SQL執行后的結果記錄集,在MySQL中無法獲取,因此需要轉變思路將其放置到一個臨時表中(注意代碼中的寫法)。
一般寫法如下: -- 'Create TEMPORARY Table 表名(Select的查詢語句); set v_sql= concat('Create TEMPORARY Table tmp_table(select aa as aacode,bb as aaname,count(cc) as ccnum from h',sym,' where substring(dd,1,8)=''',sumdate,''' group by aa,bb)'); set @v_sql=v_sql; --注意很重要,將連成成的字符串賦值給一個變量(可以之前沒有定義,但要以@開頭) prepare stmt from @v_sql; --預處理需要執行的動態SQL,其中stmt是一個變量 EXECUTE stmt; --執行SQL語句 deallocate prepare stmt; --釋放掉預處理段 OPEN C_RESULT; --打開之前定義的游標 REPEAT --循環語句的關鍵詞 FETCH C_RESULT INTO VAR1, VAR2, VAR3; --取出每條記錄并賦值給相關變量,注意順序 --執行查詢語句,并將獲得的值付給一個變量 @oldaacode(注意如果以@開頭的變量可以不用通過declare語句事先聲明) select @oldaacode:=vcaaCode from T_sum where vcaaCode=var1 and dtDate=sumdate; if @oldaacode=var1 then --判斷 update T_sum set iNum=var3 where vcaaCode=var1 and dtDate=sumdate; else insert into T_sum(vcaaCode,vcaaName,iNum,dtDate) values(var1,var2,var3,sumdate); end if; UNTIL no_more_departments END REPEAT; --循環語句結束 CLOSE C_RESULT; --關閉游標 DROP TEMPORARY TABLE tmp_table; --刪除臨時表end;。
mysql while循環怎么用的
目前我只測試了 while 循環:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
delimiter $$ // 定義結束符為 $$
drop procedure if exists wk; // 刪除 已有的 存儲過程
create procedure wk() // 創建新的存儲過程
begin
declare i int; // 變量聲明
set i = 1;
while i
在mysql中插入一條記錄100次,如何寫循環語句呢
這個aa就是你insert的id值.這個語句是針對當前線程的,如果別人也insert了內容,互相不會干擾.可以安全的使用你第一次執行insert后,再立刻執行一條“select last_insert_id() as aa"。
1.如果你覺得用,select max(id) from 表名稱,會和別的人產生沖突,你可以select idfrom, 表名稱where ,userid=你的id,order by insertDate desc limit 1。 2.有用戶寫記錄的表,userid這個域是應該有的,插入或者更新時間也是有的,按照時間順序倒排以下即可。
3.如果userid和時間沒有的話,個人覺得這個表的設計就不太。
在mysql中插入一條記錄100次,如何寫循環語句
這個aa就是你insert的id值.這個語句是針對當前線程的,如果別人也insert了內容,互相不會干擾.可以安全的使用你第一次執行insert后,再立刻執行一條“select last_insert_id() as aa"。
1.如果你覺得用,select max(id) from 表名稱,會和別的人產生沖突,你可以select idfrom, 表名稱where ,userid=你的id,order by insertDate desc limit 1。
2.有用戶寫記錄的表,userid這個域是應該有的,插入或者更新時間也是有的,按照時間順序倒排以下即可。
3.如果userid和時間沒有的話,個人覺得這個表的設計就不太。
怎么寫mysql insert into select循環語句
通過一條sql語句實現。具體情形是:有三張表a、b、c,現在需要從表b和表c中分別查幾個字段的值插入到表a中對應的字段。對于這種情況,可以使用如下的語句來實現:
INSERT INTO db1_name(field1,field2) SELECT field1,field2 FROM db2_name
當然,上面的語句比較適合兩個表的數據互插,如果多個表就不適應了。對于多個表,可以先將需要查詢的字段join起來,然后組成一個視圖后再select from就可以了:
INSERT INTO a(field1,field2) SELECT * FROM(SELECT f1,f2 FROM b JOIN c) AS tb
其中f1是表b的字段,f2是表c的字段,通過join查詢就將分別來自表b和表c的字段進行了組合,然后再通過select嵌套查詢插入到表a中,這樣就滿足了這個場景了,如果需要不止2個表,那么可以多個join的形式來組合字段。需要注意的是嵌套查詢部分最后一定要有設置表別名,如下:
SELECT * FROM(SELECT f1,f2 FROM b JOIN c) AS tb
即最后的as tb是必須的(當然tb這個名稱可以隨意取),即指定一個別名,否則在mysql中會報如下錯誤:
ERROR 1248 (42000): Every derived TABLE must have its own alias
即每個派生出來的新表都必須指定別名才可以的。
MySQL 存儲過程 怎么實現 循環sql語句
delimiter $$mysql>mysql> CREATE PROCEDURE myProc() //創建while循環的存儲過程 if分支語句示例-> BEGIN->-> DECLARE i int;-> SET i=1;-> loop1: WHILE i<=10 DO-> IF MOD(i,2)<>0 THEN /*Even number - try again*/-> SELECT CONCAT(i," is an odd number");-> END IF;-> SET i=i+1;-> END WHILE loop1;-> END$$Query OK, 0 rows affected (0.00 sec)這種也可以。
mysql 怎么在mysql里面用循環
有兩種方法,一種方法使用mysql的check table和repair table 的sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數據檢測恢復工具。前者使用起來比較簡便。推薦使用。
1. check table 和 repair table
登陸mysql 終端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出現的結果說Status是OK,則不用修復,如果有Error,可以用:
repair table tabTest;
進行修復,修復之后可以在用check table命令來進行檢查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk適用于MYISAM類型的數據表,而isamchk適用于ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為缺省的數據表類型,這里以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用:
myisamchk *
進行檢測,如果需要修復的話,可以使用:
myisamchk -of *
關于myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL服務器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL服務器Shutdown掉。
另外可以把下面的命令放在你的*里面啟動MySQL服務器前:
[ -x /tmp/* ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/*是MySQL監聽的Sock文件位置,對于使用RPM安裝的用戶應該是/var/lib/mysql/*,對于使用源碼安裝則是/tmp/*可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL數據庫存放的位置。
需要注意的時,如果你打算把這條命令放在你的*里面,必須確認在執行這條指令時MySQL服務器必須沒有啟動!檢測修復所有數據庫(表)