CREATE PROCEDURE init_reportUrl()
創(chuàng)新互聯(lián)公司是一家專業(yè)提供前鋒企業(yè)網站建設,專注與成都網站設計、網站建設、HTML5建站、小程序制作等業(yè)務。10年已為前鋒眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進行中。
BEGIN
DECLARE s INT DEFAULT 0;
DECLARE r_id bigint(10);
DECLARE report CURSOR FOR select distinct id as r_id FROM ReportHotLine ;
-- 聲明當游標遍歷完后將標志變量置成某個值
DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
-- 打開游標
open report;
-- 將游標中的值賦值給變量,注意:變量名不要和返回的列名同名,變量順序要和sql結果列的順序一致
fetch report into r_id;
-- 當s不等于1,也就是未遍歷完時,會一直循環(huán)
while s1 do
-- 執(zhí)行業(yè)務邏輯
UPDATE wh_csyx . dy_pres30207800013_001_local a
JOIN ReportHotLine b ON a.gdId = b.ID
AND b.createtime = ( SELECT max( createtime ) FROM ReportHotLine WHERE ID = r_id )
SET blms = b.banliInfo where a.gdId =r_id;
-- 將游標中的值再賦值給變量,供下次循環(huán)使用
fetch report into r_id;
-- 當s等于1時表明遍歷以完成,退出循環(huán)
end while;
-- 關閉游標
close report;
END;
call init_reportUrl();
mysql沒有遞增id,可以按照下面做。數據表的id都是設置成auto_increment的,當插入一條記錄后,可以使用下面的命令來獲取最新插入記錄的id值selectlast_insert_id。
如果我們有一個包含一億條數據的表需要取出所以數據,如何通過sql取出。我們能想到有四種方式,但是性能效率會有差別,我們此時進行一下分析,判斷該如何選擇并實踐一下查詢分析。
首先我們發(fā)現上面type有range和index區(qū)分,key都是primary,rows也有分別,那么我們就來直接看下這幾種字段的含義。
我們從上面可以看出在大量遍歷查詢數據的過程中我們應該優(yōu)先考慮between-and,idnumber模式,這樣的查詢效率會更好一些。
MySql數據庫中存在大量的表結構,而且這些表都存在一個共同點,就是表中都有相同字段,比如id,name,city,adress,lat,lng。表中字段id,name,city,adress不允許為空,所以表中這幾個字段的數據都是已經賦給實值的,而lat與lng(經緯度)是為空的。
現在要寫一個程序,根據city,adress請求獲取數據,把循環(huán)每一表中根據city,adress請求獲取的數據更新到相應表,相應表中對應的那一行數據。這句話,可能你有點暈,說白了就是,先循環(huán)查詢遍歷表中city與adress的值,根據city,adress的值請求獲取數據,更新到相應行中,這個表循環(huán)更新完了就跳到下個表中再循環(huán)更新,以此類推,直到全部更新。