如何在插入A列时创建一个动态计算A列SHA1的列B?

时间:2014-08-07 01:38:06

标签: mysql sql

这个问题继续上一个问题 How to create Trigger to prevent inserting the duplicate row in MYSQL 5.0.27?

现在我有一个MyText表,它有ID(自动增量)列,文本(varchar 700,utf8)列

Id - text
1  - this is my text
2  - xxxx

现在我要添加一个新列" textHash"这是SHA1(lower(text))。这意味着每次在text列中插入新文字时," textHash"列将计算哈希值&相应更新。

前,开头

Id - text            - textHash
1  - this is my text - 5sd4as55ads
2  - xxxx            - zxcz5454

然后,如果有人insert into myTable (text) values ('new text'),那么表格将是这样的:

Id - text            - textHash
1  - this is my text - 5sd4as55ads
2  - xxxx            - zxcz5454
3  - new text        - 212121zxc

那该怎么处理呢?

2 个答案:

答案 0 :(得分:1)

使用以下内容作为触发器:

delimiter //
create trigger texthash
before insert on mytext
for each row
begin
   set new.txt_hash = sha1(lower(new.text));
end;
//
delimiter ;

小提琴示例在这里:http://sqlfiddle.com/#!2/67b15/1/0

您必须将分隔符设置为分号以外的其他内容(在我的示例中为//),以区分触发器的开头和结尾,因为语句中有分号。 (您可以在创建触发器后立即将其设置为分号)

请注意,无论文本字段的长度如何,SHA1值始终为40个字符。 IE浏览器。新文本'的SHA1哈希值是1eb8a29393c0e376645481c0185ec8ef05c0b65c

关于你的评论,尝试按照以下方式格式化你发布的内容(逐行):只有我注意到你忘记了SET后面的分号

DELIMITER $$
CREATE TRIGGER textHash_InsertTrigger
BEFORE INSERT ON myTable
FOR EACH ROW
begin
   set new.textHash=sha1(lower(new.text));
end;
$$
DELIMITER ; 

答案 1 :(得分:0)

create trigger hashing before insert on table
for each row begin
   set table.textHash= md5(text);
end;

对语法不太确定,但逻辑应该是正确的。