關於mysql預存程序建立動態表名及參數處理

來源:互聯網
上載者:User

標籤:ace   set   進階   rda   sql語句   creat   date()   預存程序   now()   

 轉載請註明出處:簾卷西風的專欄(http://blog.csdn.net/ljxfblog) 

近期遊戲開始第二次內測,開始處理動作記錄。最開始把日誌放到同一個表裡面,發現一天時間,平均100玩家線上。操作記錄就超過13萬條,決定拆表。依照日期來儲存日誌。每天的日誌存到一個表裡面,然後定期把老的資料匯出來備份後刪掉。

詳細思路是寫日誌的時候,依據當前的時間決定插入到當天的表裡面。如表不存在則建立一個新的表。表名裡面帶上當天的日期。這就涉及到須要在預存程序裡面動態建立一個跟日期相關的表。mysql不是非常熟悉,僅僅會主要的文法,這樣的進階功能都須要上網查詢,呵呵。

最開始的想法。是想定義一個字串變數,把表名拼好後來建立表,發現建立的表名是定義的變數名,僅僅好又一次想辦法。

經過查資料,並實驗了非常多次,最後找到了實現的方法,須要先將sql語句拼出來。然後在使用PREPARE來處理就能夠了。sql語句例如以下:

set @sql_create_table = concat(‘CREATE TABLE IF NOT EXISTS operrecord_‘, date_format(curdate(),‘%y%m%d‘),"(`oper_id` int(10) NOT NULL AUTO_INCREMENT,`oper_role` int(11) NOT NULL, `oper_type` varchar(30) NOT NULL DEFAULT ‘‘,`oper_content` varchar(1000) NOT NULL DEFAULT ‘‘,`oper_cls` int(10) NOT NULL DEFAULT ‘0‘,`oper_date` datetime NOT NULL,`oper_serverid` int(11) NOT NULL DEFAULT ‘1‘,PRIMARY KEY (`oper_id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8");PREPARE sql_create_table FROM @sql_create_table;   EXECUTE sql_create_table; 

建立表之後,還須要插入資料,可是insert語句裡面也要使用動態表名,沒辦法還是須要和上面一樣的方法來處理。先拼sql語句。示比例如以下:(註:rId等是預存程序傳入的參數)

set @sql_oper_revcord = concat("INSERT INTO operrecord_", date_format(curdate(),‘%y%m%d‘), " (`oper_role`, `oper_type`, `oper_content`, `oper_cls`, `oper_serverid`, `oper_date`) values (rId, type, content, cls, serverid, NOW())");PREPARE sql_oper_revcord FROM @sql_oper_revcord;   EXECUTE sql_oper_revcord; 

啟動並執行時候發現會報錯,找不到rId這個欄位。網上說應該給rId加上引號如(‘rId‘)也不行,繼續報錯資料類型不匹配。

想了想。應該把rId這些傳人的參數聲明為局部參數,再次測試果然成功了,另外須要注意的是表欄位在字串裡面須要加上(`xxx`)才行。正確的sql語句例如以下:

set @rId = rId, @type = type, @content = content, @cls = cls, @serverid = serverid;set @sql_oper_revcord = concat("INSERT INTO operrecord_", date_format(curdate(),‘%y%m%d‘), " (`oper_role`, `oper_type`, `oper_content`, `oper_cls`, `oper_serverid`, `oper_date`) values (@rId, @type, @content, @cls, @serverid, NOW())");PREPARE sql_oper_revcord FROM @sql_oper_revcord;   EXECUTE sql_oper_revcord; 

記下這編文章,以作備忘。也希望能幫到其他遇到此問題的同學。

關於mysql預存程序建立動態表名及參數處理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.