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

Auf*_*ind 4 python mysql hash triggers insert

我很想在MySQL中创建一个触发器,这样每次我将一个值插入一个名为titleHASH 的列时,都应该创建并存储在列中title_hash.由于我不知道这是如何工作的,我在google搜索时发现了这个代码:

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

MySQL-reference告诉我,这意味着:

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

3.点需要更多解释:

  • 我想,这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()
Run Code Online (Sandbox Code Playgroud)

在Python中存储此值.

我感谢任何建议/解释!

Dou*_*ess 5

回答你的三个问题:

NEW关键字引用"伪表"的,将被插入的记录.在更新的触发器上,您可以访问"新"和"旧",在删除时,只需"老".

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

RIGHT(string, number)简单地采取从"串"右"数"字符.CONV()函数用于转换基数之间的数字.这两个函数的组合采用散列的正确16个字符,并将它们从基数16(十六进制)转换为基数10(十进制).

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

  NEW.model_hash = SHA2(NEW.products_model)
Run Code Online (Sandbox Code Playgroud)