เปลี่ยนข้อมูลของเซลล์หนึ่งใน mysql


156

ฉันจะเปลี่ยนข้อมูลในเซลล์เดียวของตาราง mysql ได้อย่างไร ฉันมีปัญหากับ UPDATE เพราะมันทำให้พารามิเตอร์ทั้งหมดในการเปลี่ยนแปลงคอลัมน์ แต่ฉันต้องการการเปลี่ยนแปลงเพียงครั้งเดียว อย่างไร?


คุณได้ลองทำอะไรไปแล้ว คุณสามารถแชร์คิวรีที่คุณใช้อยู่ได้หรือไม่? โดยปกติแล้วคุณจะไม่อัปเดต "พารามิเตอร์ทั้งหมดในคอลัมน์"
Nico Haase

คำตอบ:


191

คุณอาจต้องระบุแถวที่คุณต้องการอัปเดต ...

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

1
ฉันสับสนกับคำตอบนี้คิดว่า SET เลือกแถวที่จะเปลี่ยนและที่ใดที่พวกเขาเปลี่ยน
Keith

เงื่อนไขใน WHERE ควรเป็น column1 = old_value หรือไม่
weefwefwqg3

@ weefwefwqg3 ใช่มันทำได้ แต่ไม่มีประเด็น หากคุณไม่ได้เปลี่ยนค่าเพียงแค่ปล่อยให้มันอยู่ในส่วนของตลาดหลักทรัพย์
Brian Hooper

1
@ Brian ฮูเปอร์: I do จำเป็นที่จะต้องเปลี่ยนค่าผมหมายถึงที่จะถามว่าฉันสามารถทำเช่นนี้: UPDATE mytable SET column1 = new_value WHERE column1 = old_value;??
weefwefwqg3

2
@ weefwefwqg3, Ah, ฉันเห็น, ขอโทษ, การโจมตีของสายตาสั้น ใช่ว่าจะดีอย่างสมบูรณ์
Brian Hooper

112

คำตอบของฉันคือการทำซ้ำสิ่งที่คนอื่นพูดก่อนหน้านี้ แต่ฉันคิดว่าฉันจะเพิ่มตัวอย่างการใช้MySQLเพียงเพราะคำตอบก่อนหน้านี้เป็นความลับเล็กน้อยสำหรับฉัน

รูปแบบทั่วไปของคำสั่งที่คุณต้องใช้เพื่ออัปเดตคอลัมน์ของแถวเดี่ยว:

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

และนี่คือตัวอย่าง

ก่อน

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

ทำให้การเปลี่ยนแปลง

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

หลังจาก

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

ขอบคุณสำหรับการสาธิตนี้ แบบสอบถามด้านบนจะอัปเดตอินสแตนซ์ทั้งหมดของ CDRECORD ในคอลัมน์ aet ของคุณ อย่างไรก็ตามเมื่ออัปเดตเซลล์เฉพาะในคอลัมน์ที่ระบุจะดีกว่าถ้าทำตาม ID ของคอลัมน์นั่นคือโดยที่ ID = xx
Mohammed

เป็นการดีที่สุดที่จะใช้คีย์หลักของแถวตัวระบุที่ไม่ซ้ำกันของแถว (ซึ่งมักจะเป็น ID แต่ไม่เสมอไป) สุจริตมันขึ้นอยู่กับสิ่งที่คุณต้องการที่จะกำหนดซึ่งการปฏิบัติที่ "ดีที่สุด"
Garret Gang

30

UPDATE จะเปลี่ยนเฉพาะคอลัมน์ที่คุณระบุไว้เท่านั้น

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

WHEREข้อ จำกัด ข้อแถวที่มีการปรับปรุง โดยทั่วไปคุณจะใช้สิ่งนี้เพื่อระบุค่าคีย์หลัก (หรือ ID) ของตารางเพื่อให้คุณอัปเดตแถวเดียวเท่านั้น

SETประโยคบอก MySQL คอลัมน์ที่จะปรับปรุง คุณสามารถแสดงรายการคอลัมน์ได้มากหรือน้อยตามที่คุณต้องการ สิ่งที่คุณไม่อยู่ในรายการจะไม่ได้รับการอัปเดต


11

UPDATE เปลี่ยนค่าที่คุณระบุเท่านั้น:

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

9

ลองทำสิ่งต่อไปนี้:

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

โปรดเพิ่มคำอธิบายลงในคำตอบของคุณเพื่อให้คนอื่นสามารถเรียนรู้จากมัน - สิ่งนี้@parameterName ทำอะไร?
Nico Haase

7

ปรับปรุงตาราง <tablename> ตลาดหลักทรัพย์ <COLUMN=VALUE> WHERE <CONDITION>

ตัวอย่าง:

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

3

ลองนี้

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

1
ยินดีต้อนรับสู่ Stack Overflow! ขณะที่ข้อมูลโค้ดนี้คือการต้อนรับและอาจให้ความช่วยเหลือบางส่วนก็จะได้รับการปรับปรุงอย่างมากถ้ามันรวมถึงคำอธิบายของวิธีการที่มันอยู่ในคำถาม หากไม่มีคำตอบของคุณจะมีคุณค่าทางการศึกษาน้อยลง - โปรดจำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตไม่ใช่เพียงแค่คนที่ถามตอนนี้! โปรดแก้ไขคำตอบของคุณเพื่อเพิ่มคำอธิบายและระบุข้อ จำกัด และสมมติฐานที่ใช้
Toby Speight

0

บางคอลัมน์ใน MySQL มีอนุประโยค "on update" ดู:

mysql> SHOW COLUMNS FROM your_table_name;

ฉันไม่แน่ใจว่าจะอัปเดตสิ่งนี้อย่างไร แต่จะโพสต์การแก้ไขเมื่อฉันค้นพบ


หากมี "ในการปรับปรุง" มันจะอยู่ในคอลัมน์ "พิเศษ" ของตารางที่คุณได้รับเมื่อดำเนินการคำสั่งดังกล่าว
Jake_Howard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.