这个问题继续上一个问题 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
那该怎么处理呢?
答案 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;
对语法不太确定,但逻辑应该是正确的。