source

MySQL - LIMIT를 사용한 UPDATE

factcode 2022. 9. 30. 11:02
반응형

MySQL - LIMIT를 사용한 UPDATE

테이블의 행을 1001에서 다음 1000으로 업데이트하고 싶습니다.

다음 쿼리를 사용하여 시도했습니다.

UPDATE `oltp_db`.`users` SET p_id = 3 LIMIT 1001, 1000
  1. 구문 오류가 발생합니다.이거 맞나? 내가 실수하는 거 아니야?
  2. 이 방법으로 업데이트를 제한할 수 있습니까?

또한 업데이트하려는 행은 데이터 타입이 INTEGER인 p_id 열에 Null 값을 가집니다.이 때문에 다음 쿼리를 사용하여 업데이트도 할 수 없습니다.

UPDATE `oltp_db`.`users` SET p_id = 3 WHERE p_id = null
  1. 위의 질문이 맞습니까?
  2. 이를 위해 무엇을 할 수 있을까요?

MySQL의 제한을 사용하여 여러 행을 업데이트하려는 경우 다음 구성을 사용할 수 있습니다.

UPDATE table_name SET name='test'
WHERE id IN (
    SELECT id FROM (
        SELECT id FROM table_name 
        ORDER BY id ASC  
        LIMIT 0, 10
    ) tmp
)

, null, null을 =는 늘값과 일치하지 않습니다.하시면 됩니다.IS NULL ★★★★★★★★★★★★★★★★★」IS NOT NULL

UPDATE `smartmeter_usage`.`users_reporting` 
SET panel_id = 3 WHERE panel_id IS NULL

LIMIT 함께 할 수 .UPDATE ,를 row count

' 방식', '네스트 방식'도할 수 .LIMIT를 사용합니다.JOIN'이것'은 다음과 같습니다.

UPDATE `table_name`
INNER JOIN (SELECT `id` from `table_name` order by `id` limit 0,100) as t2 using (`id`)
SET `name` = 'test'

내 경험상 mysql 쿼리 옵티마이저는 이 구조에 더 만족합니다.

2단계 질문을 제안합니다.

PK가 (max+1)로 자동 증가 키의 정의처럼 들리기 때문에 기본 키가 자동으로 증가한다고 가정합니다.
idPK 가 pk pk pk pk pk pk pk pk pk pk pk 。

1 - 열 1000의 기본 키 번호를 확인합니다.

SELECT @id:= id FROM smartmeter_usage LIMIT 1 OFFSET 1000

2 - 표를 업데이트합니다.

UPDATE smartmeter_usage.users_reporting SET panel_id = 3 
WHERE panel_id IS NULL AND id >= @id 
ORDER BY id 
LIMIT 1000

1의 오차가 없는지를 테스트해 주세요.어디선가 1을 더하거나 빼야 할 수도 있습니다.

UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 LIMIT 1001, 1000

않습니다(쿼리에서 UPDATE를 해 주세요(UPDATE를 입력해 주세요.where프라이머리 키의 조건(상세 정보가 없는 경우 auto_discolumn이 프라이머리 키로 설정되어 있는 것을 전제로 합니다).

UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE primary_key BETWEEN 1001 AND 2000

두 번째 쿼리에서는 IS를 사용해야 합니다.

UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE panel_id is null

편집 - primary_key가 MAX+1이라는 이름의 컬럼인 경우 다음과 같이 쿼리해야 합니다(댓글에 올바르게 기재된 백틱 포함).

UPDATE `smartmeter_usage`.`users_reporting` SET panel_id = 3 WHERE `MAX+1` BETWEEN 1001 AND 2000

MAX+1을 사용하는 행을 1001에서 2000으로 갱신하려면(1001 및 2000 포함)

LIMIT 및 OFFSET이 아닌 LIMIT으로 수행할 수 있습니다.

NULL과 비교할 때는 =가 아닌 IS를 사용해야 합니다.

UPDATE `smartmeter_usage`.`users_reporting`
SET panel_id = 3
WHERE panel_id IS null

LIMITMySQL my my my my my 。

해 보세요.ORDER BY업데이트를 제한하려는 경우, 그렇지 않으면 테이블 순서대로 업데이트가 수행되지만 올바르지 않을 수 있습니다.

그러나 Will A가 말했듯이 오프셋이 아닌 row_count 제한만 허용됩니다.

"update limit MySQL"을 검색하여 이 게시물을 얻으려면safe update mode마주 보고 있을 때update다중 테이블 구문을 사용합니다.

공식 문서 상태 이후

다중 테이블 구문의 경우 UPDATE는 table_references라는 이름의 각 테이블에서 조건을 충족하는 행을 업데이트합니다.이 경우 ORDER BY 및 LIMIT을 사용할 수 없습니다.

https://stackoverflow.com/a/28316067/1278112
저는 이 대답이 꽤 도움이 된다고 생각합니다.예를 들면

업데이트 고객은 countryCode = 'USA' WHERE country = 'USA'; -- 오류 발생 시 다음과 같이 입력합니다.

업데이트 고객 설정 countryCode = 'USA' WHERE(국가 = 'USA' 및 customerNumber <> 0); -- customerNumber가 기본 키이므로 오류 1175는 더 이상 표시되지 않습니다.

내가 원하지만 에러 코드 1175를 일으킬 수 있는 것.

UPDATE table1 t1
        INNER JOIN
    table2 t2 ON t1.name = t2.name 
SET 
    t1.column = t2.column
WHERE
    t1.name = t2.name;

현용판

UPDATE table1 t1
        INNER JOIN
    table2 t2 ON t1.name = t2.name 
SET 
    t1.column = t2.column
WHERE
    (t1.name = t2.name and t1.prime_key !=0);

그건 정말 단순하고 우아해요.원답은 그다지 주목받지 못하기 때문에 더 많은 설명을 올립니다.이것이 다른 사람들에게 도움이 되기를 바랍니다.

언급URL : https://stackoverflow.com/questions/6289729/mysql-update-query-with-limit

반응형