gpt4 book ai didi

MySQL 如果没有找到则插入

转载 作者:行者123 更新时间:2023-11-29 13:14:58 24 4
gpt4 key购买 nike

因为这可能看起来像一个经典的“ON DUPLICATE KEY UPDATE”问题 - 但事实并非如此。

我有一个包含一些元值的表,如下所示:

meta_id   |   user_id   |   meta_type   |   meta_value

事实是,实际上可以有更多具有相同user_id的条目&&meta_type,但不能重复的是具有相同user_id&&的条目meta_type&&meta_value。好吧,我可以为这些添加一个唯一索引,但我担心一件事 - meta_value 是一个长文本,因此它可以包含更大的数据。
因此,当我想创建唯一 key (这样我就可以使用 ON DUPLICATE KEY UPDATE)时,我收到错误:

#1170 - 在没有 key 长度的 key 规范中使用 BLOB/TEXT 列“meta_hodnota”

当我尝试添加一些限制时,就会弹出:

#1071 - Specified key was too long; max key length is 767 bytes

这对于可能的进入来说太低了。所以问题是这个键实际上是如何工作的:

  1. 它只是说MySQL将检查列的多长部分是否重复并且不会修改具有最大值的可能性。列值大小(最大(长文本))
    注意:我只关心较小条目的三重口是心非,我不关心大条目的口是心非(不在这个地方)
  2. 它正在削减拥有最大值的可能性。列值大小(max(longtext)),即使该列是长文本,我们也只能将 767 字节作为该列的最大值。 - Not Acceptable => 这里额外的查询真的有必要吗?或者还有别的办法吗? (例如sql端搜索和变量保存=>根据结果选择操作)

对此有任何帮助/提示吗?

最佳答案

3072 字节是否足够?您可以使用 innodb_large_prefix在这种情况下,你的 mysql 配置中的参数。

如果 3072 字节不够,我会添加一个固定长度列(类似于 varchar(256))并使用该列来创建索引。插入/更新记录时可以使用 SUBSTR()将长文本修剪为 256 个字符,并使用该值填充额外列。

这当然仅在您像您所说的那样关心 meta_* 中较小的条目时才有效。根据行数,您的光盘使用量会略有增加,但在大多数情况下这不应该成为问题。

关于MySQL 如果没有找到则插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com