2013-10-26 157 views
0

我有带自动递增我想插入ID =行+ 1的号码工作正常,但不是ID代码 - 我想,因为现在虽然要做到这一点mediamall_favourite_media表INSERT INTO数+ 1

的我当我删除所有行时设置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(); 
} 

请,你有什么办法呢?

+0

做你的建议将不可避免地导致重复的ID。这就是为什么自动增量按照它的方式工作的原因。 – 2013-10-26 05:56:17

+0

[Auto Increment Manually]的可能重复(http://stackoverflow.com/questions/8693605/auto-increment-manually) –

回答

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个并发事务同时工作?

换句话说,不要为此而战。

+0

感谢您的回复+1 – wiecman