Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Tạo hash (MD5) cho từng hàng trong MySQL

Dùng MD5(CONCAT(cot1, cot2, ...)) để sinh hash đại diện cho toàn bộ hàng (dùng cho so sánh, detect thay đổi, CDC...).

Cú pháp

SELECT MD5(CONCAT(cot1, cot2, cot3, ...)) AS row_hash FROM ten_bang;

Ví dụ minh họa

Tạo bảng getHashValueForEachRow:

CREATE TABLE getHashValueForEachRow (
    Id INT NOT NULL AUTO_INCREMENT,
    Name VARCHAR(20), Age INT, Marks INT, PRIMARY KEY (Id)
);

INSERT INTO getHashValueForEachRow (Name, Age, Marks) VALUES
('Larry',24,89), ('David',26,98), ('Bob',21,67), ('Sam',22,56), ('Mike',25,80);

Truy vấn hash mỗi hàng

SELECT MD5(CONCAT(Id, Name, Age, Marks)) AS HashValueOfEachRow 
FROM getHashValueForEachRow;

Kết quả:

+----------------------------------+
| HashValueOfEachRow               |
+----------------------------------+
| a5f6b8e1a701d467cf1b4d141027ca27 |
| 6e649522c773b6a6672e625939eb4225 |
| 8bd419e9b7e9e014a4dc0596d70e93c8 |
| 504cf50194a2a6e3481dfa9b8568b9e6 |
| 08716a8dad7105a00c49ea30d278b315 |
+----------------------------------+

Ứng dụng:

  • Change Data Capture (CDC): so sánh hash cũ/mới để phát hiện thay đổi.
  • Deduplication: tìm hàng trùng lặp toàn bộ cột.
  • Cache key: key cache từ toàn bộ hàng.

Lưu ý: MD5 cho 128-bit (32 hex chars). Cần chống va chạm cao hơn → SHA2(CONCAT(...), 256) (64 hex chars). CONCAT bỏ qua NULL → dùng COALESCE(cot, '') nếu cột có NULL.