我有一个带有自动增量ID字段的MySQL表。我正在用一个来源的数据填充表格,它有自己唯一的ID(从大约400万起)。我还想插入自己的数据,但不希望它与数据库中已有的ID冲突。
理想情况下,我只需将其全部插入较低的ID即可。但是,我必须使用我的控件之外的函数(内置的Joomla函数),如果ID为0,它将插入一个新行,但如果是任何其他数字,请尝试更新它。
很明显,如果我尝试插入ID为1的新行,它将尝试更新ID为1的行,该行不存在。所以没有插入数据。
我已尝试将自动增量值设置为低于当前最大ID但不起作用。我的问题还有另一个解决方案吗?
更新:为了尝试澄清我的问题,我从其他来源获得了具有高ID的数据(从400万增加)。我想插入具有低ID的行,从1开始向上(外部源不会与此冲突)。但是,由于上述原因,我不能只找到一个未使用的低ID并使用它,我必须使用零或找到其他解决方案。
答案 0 :(得分:1)
您是否尝试保留其他数据库中的ID?如果是这样,那么使用mysqldump
批量插入怎么样?
否则,为什么不简单地让自动增量完成工作呢?
答案 1 :(得分:0)
您是否尝试插入最后一个ID?如果是这样,你可以把它放到你的逻辑中:
SELECT LAST_INSERT_ID() as last_id
并使用它来插入最后一个ID并将其放入新记录中。
答案 2 :(得分:0)
如果您引用的函数是JTable::store()
,则可以创建一个扩展JTable
的类,然后编写store()
函数以按您希望的方式运行。
答案 3 :(得分:0)
听起来您需要以编程方式执行此操作并绕过表具有自动增量标识的事实。我将以编程方式从第1行开始计数,直到找到空白行,然后手动将其指定为row-id而不是依赖于自动增量。
答案 4 :(得分:0)
我找到了一个解决方案:将外部ID存储在不同的字段中!
来自外部源的ID现在存储在“extid”字段中,因此我可以检查该字段(对于我自己的更新)。我将主ID字段设置为自动递增主键,我可以用它来引用各个地方的文章。