请教一个jsp插入mysql数据的问题

楼主llQiu(溜溜球)2005-12-22 17:44:06 在 Java / Web 开发 提问

我用Jsp写一个论坛,数据库用的是MySql,当我用Insert语句发一个新的帖子,如何能返回这条记录的id(id是int自增)?因为我想直接把页面转到该帖。  
   
  开始我使用帖子标题做条件查询,但是如果遇到同名的帖子就乱了,加上发布时间等其他条件感觉也不保险,重要的是insert完再要select一次感觉很烦。是否有办法在insert的同时就获得新数据的id,而不用再select?  
   
  请大家讲讲自己是如何解决这个问题的 问题点数:50、回复次数:6Top

1 楼funcreal(为中华之崛起而编程)回复于 2005-12-22 17:54:55 得分 20

目前,个人认为应该开新事务,然后加表锁。  
   
  不允许本事务看到其他事务已插入的新数据。这个是比较高的事务隔离级别。仅次于串行化。  
  你可以在存储过程中来实现,效果会好一些。Top

2 楼bluelily22(丁丁)回复于 2005-12-22 18:03:40 得分 10

你的mysql如果支持事务的话,就用事务  
  如果不支持的话,就只能再查一次了Top

3 楼llQiu(溜溜球)回复于 2005-12-23 00:09:20 得分 0

funcreal(为中华之崛起而编程)  
   
  非常感谢!  
  你所提到的‘事务’我基本明白,但是‘表锁’的感念比较模糊,使用什么样的隔离级别,如何实现在一个事务中的隔离?  
  请尽量讲详细点,再谢!Top

4 楼llQiu(溜溜球)回复于 2005-12-23 12:55:40 得分 0

bluelily22(丁丁)  
   
  我查的资料中说MySql不支持事务处理:  
   
  5.4.3   事务处理  
  不支持事务处理。MySQL将在短时间内支持原子(atomic)操作,它象没有回卷的事务。用原子操作,你能执行一组INSERT/SELECT/whatever   命令并且保证没有其他线程介入。在本文中,你通常不会需要回卷。目前,你可通过使用LOCK   TABLES和UNLOCK   TABLES命令阻止其他线程的干扰。Top

5 楼llQiu(溜溜球)回复于 2005-12-24 20:54:22 得分 0

自己顶起来Top

6 楼mq612(五斗米)回复于 2005-12-31 22:33:06 得分 20

把MySQL库的表类型更改为InnoDB就可以支持事务处理了,好象4以下的低版本不支持事务。  
  ALTER   TABLE   name   TYPE   =   InnoDB;  
   
  只有再次select数据库来找出自己刚刚发布的帖子,用发帖人作为条件检索,并找出最大的ID,这就肯定是你刚刚发布的帖子了:  
  select   max(id)   as   maxId   from   data   where   userName='myName';Top

你可能对以下的问题也比较感兴趣....