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

2024-10-01 17:29:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在努力在MySQL中创建一个触发器,这样每当我在名为title的列中插入一个值时,都会创建一个散列并将其存储在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 tableproducts之前。。。在
  3. 在我要插入的每一新行中使用列products_model上的函数MD5, RIGHT, CONV。在

3。这一点需要更多的解释:

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

附加信息:现在,我正在

^{pr2}$

并存储此值。在

谢谢你的建议/解释!在


Tags: 代码rightnewmodeltitlecreatemysqlhash
1条回答
网友
1楼 · 发布于 2024-10-01 17:29:49

回答你的三个问题:

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

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

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

答案是不,如果你只想存储散列本身,就不需要它们。在

  NEW.model_hash = SHA2(NEW.products_model)

相关问题 更多 >

    热门问题