WHERE 절에 이메일 컬럼 조건을 걸면 해당 이메일을 가진 레코드만 업데이트할 수 있습니다.
테이블 생성 및 데이터 삽입
mysql> CREATE TABLE DemoTable (
-> EmailAddress VARCHAR(20),
-> Score INT
-> );
Query OK, 0 rows affected (1.05 sec)
mysql> INSERT INTO DemoTable VALUES('Chris@gmail.com',67);
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO DemoTable VALUES('Robert@gmail.com',57);
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES('David@gmail.com',98);
Query OK, 1 row affected (0.14 sec)
업데이트 전 데이터
mysql> SELECT * FROM DemoTable;
+------------------+-------+ | EmailAddress | Score | +------------------+-------+ | Chris@gmail.com | 67 | | Robert@gmail.com | 57 | | David@gmail.com | 98 | +------------------+-------+ 3 rows in set (0.00 sec)
이메일로 특정 레코드 업데이트
mysql> UPDATE DemoTable
-> SET Score = 89
-> WHERE EmailAddress = 'Robert@gmail.com';
Query OK, 1 row affected (0.25 sec)
Rows matched: 1 Changed: 1 Warnings: 0
업데이트 후 데이터
mysql> SELECT * FROM DemoTable;
+------------------+-------+ | EmailAddress | Score | +------------------+-------+ | Chris@gmail.com | 67 | | Robert@gmail.com | 89 | | David@gmail.com | 98 | +------------------+-------+ 3 rows in set (0.00 sec)
주의: 이메일 컬럼에 인덱스가 없으면 전체 테이블 스캔이 발생합니다. 대용량 테이블에선 이메일 컬럼에 인덱스를 생성하는 것이 좋습니다. 또한 이메일은 대소문자 구분이 없으므로 LOWER(EmailAddress) = LOWER('...')로 비교하는 것이 안전합니다.