我很想在MySQL中创建一个触发器,这样每次我在一个名为title
的列中插入一个值时,都会创建一个HASH并存储在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)
MySQL-reference告诉我,这意味着:
insertModelHash
... products
... 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()
在Python中并存储此值。
我感谢任何建议/解释!
答案 0 :(得分:5)
回答你的三个问题:
NEW
关键字引用要插入的记录的'伪表'。在更新的触发器上,您可以访问“新”和“旧”,在删除时,只需“旧”。
是的,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)