ProgramingTip

MySQL-LIMIT가있는 UPDATE 쿼리

bestdevel 2020. 12. 14. 20:39
반응형

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. 이를 위해 무엇을 할 수 있습니까?

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


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
)

2 단계 쿼리를 제안합니다.

나는 당신이 당신의 PK가 자폐증가 키의 정의처럼 들리는 (최대 + 1)이라고 말하고 있기 때문에 당신이 자동 증가 기본 키를 가지고있는 가정하고 있습니다.
나는 idPK라고 부르고 있습니다. 당신의 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을 더하거나 빼야 할 수도 있습니다.


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

이 쿼리가 포함되어 있습니다 (또는 UPDATE 쿼리에서 사용할 수있는 가능한 방법을 제한), where기본 키에 조건을 설정해야합니다 (제공하지 않는 경우 auto_increment 열이 기본 키로 제공됩니다). 자세한 내용은) :

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

1001에서 2000까지 MAX + 1로 행을 업데이트하려면 (1001 및 2000 포함)


LIMIT와 OFFSET이 아닌 LIMIT로 할 수 있습니다.


NULL과 비교하려면 = 대신 IS를 사용해야합니다.

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

LIMIT업데이트에 적용될 때 MySQL 절은 오프셋 지정을 허용하지 않습니다.


위의 중첩 된 접근 방식 외에도 동일한 테이블 에서 LIMITusing 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 쿼리 최적화 프로그램은이 구조에 더 만족합니다.


ORDER BYUPDATE를 제한하려는 경우에는를 사용하는 것이 좋습니다. 그렇지 않으면 올바르지 않을 수있는 테이블 순서대로 업데이트되기 때문입니다.

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


사람들을 위해 검색 "update limit MySQL"을 검색하여이 게시물을 얻으 십시오. 다중 테이블 구문을 safe update mode사용할 때 끄는 것을 피하십시오 update.

공식 문서 상태 이후

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

https://stackoverflow.com/a/28316067/1278112
이 답변이 매우 도움이된다고 생각합니다. 그것은 예를 제공합니다

고객 업데이트 SET countryCode = 'USA'WHERE country = 'USA'; -오류가 발생하면 다음과 같이 작성하십시오.

고객 업데이트 SET 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

반응형