Hướng dẫn mysql bulk update multiple rows - cập nhật hàng loạt mysql nhiều hàng

Bạn có một sinh viên bảng với

UPDATE students s
JOIN [
    SELECT 1 as id, 5 as new_score1, 8 as new_score2
    UNION ALL
    SELECT 2, 10, 8
    UNION ALL
    SELECT 3, 8, 3
    UNION ALL
    SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
6,
UPDATE students s
JOIN [
    SELECT 1 as id, 5 as new_score1, 8 as new_score2
    UNION ALL
    SELECT 2, 10, 8
    UNION ALL
    SELECT 3, 8, 3
    UNION ALL
    SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
7 và
UPDATE students s
JOIN [
    SELECT 1 as id, 5 as new_score1, 8 as new_score2
    UNION ALL
    SELECT 2, 10, 8
    UNION ALL
    SELECT 3, 8, 3
    UNION ALL
    SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
8 như thế này, trong đó
UPDATE students s
JOIN [
    SELECT 1 as id, 5 as new_score1, 8 as new_score2
    UNION ALL
    SELECT 2, 10, 8
    UNION ALL
    SELECT 3, 8, 3
    UNION ALL
    SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
6 là khóa chính:

Tôiscore1score2
1 10 9
2 8 3
3 10 6
4 4 8

Và đây là bảng dữ liệu mới mà bạn muốn cập nhật lên:

Tôiscore1score2
1 5 8
2 10 8
3 8 3
4 10 7

Và đây là bảng dữ liệu mới mà bạn muốn cập nhật lên:

Có một vài cách để làm điều đó.

UPDATE students SET score1 = 5, score2 = 8 WHERE id = 1;
UPDATE students SET score1 = 10, score2 = 8 WHERE id = 2;
UPDATE students SET score1 = 8, score2 = 3 WHERE id = 3;
UPDATE students SET score1 = 10, score2 = 7 WHERE id = 4;

1. Bạn có thể viết nhiều truy vấn cập nhật như thế này và chạy tất cả chúng cùng một lúc:

UPDATE students s
JOIN [
    SELECT 1 as id, 5 as new_score1, 8 as new_score2
    UNION ALL
    SELECT 2, 10, 8
    UNION ALL
    SELECT 3, 8, 3
    UNION ALL
    SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;

2. Hoặc bạn có thể cập nhật với câu lệnh tham gia:

INSERT INTO students 
    [id, score1, score2]
    VALUES 
        [1, 5, 8],
        [2, 10, 8],
        [3, 8, 3],
        [4, 10, 7]
    ON DUPLICATE KEY UPDATE 
        score1 = VALUES[score1],
    score2 = VALUES[score2];

3. Hoặc bạn có thể sử dụng

INSERT INTO students 
    [id, score1, score2]
    VALUES 
        [1, 5, 8],
        [2, 10, 8],
        [3, 8, 3],
        [4, 10, 7]
    ON DUPLICATE KEY UPDATE 
        score1 = VALUES[score1],
    score2 = VALUES[score2];
0

Cần một công cụ GUI tốt cho MySQL? TablePlus là một công cụ hiện đại, gốc với giao diện người dùng thanh lịch, cho phép bạn quản lý đồng thời nhiều cơ sở dữ liệu như MySQL, PostgreSQL, SQLite, Microsoft SQL Server, và hơn thế nữa.. It’s free anyway!

Tải xuống TablePlus cho Mac. Dù sao thì nó cũng miễn phí! Download TablePlus for Windows.

Không phải trên Mac? Tải xuống bảng cho Windows. Download TablePlus for Linux

Trên Linux? Tải xuống bảng cho Linux Download TablePlus for iOS.

200

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang cố gắng hiểu cách cập nhật nhiều hàng với các giá trị khác nhau và tôi không nhận được nó. Giải pháp ở khắp mọi nơi nhưng với tôi nó có vẻ khó hiểu.

Chẳng hạn, ba bản cập nhật thành 1 truy vấn:

UPDATE table_users
SET cod_user = '622057'
    , date = '12082014'
WHERE user_rol = 'student'
    AND cod_office = '17389551'; 

UPDATE table_users
SET cod_user = '2913659'
    , date = '12082014'
WHERE user_rol = 'assistant'
    AND cod_office = '17389551'; 

UPDATE table_users
SET cod_user = '6160230'
    , date = '12082014'
WHERE user_rol = 'admin'
    AND cod_office = '17389551'; 

Tôi đọc một ví dụ, nhưng tôi thực sự không hiểu làm thế nào để thực hiện truy vấn. I E:

UPDATE table_to_update
SET cod_user= IF[cod_office = '17389551','622057','2913659','6160230']
    ,date = IF[cod_office = '17389551','12082014']
WHERE ?? IN [??] ;

Tôi không hoàn toàn rõ ràng làm thế nào để thực hiện truy vấn nếu có nhiều điều kiện trong điều kiện ở đâu và trong điều kiện..có ý tưởng?

Siêu bão

4.7465 Huy hiệu vàng20 Huy hiệu bạc32 Huy hiệu Đồng5 gold badges20 silver badges32 bronze badges

Hỏi ngày 4 tháng 9 năm 2014 lúc 20:48Sep 4, 2014 at 20:48

fran.sand66fran.sand66fran.sand66

10.2K19 Huy hiệu vàng57 Huy hiệu bạc100 Huy hiệu Đồng19 gold badges57 silver badges100 bronze badges

1

Bạn có thể làm theo cách này:

UPDATE table_users
    SET cod_user = [case when user_role = 'student' then '622057'
                         when user_role = 'assistant' then '2913659'
                         when user_role = 'admin' then '6160230'
                    end],
        date = '12082014'
    WHERE user_role in ['student', 'assistant', 'admin'] AND
          cod_office = '17389551';

Tôi không hiểu định dạng ngày của bạn. Ngày nên được lưu trữ trong cơ sở dữ liệu bằng cách sử dụng các loại ngày và thời gian bản địa.

Đã trả lời ngày 4 tháng 9 năm 2014 lúc 20:53Sep 4, 2014 at 20:53

Gordon Linoffgordon LinoffGordon Linoff

1.2M53 Huy hiệu vàng599 Huy hiệu bạc743 Huy hiệu Đồng53 gold badges599 silver badges743 bronze badges

15

MySQL cho phép một cách dễ đọc hơn để kết hợp nhiều bản cập nhật vào một truy vấn duy nhất. Điều này dường như phù hợp hơn với kịch bản mà bạn mô tả, dễ đọc hơn nhiều và tránh những điều kiện khó khăn trong nhiều điều kiện.

INSERT INTO table_users [cod_user, date, user_rol, cod_office]
VALUES
['622057', '12082014', 'student', '17389551'],
['2913659', '12082014', 'assistant','17389551'],
['6160230', '12082014', 'admin', '17389551']
ON DUPLICATE KEY UPDATE
 cod_user=VALUES[cod_user], date=VALUES[date]

Điều này giả định rằng sự kết hợp

INSERT INTO students 
    [id, score1, score2]
    VALUES 
        [1, 5, 8],
        [2, 10, 8],
        [3, 8, 3],
        [4, 10, 7]
    ON DUPLICATE KEY UPDATE 
        score1 = VALUES[score1],
    score2 = VALUES[score2];
1 là khóa chính. Nếu chỉ một trong số này là khóa chính, thì hãy thêm trường khác vào danh sách cập nhật. Nếu cả hai đều không phải là khóa chính [dường như không thể] thì cách tiếp cận này sẽ luôn tạo ra các bản ghi mới - có lẽ không phải là điều mong muốn.

Tuy nhiên, cách tiếp cận này làm cho các tuyên bố chuẩn bị dễ dàng hơn để xây dựng và súc tích hơn.

John

Huy hiệu vàng 12K1190 Huy hiệu bạc157 Huy hiệu đồng11 gold badges90 silver badges157 bronze badges

Đã trả lời ngày 19 tháng 1 năm 2016 lúc 0:13Jan 19, 2016 at 0:13

18

Bạn có thể sử dụng câu lệnh

INSERT INTO students 
    [id, score1, score2]
    VALUES 
        [1, 5, 8],
        [2, 10, 8],
        [3, 8, 3],
        [4, 10, 7]
    ON DUPLICATE KEY UPDATE 
        score1 = VALUES[score1],
    score2 = VALUES[score2];
2 để xử lý nhiều kịch bản nếu/sau đó:

UPDATE table_to_update 
SET  cod_user= CASE WHEN user_rol = 'student' THEN '622057'
                   WHEN user_rol = 'assistant' THEN '2913659'
                   WHEN user_rol = 'admin' THEN '6160230'
               END
    ,date = '12082014'
WHERE user_rol IN ['student','assistant','admin']
  AND cod_office = '17389551';

Đã trả lời ngày 4 tháng 9 năm 2014 lúc 20:54Sep 4, 2014 at 20:54

Hart Cohart đồngHart CO

33,4K5 Huy hiệu vàng45 Huy hiệu bạc60 Huy hiệu Đồng5 gold badges45 silver badges60 bronze badges

1

UPDATE table_name
SET cod_user = 
    CASE 
    WHEN user_rol = 'student' THEN '622057'
    WHEN user_rol = 'assistant' THEN '2913659'
    WHEN user_rol = 'admin' THEN '6160230'
    END, date = '12082014'

WHERE user_rol IN ['student','assistant','admin']
AND cod_office = '17389551';

Saghachi

7179 Huy hiệu bạc16 Huy hiệu đồng9 silver badges16 bronze badges

Đã trả lời ngày 11 tháng 12 năm 2016 lúc 7:43Dec 11, 2016 at 7:43

Akshay Bhanakshay BhanAkshay Bhan

1952 Huy hiệu bạc12 Huy hiệu đồng2 silver badges12 bronze badges

Để mở rộng câu trả lời @trevedhek,

Trong trường hợp bản cập nhật phải được thực hiện với các khóa không duy nhất, sẽ cần 4 truy vấn

Lưu ý: Đây không an toàn giao dịch

Điều này có thể được thực hiện bằng cách sử dụng một bảng tạm thời.

Bước 1: Tạo các phím bảng tạm thời và các cột bạn muốn cập nhật

CREATE TEMPORARY TABLE  temp_table_users
[
    cod_user varchar[50]
    , date varchar[50]
    , user_rol varchar[50]
    ,  cod_office varchar[50]
] ENGINE=MEMORY

Bước 2: Chèn các giá trị vào bảng temp

Bước 3: Cập nhật bảng ban đầu

UPDATE students s
JOIN [
    SELECT 1 as id, 5 as new_score1, 8 as new_score2
    UNION ALL
    SELECT 2, 10, 8
    UNION ALL
    SELECT 3, 8, 3
    UNION ALL
    SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
0

Bước 4: Thả bảng nhiệt độ

Đã trả lời ngày 30 tháng 3 năm 2020 lúc 11:45Mar 30, 2020 at 11:45

SabsabSab

4705 Huy hiệu bạc16 Huy hiệu Đồng5 silver badges16 bronze badges

Trong PHP, bạn sử dụng phương pháp

INSERT INTO students 
    [id, score1, score2]
    VALUES 
        [1, 5, 8],
        [2, 10, 8],
        [3, 8, 3],
        [4, 10, 7]
    ON DUPLICATE KEY UPDATE 
        score1 = VALUES[score1],
    score2 = VALUES[score2];
3 của ví dụ MySQLI.

UPDATE students s
JOIN [
    SELECT 1 as id, 5 as new_score1, 8 as new_score2
    UNION ALL
    SELECT 2, 10, 8
    UNION ALL
    SELECT 3, 8, 3
    UNION ALL
    SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
1

So sánh kết quả với giao dịch, chèn, phương thức trường hợp trong bản cập nhật 30.000 RAW.

Giao dịch: 5.5194580554962 Chèn: 0,20669293403625 Trường hợp: 16.474853992462 MULTI: 0.0412278175354
Insert: 0.20669293403625
Case: 16.474853992462
Multi: 0.0412278175354

Như bạn có thể thấy, nhiều câu truy vấn tuyên bố hiệu quả hơn câu trả lời cao nhất.

Chỉ trong trường hợp nếu bạn nhận được thông báo lỗi như thế này:

UPDATE students s
JOIN [
    SELECT 1 as id, 5 as new_score1, 8 as new_score2
    UNION ALL
    SELECT 2, 10, 8
    UNION ALL
    SELECT 3, 8, 3
    UNION ALL
    SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
2

Bạn có thể cần tăng

INSERT INTO students 
    [id, score1, score2]
    VALUES 
        [1, 5, 8],
        [2, 10, 8],
        [3, 8, 3],
        [4, 10, 7]
    ON DUPLICATE KEY UPDATE 
        score1 = VALUES[score1],
    score2 = VALUES[score2];
4 trong tệp cấu hình MySQL.

Đã trả lời ngày 19 tháng 12 năm 2021 lúc 7:50Dec 19, 2021 at 7:50

SaghachisaghachiSaghachi

7179 Huy hiệu bạc16 Huy hiệu đồng9 silver badges16 bronze badges

1

UPDATE students s
JOIN [
    SELECT 1 as id, 5 as new_score1, 8 as new_score2
    UNION ALL
    SELECT 2, 10, 8
    UNION ALL
    SELECT 3, 8, 3
    UNION ALL
    SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
3

Đã trả lời ngày 11 tháng 12 năm 2016 lúc 7:43
I Am trying to update each col1 where col4 = col3 different value for each row

Akshay Bhanakshay BhanApr 23, 2020 at 4:25

1952 Huy hiệu bạc12 Huy hiệu đồngankit giri

Để mở rộng câu trả lời @trevedhek,3 silver badges9 bronze badges

Trong trường hợp bản cập nhật phải được thực hiện với các khóa không duy nhất, sẽ cần 4 truy vấn

UPDATE students s
JOIN [
    SELECT 1 as id, 5 as new_score1, 8 as new_score2
    UNION ALL
    SELECT 2, 10, 8
    UNION ALL
    SELECT 3, 8, 3
    UNION ALL
    SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
4

Lưu ý: Đây không an toàn giao dịch

UPDATE students s
JOIN [
    SELECT 1 as id, 5 as new_score1, 8 as new_score2
    UNION ALL
    SELECT 2, 10, 8
    UNION ALL
    SELECT 3, 8, 3
    UNION ALL
    SELECT 4, 10, 7
] vals ON s.id = vals.id
SET score1 = new_score1, score2 = new_score2;
5

Điều này có thể được thực hiện bằng cách sử dụng một bảng tạm thời.

Bước 1: Tạo các phím bảng tạm thời và các cột bạn muốn cập nhậtApr 16, 2020 at 13:30

ru51anru51anru51an

Bước 2: Chèn các giá trị vào bảng temp1 gold badge1 silver badge10 bronze badges

1

Bạn có thể cập nhật nhiều hàng trong MySQL không?

Có một vài cách để làm điều đó. Chèn vào các giá trị của học sinh [ID, SCORE1, SCORE2] [1, 5, 8], [2, 10, 8], [3, 8, 3], [4, 10, 7] trên bản cập nhật khóa trùng lặp điểm 1 = giá trị [giá trị [ điểm1], điểm2 = giá trị [điểm2];INSERT INTO students [id, score1, score2] VALUES [1, 5, 8], [2, 10, 8], [3, 8, 3], [4, 10, 7] ON DUPLICATE KEY UPDATE score1 = VALUES[score1], score2 = VALUES[score2];

Làm thế nào tôi có thể cập nhật nhiều hàng cùng một lúc trong SQL?

Trong SQL, đôi khi chúng ta cần cập nhật nhiều bản ghi trong một truy vấn.Chúng tôi sẽ sử dụng từ khóa cập nhật để đạt được điều này.Đối với điều này, chúng tôi sử dụng 2 loại ví dụ, tức là chỉ dựa trên một điều kiện và loại thứ hai dựa trên nhiều điều kiện.use the UPDATE keyword to achieve this. For this, we use 2 kinds of examples i.e. the first based on only one condition and the second based on multiple conditions.

Làm thế nào để bạn cập nhật nhiều giá trị hàng?

Các giá trị cột trên nhiều hàng có thể được cập nhật trong một câu lệnh cập nhật duy nhất nếu điều kiện được chỉ định trong đó mệnh đề khớp với nhiều hàng.Trong trường hợp này, mệnh đề SET sẽ được áp dụng cho tất cả các hàng phù hợp.in a single UPDATE statement if the condition specified in WHERE clause matches multiple rows. In this case, the SET clause will be applied to all the matched rows.

Làm cách nào để cập nhật hơn 1000 bản ghi trong SQL?

Tôi cần cập nhật hơn 1000 bản ghi.Các giá trị nằm trong một bảng khác.Subquery trả về nhiều hơn 1 giá trị.Điều này không được phép khi trình điều khiển con theo sau =,! =..
trong đó cột = [chọn cột2 từ bảng].
Cập nhật tab Đặt cột = [chọn Cột2 từ bảng].
Chọn @Varable = [chọn Cột2 từ bảng].

Bài Viết Liên Quan

Chủ Đề