日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
MySQL數(shù)據(jù)庫中正確執(zhí)行批量更新計數(shù)器

以下的文章主要向大家描述的是MySQL數(shù)據(jù)庫中執(zhí)行批量更新計數(shù)器的實際操作步驟 ,假設(shè)我們的MySQL數(shù)據(jù)庫有一個計數(shù)器,此計數(shù)器需要我們對其重新統(tǒng)計,那么我們應(yīng)如何對其進(jìn)行設(shè)置呢?

創(chuàng)新互聯(lián)長期為上千多家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為江干企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都網(wǎng)站制作,江干網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

應(yīng)用場景,比如說有一個商場,每賣一個產(chǎn)品都產(chǎn)生一個流水,然后我們需要知道每筆流水是該產(chǎn)品第幾次出售的,這樣說可能不明白,我拿一個詳細(xì)的數(shù)據(jù)舉例吧。

 
 
 
  1. recordID,productID,productType,sellDate,counter  
  2. 1, 1, 1, '2010-1-15 15:20:10' 0  
  3. 2, 1, 2, '2010-1-15 15:20:10' 1  
  4. 3, 2, 1, '2010-1-15 15:20:10' 0  
  5. 4, 2, 1, '2010-1-15 15:20:10' 1 

上面這個數(shù)據(jù)是一些撒氣數(shù)據(jù),包括記錄的流水號,產(chǎn)品的編號,產(chǎn)品的類型,銷售的時間,計數(shù)器。一般來說,計數(shù)器我們首先我會想到自增,但這而肯定是不可能使用自增長的。

我最初的時候,嘗使用這樣的代碼:

 
 
 
  1. update t_product set t_counter = (select max(counter)   
  2. from t_product where productid = 1 and productType = 1) + 1   
  3. where where productid = 1 and productType = 1 

但是MySQL報錯,上網(wǎng)一查,MySQL數(shù)據(jù)庫不支持這種寫法,呵呵,我對MySQL完全不熟悉。記得以前在sql server用過游標(biāo),然后也試試查找游標(biāo),經(jīng)過n次google與百度,最終搞定這個難題。

我本身對MySQL完全是個外行,就連注釋也不知道怎么注釋的,現(xiàn)在終于知道有三種寫法的,而--的注釋后面是要空一格的,所以代碼寫得性能什么的就不敢說了,只是實現(xiàn)了這個功能,希望對有同樣需求的朋友有用。

呵,還學(xué)到一點,declare只能寫在最前面。

看最終的代碼:

 
 
 
  1. CREATE PROCEDURE p_resetCounter ()  
  2. BEGIN  
  3. DECLARE productID INT;  
  4. DECLARE type INT;  
  5. DECLARE tmpCount INT;  
  6. DECLARE stopFlag int; 

使用游標(biāo)

 
 
 
  1. DECLARE cur cursor for SELECT COUNT(*), productID, productType FROM  
  2. t_product GROUP BY productID, productType;  
  3. DECLARE CONTINUE HANDLER FOR NOT FOUND set stopFlag=1; 

 如果找不到記錄,則設(shè)置stopFlag=1

定義變量及創(chuàng)建臨時表

 
 
 
  1. CREATE TEMPORARY TABLE tmp_Counter(  
  2. recordID int not null,  
  3. Counter int not null  
  4. )TYPE = HEAP; 

打開游標(biāo)

 
 
 
  1. open cur;  
  2. REPEAT  
  3. fetch cur into tmpCount, productID, type;  
  4. SET @id = -1;  
  5. INSERT INTO tmp_Counter   
  6. (SELECT recordID, (@id := @id + 1) counter   
  7. from t_product WHERE productIDproductID = productID AND productType = type)  
  8. ORDER BY ts_Date ASC;  
  9. UNTIL stopFlag = 1 
  10. END REPEAT;  
  11. close cur; 

 關(guān)閉游標(biāo)

 
 
 
  1. UPDATE t_product, tmp_Counter SET counter = tmp_Counter.Counter   
  2. WHERE recordID = tmp_Counter.recordID;  
  3. -- SELECT * FROM tmp_Counter;  
  4. DROP TABLE tmp_Counter; 

刪除臨時表

 
 
 
  1. END; 

以上的相關(guān)內(nèi)容就是對MySQL數(shù)據(jù)庫中如何批量更新計數(shù)器的介紹,望你能有所收獲。

【編輯推薦】

  1. MySQL數(shù)據(jù)庫到5.1 centos5.3
  2. 把Access的數(shù)據(jù)導(dǎo)入MySQL數(shù)據(jù)庫中的2種方法
  3. PHP存取MySQL 數(shù)據(jù)亂碼的破解
  4. MySQL數(shù)據(jù)庫文件壞掉的解決
  5. 用MySQL語句來對后門木馬進(jìn)行生成的操作步驟

新聞名稱:MySQL數(shù)據(jù)庫中正確執(zhí)行批量更新計數(shù)器
瀏覽路徑:http://www.dlmjj.cn/article/djjepip.html