php - 如何在不添加任何索引的情况下插入更新重复项

标签 php mysql

我正在尝试基于多列组合来唯一行,而不使用索引/键来插入更新重复行。我需要的是 INSERT ... ON DUPLICATE KEY ,但由于索引大小限制,我无法添加索引。

这是我的表格设计

表:关键字内容

+--------------------+---------------------+------+-----+---------+----------------+
| Field              | Type                | Null | Key | Default | Extra          |
+--------------------+---------------------+------+-----+---------+----------------+
| id                 | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| group_id           | int(10) unsigned    | NO   |     | NULL    |                |
| encoding           | tinyint(3) unsigned | NO   |     | 0       |                |
| content            | text                | NO   |     | NULL    |                |
| active_period      | datetime            | YES  |     | NULL    |                |
| status             | tinyint(3) unsigned | NO   |     | 1       |                |
| flag               | tinyint(1)          | YES  |     | 1       |                |
| description        | text                | YES  |     | NULL    |                |
| updated_by         | varchar(255)        | YES  |     | NULL    |                |
| updated_at         | datetime            | YES  |     | NULL    |                |
+--------------------+---------------------+------+-----+---------+----------------+

用于唯一行的列是:

  • 组号
  • 内容
  • 状态

我还尝试通过分离出要插入/更新的内容来处理 PHP 中的流程,但由于从电子表格导入的数据量很大,这会导致性能问题。

最佳答案

据我了解,您不能在 3 列上添加组合索引,因为这会因为内容而变得太大。

由于您确实需要一个索引来实现高效查找和插入,我建议在表中添加一列,您可以在其中存储 3 列组合的哈希值,并在其上添加一个唯一索引。

显然,任何散列理论上都存在冲突风险,但使用不太可能成为问题的强散列。

关于php - 如何在不添加任何索引的情况下插入更新重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48578010/

相关文章:

mysql - 列连接以合并值

session 结束时的 PHP 事件?

php - PDO 请求导致 500 内部服务器错误

php - mysql_connect - 连接到 ISP 而不是远程主机

php - 来自不同表的用户积分

php - Zend 框架中 403 的最快方法

php - 带日期计算的棘手 MySQL 查询

php - ion auth 仅显示特定组中的用户

php - 信息未存储在数据库中

sql - 运行慢查询的简单 MySQL 表