MySQL-LIMIT가있는 UPDATE 쿼리
1001에서 다음 1000으로 시작하여 테이블의 행을 업데이트하고 싶습니다.
다음 쿼리를 시도했습니다.
UPDATE `oltp_db`.`users` SET p_id = 3 LIMIT 1001, 1000
- 이것은 나에게 구문 오류를 제공합니다. 이 올바른지? 내가 여기서 실수를하고 있는가.
- 이런 식으로 업데이트를 제한 할 수 있습니까?
또한 업데이트하려는 행에 데이터 유형이 INTEGER 인 p_id 열에 대해 Null 값이 있습니다. 이로 인해 다음 쿼리를 사용하여 업데이트 할 수도 없습니다.
UPDATE `oltp_db`.`users` SET p_id = 3 WHERE p_id = null
- 위의 쿼리가 가지고 있습니까?
- 이를 위해 무엇을 할 수 있습니까?
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)이라고 말하고 있기 때문에 당신이 자동 증가 기본 키를 가지고있는 가정하고 있습니다.
나는 id
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을 더하거나 빼야 할 수도 있습니다.
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 의 절은 오프셋 지정을 허용하지 않습니다.
위의 중첩 된 접근 방식 외에도 동일한 테이블 에서 LIMIT
using 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 BY
UPDATE를 제한하려는 경우에는를 사용하는 것이 좋습니다. 그렇지 않으면 올바르지 않을 수있는 테이블 순서대로 업데이트되기 때문입니다.
그러나 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
'ProgramingTip' 카테고리의 다른 글
/ WEB-INF에 넣어야하는 XHTML 파일과 않은 파일은 무엇입니까? (0) | 2020.12.15 |
---|---|
클래스에 __getitem__을 정의하면 반복 할 수있는 이유는 무엇입니까? (0) | 2020.12.14 |
m2e 수명주기 매핑을 수 없습니다. (0) | 2020.12.14 |
다른 펼쳐 (이미 실행 중)가 계속 후 시작 (0) | 2020.12.14 |
SQL 임시 테이블의 데이터 유형 찾기 (0) | 2020.12.14 |