好久没有写BOLG了,看来坚持写这个东西还真不是简简单单一个想法就能支撑下来的.-_-~!吐槽一下自己.
写写这几天游戏服务器端工作解决问题用到的MYSQL小技巧吧(与其说是技巧倒不如说是自己以前这方面涉足太少,又长见识了.)
1.对A表执行操作时,还需要对B表进行操作.当时做的时候觉得如果在程序中写大量的数据库操作的话既繁琐又会增加对数据库的操作数,所以我就想到了用SQL中的触发器功能.创建一个触发器实例(示例创建了一个简单的触发器,当表执行一个插入操作时,数据库会自动将表中新插入的S1列的数据赋值为55):
delimiter | create trigger [trigger_name] before insert on [table] for each row begin set @x = "hello trigger"; set NEW.s1 = 55; end; |
这只是一个很简单的触发器示例,触发器不光能对表本身的数据进行操作,还可以对其他表的数据进行操作,比方说我用到的当A表进行插入时,设置一个触发器,使得B表同时也插入A表此次插入的一些数据.
数据库使用下来会发现关于触发器使用和SQL操作的一些常用方法还是很广,很深的,是一门很大的学问,要好好研究的.
2.程序中对数据库表自增长值的获取
创建了一个GUID自动增长的表A,想程序对表A进行插入操作时,获得自增长的GUID号,并纪录到另一个表B中.如果是要实现单一的这个功能的话,其实用上面提到的触发器就能实现的,不过我还需要在表B中纪录程序处理的数据,所以必须得到这个GUID才好在程序中写SQL语句进行操作,以前没有碰到过这种问题,搜索了一下原来解决方法很简单:
/**对表A的插入操作语句*/
String sql = "insert into article values (null, ........); //其中null代表自增长字段 PreparedStatement pstmt = null; /**
"Statement.RETURN_GENERATED_KEYS "此参数表示pstmt执行后返回一个包含所有自动生成的字段值的ResultSet结果集
*/
pstmt=conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
ResultSet rsKey = pstmt.getGeneratedKeys(); rsKey .next(); int GUID=rsKey.getInt(int index) //比如就一个自增长字段,就是 rsKey.getInt(1)
这样就拿到自增长的值了!
enjoy!!