Hướng dẫn can you update multiple rows in mysql? - bạn có thể cập nhật nhiều hàng trong mysql không?

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?

Hướng dẫn can you update multiple rows in mysql? - bạn có thể cập nhật nhiều hàng trong mysql khô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

Hướng dẫn can you update multiple rows in mysql? - bạn có thể cập nhật nhiều hàng trong mysql không?

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àng600 Huy hiệu bạc745 Huy hiệu Đồng53 gold badges600 silver badges745 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

UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
    ,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
3 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

UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
    ,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
4 để 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

Hướng dẫn can you update multiple rows in mysql? - bạn có thể cập nhật nhiều hàng trong mysql không?

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

Hướng dẫn can you update multiple rows in mysql? - bạn có thể cập nhật nhiều hàng trong mysql không?

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 table_users t1
JOIN temp_table_users tt1 using(user_rol,cod_office)
SET 
t1.cod_office = tt1.cod_office
t1.date = tt1.date

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

Hướng dẫn can you update multiple rows in mysql? - bạn có thể cập nhật nhiều hàng trong mysql không?

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

UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
    ,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
5 của ví dụ MySQLI.

$sql = "SELECT COUNT(*) AS _num FROM test;
        INSERT INTO test(id) VALUES (1); 
        SELECT COUNT(*) AS _num FROM test; ";

$mysqli->multi_query($sql);

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:

PHP Warning:  Error while sending SET_OPTION packet

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

UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
    ,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
6 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 table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
    ,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
0

Đã 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

Hướng dẫn can you update multiple rows in mysql? - bạn có thể cập nhật nhiều hàng trong mysql không?

Akshay Bhanakshay BhanApr 23, 2020 at 4:25

Hướng dẫn can you update multiple rows in mysql? - bạn có thể cập nhật nhiều hàng trong mysql không?

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 table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
    ,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
1

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

UPDATE table_to_update
SET cod_user= IF(cod_office = '17389551','622057','2913659','6160230')
    ,date = IF(cod_office = '17389551','12082014')
WHERE ?? IN (??) ;
2

Đ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

Hướng dẫn can you update multiple rows in mysql? - bạn có thể cập nhật nhiều hàng trong mysql không?

ru51anru51anru51an

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

1

Tôi có thể cập nhật nhiều hàng trong SQL không?

Tìm hiểu MySQL từ đầu cho các giá trị cột Khoa học và Phân tích dữ liệu 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.Column values on multiple rows can be updated 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 nhiều mục trong MySQL?

Lệnh cập nhật MySQL có thể được sử dụng để cập nhật nhiều cột bằng cách chỉ định danh sách phân tách dấu phẩy của cột_name = new_value.Trong đó cột_name là tên của cột sẽ được cập nhật và new_value là giá trị mới mà cột sẽ được cập nhật.. Where column_name is the name of the column to be updated and new_value is the new value with which the column will be updated.

Làm thế nào để bạn cập nhật nhiều hàng trong một cột?

Đầu tiên, chỉ định tên bảng mà bạn muốn thay đổi dữ liệu trong mệnh đề cập nhật.Thứ hai, gán một giá trị mới cho cột mà bạn muốn cập nhật.Trong trường hợp bạn muốn cập nhật dữ liệu trong nhiều cột, mỗi cặp cột = giá trị được phân tách bằng dấu phẩy (,). Thứ ba, chỉ định các hàng bạn muốn cập nhật trong mệnh đề WHERE.each column = value pair is separated by a comma (,). Third, specify which rows you want to update in the WHERE clause.

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