Hướng dẫn update limit mysql

answer

30

Hướng dẫn update limit mysql

Khi xử lý null, =không khớp với các giá trị null. Bạn có thể sử dụng IS NULLhoặcIS NOT NULL

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

LIMITcó thể được sử dụng với UPDATEnhưng với sự row countchỉ

30 hữu ích 3 bình luận chia sẻ

answer

134

Hướng dẫn update limit mysql

Nếu bạn muốn cập nhật nhiều hàng bằng cách sử dụng giới hạn trong MySQL, bạn có thể sử dụng cấu trúc này:

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
)

134 hữu ích 4 bình luận chia sẻ

answer

11

Hướng dẫn update limit mysql

Tôi sẽ đề xuất một truy vấn hai bước

Tôi giả định rằng bạn có một khóa chính tự động gia tăng vì bạn nói PK của bạn là (tối đa + 1), điều này nghe giống như định nghĩa của một khóa tăng thêm.
Tôi đang gọi PK id, hãy thay thế bằng bất cứ tên PK nào của bạn.

1 - tìm ra số khóa chính cho cột 1000.

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

2 - cập nhật bảng.

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

Vui lòng kiểm tra xem tôi có mắc lỗi không; bạn có thể cần thêm hoặc bớt 1 ở đâu đó.

11 hữu ích 0 bình luận chia sẻ

answer

9

Hướng dẫn update limit mysql

Ngoài cách tiếp cận lồng nhau ở trên, bạn có thể thực hiện ứng dụng của việc LIMITsử dụng JOINtrên cùng một bảng:

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

Theo kinh nghiệm của tôi, trình tối ưu hóa truy vấn mysql hạnh phúc hơn với cấu trúc này.

9 hữu ích 0 bình luận chia sẻ

answer

4

Hướng dẫn update limit mysql

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

Truy vấn này không đúng (hoặc ít nhất là tôi không biết cách khả thi để sử dụng giới hạn trong truy vấn CẬP NHẬT), bạn nên đặt wheređiều kiện cho bạn khóa chính (điều này giả sử bạn có cột auto_increment làm khóa chính, nếu không cung cấp biết thêm chi tiết):

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

Đối với truy vấn thứ hai, bạn phải sử dụng IS

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

CHỈNH SỬA - nếu khóa_ chính của bạn là một cột có tên MAX + 1, bạn nên truy vấn (với dấu gạch ngược như đã nêu chính xác trong nhận xét):

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

Để cập nhật các hàng có MAX + 1 từ 1001 ĐẾN 2000 (bao gồm 1001 và 2000)

4 hữu ích 5 bình luận chia sẻ

answer

4

Hướng dẫn update limit mysql

Bạn có thể làm điều đó với LIMIT, không chỉ với LIMIT và OFFSET.

4 hữu ích 0 bình luận chia sẻ

answer

1

Hướng dẫn update limit mysql

Bạn nên sử dụng IS thay vì = để so sánh với NULL.

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

Các LIMITđiều khoản trong MySQL khi áp dụng cho một bản cập nhật không cho phép một bù đắp được xác định.

1 hữu ích 1 bình luận chia sẻ

answer

0

Hướng dẫn update limit mysql

Bạn rất nên cân nhắc việc sử dụng ORDER BYnếu bạn có ý định HẠN CHẾ CẬP NHẬT của mình, bởi vì nếu không nó sẽ cập nhật theo thứ tự của bảng, điều này có thể không chính xác.

Nhưng như Will A đã nói, nó chỉ cho phép giới hạn trên row_count, không bù đắp.

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn update limit mysql

Đối với những người nhận được bài đăng này bằng cách tìm kiếm "giới hạn cập nhật MySQL" cố gắng tránh tắt safe update modekhi đối mặt updatevới cú pháp nhiều bảng.

Kể từ khi trạng thái văn bản chính thức

Đối với cú pháp nhiều bảng, UPDATE cập nhật các hàng trong mỗi bảng có tên trong table_references đáp ứng các điều kiện. Trong trường hợp này, không thể sử dụng ORDER BY và LIMIT.

https://stackoverflow.com/a/28316067/1278112
Tôi nghĩ câu trả lời này khá hữu ích. Nó đưa ra một ví dụ

CẬP NHẬT khách hàng SET countryCode = 'USA' WHERE country = 'USA'; - mà đưa ra lỗi, bạn chỉ cần viết:

CẬP NHẬT khách hàng SET countryCode = 'USA' WHERE (country = 'USA' AND customerNumber <> 0); - Vì customerNumber là khóa chính nên bạn không gặp lỗi 1175 nào nữa.

Những gì tôi muốn nhưng sẽ làm tăng mã lỗi 1175.

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

Phiên bản làm việc

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

Mà thực sự là đơn giản và thanh lịch. Vì câu trả lời ban đầu không nhận được quá nhiều sự chú ý (bình chọn), tôi đăng thêm lời giải thích. Hy vọng điều này có thể giúp những người khác.

0 hữu ích 0 bình luận chia sẻ