gpt4 book ai didi

python - 如何告诉 MySQL 在更新/插入之前触发哈希?

转载 作者:可可西里 更新时间:2023-11-01 07:31:28 24 4
gpt4 key购买 nike

我正在努力在 MySQL 中创建一个触发器,这样每次我将一个值插入一个名为 title 的列时,都会创建一个 HASH 并将其存储在 title_hash 列中>。由于我不知道这是如何工作的,所以我在谷歌搜索时发现了这段代码:

CREATE TRIGGER insertModelHash
BEFORE
INSERT
ON
products
FOR EACH ROW SET
NEW.model_hash = CONV(RIGHT(MD5(NEW.products_model), 16), 16, 10)

MySQL 引用资料告诉我,这意味着:

  1. 创建一个名为 insertModelHash 的触发器...
  2. ... 在插入行 int 表 products 之前...
  3. 在我打算插入的每个新行的 products_model 列上使用函数 MD5、RIGHT、CONV

第三点需要更多解释:

  • 我想,NEW 是某种新行的标识符。因此 NEW.products_model 指向当前(新)行中的列 products_model
  • 然后发出MD5。因为我想使用 SHA-2,所以很明显我要更改 MD5(NEW.products_model), 16) ===> SHA2(NEW.products_model), 224).
  • 现在我很纠结:为什么这个人要使用 CONV(RIGHT(...)...)?这真的有必要吗?

附加信息:现在,我正在做

hashlib.sha224(title).hexdigest()

在 Python 中存储这个值。

我很感激任何建议/解释!

最佳答案

回答你的三个问题:

NEW 关键字引用将要插入的记录的“伪表”。在更新的触发器上,您可以访问“NEW”和“OLD”,在删除时,只能访问“OLD”。

是的,MD5 用于创建哈希。但是,在您的问题中,您包含了“RIGHT”函数的部分参数。只有MD5(NEW.products_model)(没有, 16)。是的,如果可用的话,您可以用 SHA2 代替 MD5(仅当 MySQL 配置为支持 SSL 时才可用)。

RIGHT(string, number) 只是从“string”中获取正确的“number”字符。CONV() 函数用于在基数之间转换数字。这最后两个函数的组合获取哈希的右侧 16 个字符,并将它们从基数 16(十六进制)转换为基数 10(十进制)。

答案是否定的,如果您只想存储哈希本身,则不需要它们。

  NEW.model_hash = SHA2(NEW.products_model)

关于python - 如何告诉 MySQL 在更新/插入之前触发哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7130883/

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