Mysql数据库唯一约束和触发器的使用

说明

最近写了一点Mysql数据库东西,记录一下使用方法

步骤

1.创建触发器(自动计算content_hash)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DELIMITER //

CREATE TRIGGER before_insert_oneSentence

BEFORE INSERT ON oneSentence

FOR EACH ROW

BEGIN

    -- 插入前自动计算content的MD5值

    IF NEW.content_hash IS NULL THEN

        SET NEW.content_hash = LOWER(MD5(NEW.content)); -- 转小写确保一致性

    END IF;

END;

//

DELIMITER ;

2.为旧数据补充content_hash

1
2
3
4
5
6
7
-- 先处理旧数据(无content_hash的记录)

UPDATE oneSentence 

SET content_hash = LOWER(MD5(content)) 

WHERE content_hash IS NULL;

3.添加唯一索引(防重复)

1
2
3
4
5
-- 确保content_hash列有唯一索引

ALTER TABLE oneSentence 

ADD UNIQUE INDEX idx_unique_content_hash (content_hash);

问题

如果以前创建过,会报:

1
Warning: #1831 Duplicate index 'idx_unique_content_hash' defined on the table xxx

这个错误是有重复的索引

1.查看所有索引

1
SHOW INDEX FROM your_table_name;

2.删除重复的索引

1
DROP INDEX idx_unique_content_hash ON your_table_name;
使用 Hugo 构建
主题 StackJimmy 设计