Chúng tôi có thể CẬP NHẬT nhiều hàng trong mysql khô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 nếu điều kiện được chỉ định trong mệnh đề WHERE 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 khớp

Ví dụ

Giả sử chúng ta có một bảng 'đấu thầu' như sau -

mysql> Select * from tender;

+-----------+---------+------+
| tender_id | company | rate |
+-----------+---------+------+
| 200       | ABC     | 1000 |
| 300       | ABD     | 5000 |
| 301       | ABE     | 6000 |
| 302       | ABF     | 2500 |
| 303       | ABG     | 2600 |
+-----------+---------+------+

5 rows in set [0.00 sec]

Bây giờ nếu chúng tôi muốn cập nhật cột 'rate' trong đóender_id lớn hơn hoặc bằng 300 thì chúng tôi có thể sử dụng truy vấn sau -

mysql> UPDATE tender SET rate = rate + 1000 WHERE tender_id >= 300;
Query OK, 4 rows affected [0.07 sec]
Rows matched: 4 Changed: 4 Warnings: 0

mysql> Select * from tender;

+-----------+---------+------+
| tender_id | company | rate |
+-----------+---------+------+
| 200       | ABC     | 1000 |
| 300       | ABD     | 6000 |
| 301       | ABE     | 7000 |
| 302       | ABF     | 3500 |
| 303       | ABG     | 3600 |
+-----------+---------+------+

5 rows in set [0.00 sec]

Chúng ta có thể quan sát từ tập kết quả ở trên rằng các giá trị trong nhiều hàng, cóender_id >= 300, đã được cập nhật

Để cập nhật nhiều hàng trong một cột, hãy sử dụng câu lệnh CASE. Trước tiên chúng ta hãy tạo một bảng -

mysql> create table updateMultipleRowsDemo
   -> [
   -> StudentId int,
   -> StudentMathScore int
   -> ];
Query OK, 0 rows affected [0.63 sec]

Sau đây là truy vấn để chèn các bản ghi vào bảng bằng cách sử dụng lệnh chèn -

mysql> insert into updateMultipleRowsDemo values[10001,67];
Query OK, 1 row affected [0.14 sec]
mysql> insert into updateMultipleRowsDemo values[10002,69];
Query OK, 1 row affected [0.15 sec]
mysql> insert into updateMultipleRowsDemo values[10003,89];
Query OK, 1 row affected [0.14 sec]
mysql> insert into updateMultipleRowsDemo values[10004,99];
Query OK, 1 row affected [0.13 sec]
mysql> insert into updateMultipleRowsDemo values[10005,92];
Query OK, 1 row affected [0.13 sec]

Sau đây là truy vấn để hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select -

mysql> select * from updateMultipleRowsDemo;

Điều này sẽ tạo ra đầu ra sau -

+-----------+------------------+
| StudentId | StudentMathScore |
+-----------+------------------+
| 10001     | 67               |
| 10002     | 69               |
| 10003     | 89               |
| 10004     | 99               |
| 10005     | 92               |
+-----------+------------------+
5 rows in set [0.00 sec]

Đây là truy vấn để cập nhật nhiều hàng trong một cột trong MySQL -

mysql> UPDATE updateMultipleRowsDemo
   -> SET StudentMathScore= CASE StudentId
   -> WHEN 10001 THEN 45
   -> WHEN 10002 THEN 52
   -> WHEN 10003 THEN 67
   -> END
   -> WHERE StudentId BETWEEN 10001 AND 10003;
Query OK, 3 rows affected [0.19 sec]
Rows matched: 3 Changed: 3 Warnings: 0

Hãy để chúng tôi kiểm tra giá trị được cập nhật hay không -

mysql> select * from updateMultipleRowsDemo;

Điều này sẽ tạo ra đầu ra sau

________số 8

Trong bài tập này, chúng ta sẽ học cách cập nhật nhiều hàng với các giá trị khác nhau trong một truy vấn. Giả sử chúng tôi có hồ sơ nhân viên sau và chúng tôi muốn cập nhật số điện thoại của một số nhân viên -

CREATE TABLE IF NOT EXISTS `empdata` [
  `id` int[11] NOT NULL AUTO_INCREMENT,
  `name` char[25] NOT NULL,
  `email` varchar[100] NOT NULL,
  `phone` int[11] NOT NULL,
  PRIMARY KEY [`id`]
] ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;
mysql> UPDATE tender SET rate = rate + 1000 WHERE tender_id >= 300;
Query OK, 4 rows affected [0.07 sec]
Rows matched: 4 Changed: 4 Warnings: 0

mysql> Select * from tender;

+-----------+---------+------+
| tender_id | company | rate |
+-----------+---------+------+
| 200       | ABC     | 1000 |
| 300       | ABD     | 6000 |
| 301       | ABE     | 7000 |
| 302       | ABF     | 3500 |
| 303       | ABG     | 3600 |
+-----------+---------+------+

5 rows in set [0.00 sec]
0

Cách tốt nhất để cập nhật nhiều hàng chỉ trong một câu lệnh là sử dụng câu lệnh CASE WHEN ELSE. Trong trường hợp này, câu lệnh sẽ cập nhật trường hợp khớp và kết thúc theo cách khác, như-

mysql> UPDATE tender SET rate = rate + 1000 WHERE tender_id >= 300;
Query OK, 4 rows affected [0.07 sec]
Rows matched: 4 Changed: 4 Warnings: 0

mysql> Select * from tender;

+-----------+---------+------+
| tender_id | company | rate |
+-----------+---------+------+
| 200       | ABC     | 1000 |
| 300       | ABD     | 6000 |
| 301       | ABE     | 7000 |
| 302       | ABF     | 3500 |
| 303       | ABG     | 3600 |
+-----------+---------+------+

5 rows in set [0.00 sec]
1

Ở đây, 'table_name' là tên bảng MySQL, 'field_name' là tên cột

Truy vấn cập nhật để cập nhật số điện thoại của một số nhân viên như sau -

mysql> UPDATE tender SET rate = rate + 1000 WHERE tender_id >= 300;
Query OK, 4 rows affected [0.07 sec]
Rows matched: 4 Changed: 4 Warnings: 0

mysql> Select * from tender;

+-----------+---------+------+
| tender_id | company | rate |
+-----------+---------+------+
| 200       | ABC     | 1000 |
| 300       | ABD     | 6000 |
| 301       | ABE     | 7000 |
| 302       | ABF     | 3500 |
| 303       | ABG     | 3600 |
+-----------+---------+------+

5 rows in set [0.00 sec]
2

hãy kiểm tra dữ liệu cập nhật -

mysql> UPDATE tender SET rate = rate + 1000 WHERE tender_id >= 300;
Query OK, 4 rows affected [0.07 sec]
Rows matched: 4 Changed: 4 Warnings: 0

mysql> Select * from tender;

+-----------+---------+------+
| tender_id | company | rate |
+-----------+---------+------+
| 200       | ABC     | 1000 |
| 300       | ABD     | 6000 |
| 301       | ABE     | 7000 |
| 302       | ABF     | 3500 |
| 303       | ABG     | 3600 |
+-----------+---------+------+

5 rows in set [0.00 sec]
3____14

Bài tập MySQL liên quan

MySQL nối
MySQL Nhận ngày, người dùng, phiên bản hiện tại
MySQL Nhận giá trị tối đa
Quản trị viên MySQL
MySQL where mệnh đề

Chủ Đề