INSERT INTO行数+ 1

时间:2013-10-26 00:56:09

标签: php sql

我有一个工作正常的代码,但我想插入id =行数+ 1 - mediamall_favourite_media表

我想这样做,因为现在我在删除所有行时设置了auto_increment选项。插入下一行的最后一个数字。例如 - 我插入50行,然后我删除它们然后如果我再插入一行(虽然表是空的),id是51 ...

$user =& JFactory::getUser();
    $db2 =& JFactory::getDBO();
    $mediaid = $_POST['addMediaId'];
    //$delid = $_POST['delRow'];


if(isset($_POST['submitCheck']) and $_POST['submitCheck'] == '1') {             
  $query = ' INSERT INTO `#__mediamall_favourite_media` (`id`, `userid`, `mediaid`) VALUES (NULL,"'.$user->id.'","'.$mediaid.'")';
 }    
elseif(isset($_POST['submitCheck']) and $_POST['submitCheck'] == '0') {     
$query = ' DELETE FROM `#__mediamall_favourite_media` WHERE `id` = "'.$delid.'" '; 
}  


if($query) {
   $db2->setQuery($query);
   $db2->query();
}

拜托,您有任何解决方案吗?

1 个答案:

答案 0 :(得分:1)

不,你不能在事务数据库中这样做。这是场景:

  • 交易A开始,获取max(id) + 1作为新ID(比如101)。
  • 交易B开始,获取max(id) + 1作为新ID(比如101)。
  • 交易A提交。
  • 交易B尝试承诺 - 繁荣!它不能 - 你有重复的id 101。

(而不是max(id)+1您可以使用count(*)+1 - 结果将是相同的。)

尝试重用漏洞也不起作用:

  • 交易A开始,获取id作为自动增量(比如101)。
  • 交易B开始,将id作为自动增量(例如102)。
  • 交易B提交。
  • 事务A因某些奇怪的原因(例如客户端丢失连接)而中止。 现在,id 101将被闲置。如果你试图重复使用它,它将非常昂贵。

为了使这张照片更复杂,想象一下它不是2,而是说10个并发交易同时工作?

换句话说,不要再与它斗争并与之一起努力了。