하위 쿼리를 사용하여 삽입 할 행의 ID를 결정하는 쿼리가 있습니다. 목표는 각 새 행을 의 다음 배수로 증가 시켜서 ID 사이에 충분한 간격을 허용하는 것입니다. 하위 쿼리에 의해 반환 된 id가 이미 다른 동시 프로세스에서 가져올 수 있습니까? 또는이 하위 쿼리가 자동 증분 인 것처럼 고유 ID를 생성하도록 보장됩니까? 당신이이 일을하는 경우하위 쿼리 결과가 오래 될 수 있습니까?
INSERT INTO `table`
SET id = (
SELECT x.max_id
FROM (
SELECT MAX(id) + 1000 as max_id
FROM `table`
WHERE id LIKE '%000'
) as x
)
는 일반 하위 쿼리가 있었다면, 나는 그것이 확실히 원자 말할 것이다 (가정 이노). 하지만 중첩 된 하위 쿼리에 해당하는지 여부가 궁금합니다. – shmosel
이것은 기술적으로 [ "bulk insert"] (http://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html#innodb-auto-increment-lock-mode)이므로 -consecutive), MySQL은 기본적으로 전체 테이블을 잠급니다. 단 하나의 행만 선택한다는 것을 깨닫기에 충분히 똑똑하지 않은 한. – shmosel
흠 ... 나는 그것이 단순한 삽입이라고 생각 하겠지만 정의는 중첩 된 서브 쿼리를 배제한다. – billynoah