我需要在一个表中生成大量行,遗憾的是,需要在应用程序端(PHP)生成一列。
所以基本上我需要生成这样的东西:
id | encoded_val_based_on_id
-------------------------------
1 | my_encode_func( 1 )
-------------------------------
2 | my_encode_func( 2 )
-------------------------------
3 | my_encode_func( 3 )
-------------------------------
4 | my_encode_func( 4 )
我认为,必须有更好的方法然后生成N
查询以获取N
ID,然后使用“encoded_val_based_on_id”更新这些记录。
除此之外,我想在“encoded_val_based_on_id”上保留唯一索引,我无法做到这一点,因为我会生成空白行然后填充它们。
我可以锁定表格,获取最后一个ID,通过在我的应用程序中递增来生成ID +生成所有其他内容,插入它们并解锁表格。我不认为这是正确的方法,但至少可以在1个查询(批量插入)中完成,我可以在那里保留唯一索引。
答案 0 :(得分:1)
在完成插入之后,您不知道id的值(假设自动增量)。
最佳解决方案是将函数生成为可以从SQL调用的值。然后,您可以在insert上使用触发器来获取id并计算该值。但是根据你所说的这不可行。
InnoDB和MyISAM allows you在UNIQUE索引中都有NULL值。
我想我很想插入X行,该字段为空/空。然后检索该字段为null的所有行,获取id字段。然后计算id字段中的值并更新行。
这当然可能意味着多次更新,这非常可怕。解决方法是使用INSERT ..... ON DUPLICATE KEY UPDATE进行更新。正如您指定id一样,您将触发每行的更新,并且因为您可以在单个插入查询中拥有数千行,这可以非常有效地完成。