MySQL에서 여러 레코드 중 특정 사용자의 로그인 시간만 업데이트하려면 UPDATE 문에 ORDER BY 절과 LIMIT 절을 함께 사용하면 됩니다. 이 방법은 동일한 조건에 해당하는 여러 행 중에서 우선순위가 가장 높은(예: UserId가 가장 큰) 행 하나만 선택적으로 수정할 때 유용합니다.
1. 예제 테이블 생성하기
먼저 사용자 ID(UserId), 로그인 시간(UserLoggedInTime), 사용자 이름(UserName) 세 개의 컬럼을 가진 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1911
(
UserId int,
UserLoggedInTime time,
UserName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 테스트용 레코드를 몇 개 추가합니다.
mysql> insert into DemoTable1911 values(100,'7:32:00','Chris'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1911 values(101,'5:00:00','David'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1911 values(102,'6:10:20','Mike'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1911 values(103,'3:55:00','Carol'); Query OK, 1 row affected (0.00 sec)
3. 현재 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1911;
실행 결과는 다음과 같습니다.
+--------+------------------+----------+ | UserId | UserLoggedInTime | UserName | +--------+------------------+----------+ | 100 | 07:32:00 | Chris | | 101 | 05:00:00 | David | | 102 | 06:10:20 | Mike | | 103 | 03:55:00 | Carol | +--------+------------------+----------+ 4 rows in set (0.00 sec)
4. 특정 사용자의 로그인 시간 업데이트하기
이제 'Carol'이라는 사용자의 로그인 시간을 업데이트하는 쿼리를 살펴보겠습니다. WHERE 절로 대상 사용자를 지정하고, ORDER BY UserId DESC로 내림차순 정렬한 뒤 LIMIT 1을 적용하여 해당 조건에 맞는 행 중 하나만 수정합니다.
mysql> update DemoTable1911
set UserLoggedInTime='12:30:45'
where UserName='Carol'
order by UserId DESC
Limit 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0참고: MySQL에서는 UPDATE 문 안에서 ORDER BY와 LIMIT을 함께 사용할 수 있습니다. 동일한 이름을 가진 레코드가 여러 개 있을 경우, UserId가 가장 큰 최신 레코드 하나만 업데이트됩니다.
5. 업데이트 결과 확인하기
테이블의 레코드를 다시 한번 조회하여 변경 사항을 확인해 보겠습니다.
mysql> select * from DemoTable1911;
'Carol'의 로그인 시간이 12:30:45로 성공적으로 변경된 것을 확인할 수 있습니다.
+--------+------------------+----------+ | UserId | UserLoggedInTime | UserName | +--------+------------------+----------+ | 100 | 07:32:00 | Chris | | 101 | 05:00:00 | David | | 102 | 06:10:20 | Mike | | 103 | 12:30:45 | Carol | +--------+------------------+----------+ 4 rows in set (0.00 sec)
마무리
이처럼 MySQL에서는 UPDATE 문에 WHERE, ORDER BY, LIMIT을 조합하여 원하는 레코드를 정확하게 대상으로 지정할 수 있습니다. 특히 중복된 데이터가 있는 환경에서 최신 레코드만 선택적으로 갱신해야 할 때 매우 유용한 기법이므로, 실무에서 자주 활용해 보시기 바랍니다.