it-source

MySQL 오류:UPDATE 및 LIMIT의 잘못된 사용

criticalcode 2023. 11. 7. 20:57
반응형

MySQL 오류:UPDATE 및 LIMIT의 잘못된 사용

MySQL 코드가 올바르게 작동하려면 이 문제를 어떻게 해결해야 합니다.

여기 문제를 알려주는 MySQL 코드가 있습니다.

$q = "UPDATE users INNER JOIN contact_info ON contact_info.user_id = users.user_id SET active.users = NULL WHERE (email.contact_info = '" . mysqli_real_escape_string($mysqli, $x) . "' AND active.users = '" . mysqli_real_escape_string($mysqli, $y) . "') LIMIT 1";
$r = mysqli_query ($mysqli, $q) or trigger_error("Query: $q\n<br />MySQL Error: " . mysqli_error($mysqli));

업데이트용 MySQL 문서에 따르면:

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

**mysql의 제한을 사용하여 여러 행을 업데이트하려면... directly 제한을 사용하면 안 됩니다.**

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
     );

오래된 질문인 것은 알지만 이 오류를 구글링할 때 첫 번째 링크입니다.파생 테이블을 사용하여 성능 문제 없이(인덱스에 따라) 이 문제를 해결할 수 있는 방법이 있습니다.

UPDATE table1 t1
JOIN (SELECT t1.id
    FROM table1 t1
    JOIN table2 t2 ON t1.id = t2.id
        AND t2.some_criteria = 'some_value'
    WHERE t1.other_criteria = 'other_value'
    LIMIT 10000
) tmp ON tmp.id = t1.id
SET t1.field_to_update = 'new_value'

LIMIT가 하위 쿼리 내부에 있기 때문에 조인은 LIMIT 절의 행 개수만 일치하므로 쿼리는 해당 행만 업데이트합니다.

다중 테이블 구문의 경우,UPDATE는 조건을 충족하는 table_refenersion에 이름이 지정된 각 테이블의 행을 업데이트합니다.이 경우에는.ORDER BY그리고.LIMIT사용할 수 없음

@Marc B는 그 이유를 설명합니다.update정상적으로 작업할 수 없습니다.limit.

또한 @Roopchand는 솔루션을 제공합니다.

나 같은 사람들에게 있어서, 그들이 꺼지는 것을 피하려고 하는 사람들.safe update mode

https://stackoverflow.com/a/28316067/1278112
이 대답은 꽤 도움이 됩니다.그것은 예를 들어줍니다.

업데이트 고객 SET countryCode = 'USA' WHERE country = 'USA'; -- 이 오류가 발생하면 다음과 같이 적습니다.

업데이트 국가 코드 = 'USA' WHERE (국가 = 'USA' AND customer Number <> 0); -- customer Number는 기본 키이므로 더 이상 오류 1175가 발생하지 않습니다.

그리고 내가 마주할 때update다중 테이블 구문으로 작동했습니다.

내가 원하지만 에러 코드 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/4291833/mysql-error-incorrect-usage-of-update-and-limit

반응형