mysql - 如何有效地生成大量行

标签 mysql database

我需要在一张表中生成大量行,不幸的是,需要在应用端 (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 个查询(批量插入)中完成,并且我可以在那里保留唯一索引。

最佳答案

直到完成插入后,您才知道 id 的值(假设自动递增)。

最好的解决方案是拥有生成该值的函数,作为可以从 SQL 调用的值。然后,您可以在插入时使用触发器来获取 id 并计算值。但是从你所说的这并不是真正可行的。

InnoDB 和 MyISAM allows you在 UNIQUE 索引中具有 NULL 值。

我想我很想插入 X 行,该字段为空白/空。然后检索该字段为空的所有行,获取 id 字段。然后计算 id 字段的值并更新行。

这当然可能意味着多次更新,这是非常可怕的。一个解决方案是使用 INSERT.....ON DUPLICATE KEY UPDATE 代替进行更新。当您指定 ID 时,您将触发每一行的更新,并且由于您可以在单个插入查询中拥有数千行,因此这可以非常有效地完成。

关于mysql - 如何有效地生成大量行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16835774/

相关文章:

php - 日期默认时区设置问题

php - 我如何使用 PHP 将单选按钮记录添加到 MySQL 字段中

mysql动态查询执行

database - 数据库设置上的 asp.net-core 迁移错误

MySQL LIKE 表示两个单词

mysql - 如何在 mysql 中设置本地列表/元组变量

database - 创建一个双向的多对多关联,带有额外的学说字段

python - 如何使用 python 将 .csv 文件转换为 .db 文件?

MySQL - 更新主 "id"列是否会改进连续搜索?怎么做?

mysql - 使用 mysql 中的新用户定义函数复制 CHARINDEX