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

MySQL에서 특정 사용자의 로그인 시간을 업데이트하는 방법 – ORDER BY와 LIMIT 활용하기

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을 조합하여 원하는 레코드를 정확하게 대상으로 지정할 수 있습니다. 특히 중복된 데이터가 있는 환경에서 최신 레코드만 선택적으로 갱신해야 할 때 매우 유용한 기법이므로, 실무에서 자주 활용해 보시기 바랍니다.