Php 是否将自动增量设置为低于当前最高值?

Php 是否将自动增量设置为低于当前最高值?,php,mysql,joomla,Php,Mysql,Joomla,我有一个带有自动递增ID字段的MySQL表。我用一个数据源的数据填充这个表,数据源有自己的唯一ID(从大约400万开始)。我还想插入自己的数据,但不想与数据库中已有的ID冲突 理想情况下,我只需要在一个较低的ID处插入所有行。但是,我必须使用一个我无法控制的函数(一个内置的Joomla函数),如果ID为0,它将插入一个新行,但是如果它是任何其他数字,请尝试更新它 所以很明显,如果我尝试插入一个ID为1的新行,它将尝试更新ID为1的行,而ID为1的行并不存在。因此不会插入任何数据 我已尝试将自动增

我有一个带有自动递增ID字段的MySQL表。我用一个数据源的数据填充这个表,数据源有自己的唯一ID(从大约400万开始)。我还想插入自己的数据,但不想与数据库中已有的ID冲突

理想情况下,我只需要在一个较低的ID处插入所有行。但是,我必须使用一个我无法控制的函数(一个内置的Joomla函数),如果ID为0,它将插入一个新行,但是如果它是任何其他数字,请尝试更新它

所以很明显,如果我尝试插入一个ID为1的新行,它将尝试更新ID为1的行,而ID为1的行并不存在。因此不会插入任何数据

我已尝试将自动增量值设置为低于当前最大id,但不起作用。我的问题还有别的解决办法吗


更新:为了尝试澄清我的问题,我有来自另一个高ID来源的数据(从400万到越来越多)。我想插入ID较低的行,从1到1(外部源不会与此冲突)。但是,出于上述原因,我不能只找到一个未使用的低ID并使用它,我必须使用零或找到其他解决方案。

您是否试图从其他数据库保留ID?如果是这样,那么使用
mysqldump
进行批量插入怎么样


否则,为什么不简单地让自动增量来完成这项工作?

您是否试图从其他数据库保留ID?如果是这样,那么使用
mysqldump
进行批量插入怎么样


否则,为什么不简单地让自动增量完成工作?

您是否正在尝试插入最后一个id?如果是这样,您可以将其放入您的逻辑中:

SELECT LAST_INSERT_ID() as last_id

然后用它插入最后一个ID,并将其放入新记录中

您正在尝试插入最后一个id吗?如果是这样,您可以将其放入您的逻辑中:

SELECT LAST_INSERT_ID() as last_id

然后用它插入最后一个ID,并将其放入新记录中

如果您引用的函数是
JTable::store()
,您可以创建一个扩展
JTable
的类,然后编写
store()
函数以实现所需的行为。

如果您引用的函数是
JTable::store()
,您可以创建一个扩展
JTable
的类,然后编写
store()
函数,使其按您想要的方式运行。

听起来您需要以编程方式执行此操作,并绕过表具有自动递增标识这一事实。我将以编程方式从第1行开始计数,直到找到一个空行,然后手动将其指定为行id,而不是依赖于自动增量。

听起来您需要以编程方式进行计数,并绕过表具有自动增量标识这一事实。我将以编程方式从第1行开始计数,直到找到一个空行,然后手动将其指定为行id,而不是依赖于自动增量。

我找到了一个解决方案:将外部id存储在不同的字段中


来自外部源的ID现在存储在“extid”字段中,因此我可以检查该字段(用于我自己的更新)。我将主ID字段设置为一个自动递增的主键,我可以使用它来引用各个地方的文章。

我找到了一个解决方案:将外部ID存储在不同的字段中


来自外部源的ID现在存储在“extid”字段中,因此我可以检查该字段(用于我自己的更新)。我将main ID字段设置为一个自动递增的主键,我可以使用它来引用各个地方的文章。

这并不能解释为什么:是否有充分的理由从其他来源保留ID?是否有理由合并数据,但保持数据隔离?这并不能解释为什么:是否有充分的理由保留来自其他源的ID?是否有理由合并数据,但保持数据隔离?这可能是最简单的解决方案。我可以复制函数并修改它以满足我的需要。当然可以。还可以看一下LDAP身份验证插件的一个实际示例。这可能是最简单的解决方案。我可以复制函数并修改它以满足我的需要。当然可以。还可以看看LDAP身份验证插件的一个实际例子。但是正如我所说的(或者无论如何都尝试过),如果我用非0的ID调用store函数,它会尝试更新表而不是插入行。啊。。。“存储”是代码中的函数还是存储过程?听起来它仍然可以通过编程来解决。sql server本身并没有“强迫”您这样做,我不认为。。。相反,正是存储功能在这样做。我想,如果您没有访问该函数的权限,您的应用程序可能会出错,但您仍然可以通过自己连接到SQL server来绕过它。但是正如我所说(或无论如何尝试过),如果我使用非0的ID调用store函数,它会尝试更新表而不插入行。啊。。。“存储”是代码中的函数还是存储过程?听起来它仍然可以通过编程来解决。sql server本身并没有“强迫”您这样做,我不认为。。。相反,正是存储功能在这样做。我想如果你没有访问该函数的权限,你的程序就失败了,但是你仍然可以通过自己连接到SQL server来绕过它。