MySQL에서는 MD5() 함수를 활용하면 테이블의 각 행에 대한 해시 값을 손쉽게 얻을 수 있습니다. 여러 컬럼의 값을 CONCAT()으로 하나의 문자열로 연결한 뒤 MD5 함수에 전달하면, 행 단위의 고유한 해시 값이 생성됩니다.
기본 문법
SELECT MD5(CONCAT(yourColumnName1,yourColumnName2,yourColumnName3,.......N)) as anyVariableName FROM yourTableName;
위 문법을 실제로 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니다.
1. 테이블 생성
다음 쿼리로 getHashValueForEachRow 테이블을 생성합니다.
mysql> create table getHashValueForEachRow
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(20),
-> Age int,
-> Marks int,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (1.25 sec)2. 데이터 삽입
INSERT 명령어를 사용해 테이블에 레코드를 추가합니다.
mysql> insert into getHashValueForEachRow(Name,Age,Marks) values('Larry',24,89);
Query OK, 1 row affected (0.22 sec)
mysql> insert into getHashValueForEachRow(Name,Age,Marks) values('David',26,98);
Query OK, 1 row affected (0.24 sec)
mysql> insert into getHashValueForEachRow(Name,Age,Marks) values('Bob',21,67);
Query OK, 1 row affected (0.20 sec)
mysql> insert into getHashValueForEachRow(Name,Age,Marks) values('Sam',22,56);
Query OK, 1 row affected (0.22 sec)
mysql> insert into getHashValueForEachRow(Name,Age,Marks) values('Mike',25,80);
Query OK, 1 row affected (0.72 sec)3. 저장된 레코드 확인
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from getHashValueForEachRow;
실행 결과는 다음과 같습니다.
+----+-------+------+-------+ | Id | Name | Age | Marks | +----+-------+------+-------+ | 1 | Larry | 24 | 89 | | 2 | David | 26 | 98 | | 3 | Bob | 21 | 67 | | 4 | Sam | 22 | 56 | | 5 | Mike | 25 | 80 | +----+-------+------+-------+ 5 rows in set (0.00 sec)
4. 각 행의 해시 값 조회
이제 MD5(CONCAT(...))를 사용해 각 행의 해시 값을 구하는 쿼리를 실행합니다.
mysql> select md5(concat(Id,Name,Age,Marks)) as HashValueOfEachRow from getHashValueForEachRow;
실행 결과는 다음과 같습니다.
+----------------------------------+ | HashValueOfEachRow | +----------------------------------+ | a5f6b8e1a701d467cf1b4d141027ca27 | | 6e649522c773b6a6672e625939eb4225 | | 8bd419e9b7e9e014a4dc0596d70e93c8 | | 504cf50194a2a6e3481dfa9b8568b9e6 | | 08716a8dad7105a00c49ea30d278b315 | +----------------------------------+ 5 rows in set (0.00 sec)
참고 사항
MD5는 32자리 16진수 문자열을 반환합니다. 행의 어떤 컬럼 값이라도 변경되면 해당 행의 해시 값도 달라지므로, 데이터 변경 감지나 중복 비교 등에 유용하게 활용할 수 있습니다. 다만 보안 목적(비밀번호 저장 등)에는 MD5보다 SHA-256과 같은 더 강력한 알고리즘을 사용하는 것이 권장됩니다.