转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 最近游戏开始第二次内测,开始处理操作日志,最开始把日志放到同一个表里面,发现一天时间,平均100玩家在线,操作记录就超过13万条,决定拆表,按照日期来保存日志,每天的日志存到一个表里
转载请注明出处:帘卷西风的专栏(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用户的方法对于数据库管理员和开发者至关重要,因为它确保数据库的安全性和访问控制。1)使用CREATEUSER命令创建新用户,2)通过GRANT命令分配权限,3)使用FLUSHPRIVILEGES确保权限生效,4)定期审计和清理用户账户以维护性能和安全。

chosecharforfixed-lengthdata,varcharforvariable-lengthdata,andtextforlargetextfield.1)chariseffity forconsistent-lengthdatalikecodes.2)varcharsuitsvariable-lengthdatalikenames,ballancingflexibilitibility andperformance.3)

在MySQL中处理字符串数据类型和索引的最佳实践包括:1)选择合适的字符串类型,如CHAR用于固定长度,VARCHAR用于可变长度,TEXT用于大文本;2)谨慎索引,避免过度索引,针对常用查询创建索引;3)使用前缀索引和全文索引优化长字符串搜索;4)定期监控和优化索引,保持索引小巧高效。通过这些方法,可以在读取和写入性能之间取得平衡,提升数据库效率。

ToaddauserremotelytoMySQL,followthesesteps:1)ConnecttoMySQLasroot,2)Createanewuserwithremoteaccess,3)Grantnecessaryprivileges,and4)Flushprivileges.BecautiousofsecurityrisksbylimitingprivilegesandaccesstospecificIPs,ensuringstrongpasswords,andmonitori

tostorestringsefliceflicyInmySql,ChooSetherightDataTypeBasedyOrneOrneEds:1)USEcharforFixed-LengthStstringStringStringSlikeCountryCodes.2)UseVarcharforvariable-lengtthslikenames.3)USETEXTCONTENT.3)

选择MySQL的BLOB和TEXT数据类型时,BLOB适合存储二进制数据,TEXT适合存储文本数据。1)BLOB适用于图片、音频等二进制数据,2)TEXT适用于文章、评论等文本数据,选择时需考虑数据性质和性能优化。

No,youshouldnotusetherootuserinMySQLforyourproduct.Instead,createspecificuserswithlimitedprivilegestoenhancesecurityandperformance:1)Createanewuserwithastrongpassword,2)Grantonlynecessarypermissionstothisuser,3)Regularlyreviewandupdateuserpermissions

mySqlStringDatatatPessHouldBechoseBeadeDataCharacteristicsAndUsecases:1)USECHARFORFIXED LENGTHSTRINGSTRINGSLIKECOUNTRYCODES.2)USEDES.2)usevarcharforvariable-lengtthstringstringstringstringstringstringstringslikenames.3)usebinaryorvarrinaryorvarinarydatalbonydatalgebgeenfopical.4)


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver Mac版
视觉化网页开发工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3汉化版
中文版,非常好用

SublimeText3 英文版
推荐:为Win版本,支持代码提示!