반응형
많은 사용자가 포함 된 단일 테이블이 있습니다. 이 테이블에는 user_id (INT)라는 열이 있는데, 각 사용자에 대해 개별적으로 증가시키고 싶습니다. user_id는 1부터 시작해야합니다.
간단한 예를 준비했습니다.
Showing all names
+--------------+-----------------------+
| user_id | name |
+--------------+-----------------------+
| 1 | Bob |
| 1 | Marry |
| 2 | Bob |
| 1 | John |
| 3 | Bob |
| 2 | Marry |
+--------------+-----------------------+
Showing only where name = Bob
+--------------+-----------------------+
| user_id | name |
+--------------+-----------------------+
| 1 | Bob |
| 2 | Bob |
| 3 | Bob |
+--------------+-----------------------+
다음 쿼리는이를 수행하지만 테이블에 'Bob'이 이미있는 경우에만 작동합니다.
INSERT INTO users(user_id, name) SELECT(SELECT MAX(user_id)+1 from users where
name='Bob'), 'Bob';
Bob이없는 경우 (첫 번째 항목) user_id는 0 (영)으로 설정됩니다. 이게 문제 야. 0이 아닌 1부터 시작하려면 user_id가 필요합니다.
해결 방법
다음과 같이 사용할 수 있습니다.
INSERT INTO users (user_id, name)
SELECT 1 + coalesce((SELECT max(user_id) FROM users WHERE name='Bob'), 0), 'Bob';
그러나 이러한 쿼리는 경쟁 조건으로 이어질 수 있습니다. 트랜잭션에 있는지 확인하고 실행하기 전에 사용자 테이블을 잠급니다. 그렇지 않으면 동일한 번호를 가진 두 명의 Bob이 생길 수 있습니다.
참조 페이지 https://stackoverflow.com/questions/1587562
반응형
'MySql' 카테고리의 다른 글
MySQL PHP를 사용하여 MYSQL 테이블에 라디오 버튼 값 추가 (0) | 2021.01.06 |
---|---|
MySQL 여러 개의 작은 쿼리와 단일의 긴 쿼리. 어느 것이 더 효율적입니까? (0) | 2021.01.06 |
MySQL find and insert row to another table mysql trigger (0) | 2021.01.05 |
MySQL mysql 워크 벤치를 통해 mysql 데이터베이스로 데이터를 가져 오려면 어떻게해야합니까? (0) | 2021.01.05 |
MySQL SQL : 접두사가있는 테이블 삭제 (0) | 2021.01.05 |
댓글