Thay đổi dữ liệu của một tế bào trong mysql


156

Làm thế nào tôi có thể thay đổi dữ liệu chỉ trong một ô của bảng mysql. Tôi gặp vấn đề với CẬP NHẬT vì nó làm cho tất cả các tham số trong một cột thay đổi nhưng tôi chỉ muốn một thay đổi. Làm sao?


Bạn đã thử những gì cho đến nay? Bạn có thể chia sẻ truy vấn bạn đang sử dụng? Thông thường, bạn không cập nhật "tất cả các tham số trong một cột"
Nico Haase

Câu trả lời:


191

Bạn có thể cần chỉ định những hàng bạn muốn cập nhật ...

UPDATE 
    mytable
SET 
    column1 = value1,
    column2 = value2
WHERE 
    key_value = some_value;

1
Tôi đã bối rối trước câu trả lời này, nghĩ rằng SET đã chọn các hàng để thay đổi và WHERE đã thay đổi chúng.
Keith

điều kiện trong WHERE có thể là cột1 = old_value không?
Midifwefwqg3

@nightfwefwqg3, vâng, nó có thể, nhưng không có điểm nào. Nếu bạn không thay đổi giá trị, chỉ cần để nó ra khỏi phần SET.
Brian Hooper

1
@Brian Hooper: Tôi cần thay đổi giá trị, ý tôi là liệu tôi có thể làm điều này không UPDATE mytable SET column1 = new_value WHERE column1 = old_value;?
Midifwefwqg3

2
@nightfwefwqg3, Ah, tôi hiểu rồi, xin lỗi, một cuộc tấn công của cận thị. Vâng, điều đó sẽ hoàn toàn tốt.
Brian Hooper

112

Câu trả lời của tôi là lặp lại những gì người khác đã nói trước đây, nhưng tôi nghĩ tôi đã thêm một ví dụ, chỉ sử dụng MySQLvì các câu trả lời trước đó hơi khó hiểu đối với tôi.

Dạng chung của lệnh bạn cần sử dụng để cập nhật cột của một hàng:

UPDATE my_table SET my_column='new value' WHERE something='some value';

Và đây là một ví dụ.

TRƯỚC

mysql> select aet,port from ae;
+------------+-------+
| aet        | port  |
+------------+-------+
| DCM4CHEE01 | 11112 | 
| CDRECORD   | 10104 | 
+------------+-------+
2 rows in set (0.00 sec)

KIẾM SỰ THAY ĐỔI

mysql> update ae set port='10105' where aet='CDRECORD';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

SAU

mysql> select aet,port from ae;
+------------+-------+
| aet        | port  |
+------------+-------+
| DCM4CHEE01 | 11112 | 
| CDRECORD   | 10105 | 
+------------+-------+
2 rows in set (0.00 sec)

Cảm ơn cho cuộc biểu tình này. Truy vấn trên sẽ cập nhật tất cả các phiên bản của CDRECORD trong cột của bạn. Tuy nhiên, khi cập nhật một ô cụ thể trong một cột cụ thể, tốt hơn là làm điều đó dựa trên ID của cột, nghĩa là, nơi ID = xx
Mohammed

Thông thường tốt nhất là sử dụng khóa chính hàng, mã định danh duy nhất hàng (thường là ID, nhưng không phải luôn luôn). Thành thật mà nói, nó phụ thuộc vào những gì bạn muốn làm trong đó xác định thực hành "tốt nhất"
Garret Gang

30

UPDATE sẽ chỉ thay đổi các cột bạn liệt kê cụ thể.

UPDATE some_table
SET field1='Value 1'
WHERE primary_key = 7;

Các WHEREgiới hạn khoản mà hàng được cập nhật. Nói chung, bạn sẽ sử dụng giá trị này để xác định giá trị khóa chính (hoặc ID) của bảng để bạn chỉ cập nhật một hàng.

Các SETkhoản cho MySQL mà cột để cập nhật. Bạn có thể liệt kê bao nhiêu hoặc vài cột tùy thích. Bất cứ điều gì bạn không liệt kê sẽ không được cập nhật.


11

UPDATE chỉ thay đổi các giá trị bạn chỉ định:

UPDATE table SET cell='new_value' WHERE whatever='somevalue'

9

Hãy thử như sau:

UPDATE TableName SET ValueName=@parameterName WHERE
IdName=@ParameterIdName

Vui lòng thêm một số lời giải thích cho câu trả lời của bạn để người khác có thể học hỏi từ nó - điều đó @parameterName làm gì?
Nico Haase

7

CẬP NHẬT BẢNG <tablename> THIẾT BỊ <COLUMN=VALUE> Ở ĐÂU <CONDITION>

Thí dụ:

UPDATE TABLE teacher SET teacher_name='NSP' WHERE teacher_id='1'

3

thử cái này.

UPDATE `database_name`.`table_name` SET `column_name`='value' WHERE `id`='1';

1
Chào mừng bạn đến với Stack Overflow! Trong khi đoạn mã này được chào đón và có thể cung cấp một số trợ giúp, nó sẽ được cải thiện rất nhiều nếu nó bao gồm một lời giải thích về cách giải quyết câu hỏi. Không có điều đó, câu trả lời của bạn có giá trị giáo dục ít hơn nhiều - hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai, không chỉ người hỏi bây giờ! Vui lòng chỉnh sửa câu trả lời của bạn để thêm giải thích và đưa ra dấu hiệu về những hạn chế và giả định được áp dụng.
Toby Speight

0

Một số cột trong MySQL có mệnh đề "đang cập nhật", xem:

mysql> SHOW COLUMNS FROM your_table_name;

Tôi không chắc chắn làm thế nào để cập nhật điều này nhưng sẽ đăng một chỉnh sửa khi tôi tìm ra.


Nếu có "cập nhật", nó sẽ nằm trong cột "Bổ sung" của bảng bạn nhận được khi thực hiện lệnh trên.
Jake_Howard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.