Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 MD5() 함수를 사용해 각 행의 해시 값 구하기

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과 같은 더 강력한 알고리즘을 사용하는 것이 권장됩니다.