Zmień dane jednej komórki w mysql

156

Jak mogę zmienić dane tylko w jednej komórce tabeli mysql. Mam problem z UPDATE, ponieważ powoduje zmianę wszystkich parametrów w kolumnie, ale chcę zmienić tylko jeden. W jaki sposób?

kasrsf
źródło
Czego spróbowałeś do tej pory? Czy możesz udostępnić zapytanie, którego używasz? Zwykle nie aktualizujesz „wszystkich parametrów w kolumnie”
Nico Haase

Odpowiedzi:

191

Prawdopodobnie musisz określić, które wiersze chcesz zaktualizować ...

UPDATE 
    mytable
SET 
    column1 = value1,
    column2 = value2
WHERE 
    key_value = some_value;
Brian Hooper
źródło
1
Byłem zdezorientowany tą odpowiedzią, myśląc, że SET wybrane wiersze do zmiany i GDZIE je zmieniłem.
Keith
czy warunek w GDZIE to kolumna1 = stara_wartość?
weefwefwqg3
@ weefwefwqg3, tak, może, ale nie ma to sensu. Jeśli nie zmieniasz wartości, po prostu pozostaw ją poza częścią SET.
Brian Hooper
1
@Brian Hooper: Muszę zmienić wartość, mam na myśli pytanie, czy mogę to zrobić: UPDATE mytable SET column1 = new_value WHERE column1 = old_value;??
weefwefwqg3
2
@ weefwefwqg3, Ah, widzę, przepraszam, atak krótkowzroczności. Tak, to byłoby w porządku.
Brian Hooper
112

Moja odpowiedź to powtórzenie tego, co inni powiedzieli wcześniej, ale pomyślałem, że dodam przykład, używając MySQLtylko dlatego, że poprzednie odpowiedzi były dla mnie trochę tajemnicze.

Ogólna postać polecenia, którego należy użyć do zaktualizowania kolumny w jednym wierszu:

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

A oto przykład.

PRZED

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

DOKONYWANIE ZMIANY

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

PO

mysql> select aet,port from ae;
+------------+-------+
| aet        | port  |
+------------+-------+
| DCM4CHEE01 | 11112 | 
| CDRECORD   | 10105 | 
+------------+-------+
2 rows in set (0.00 sec)
slm
źródło
Dzięki za tę demonstrację. Powyższe zapytanie zaktualizuje wszystkie wystąpienia CDRECORD w Twojej kolumnie aet. Jednak aktualizując konkretną komórkę w określonej kolumnie, lepiej to zrobić na podstawie identyfikatora kolumny, tj. Gdzie ID = xx
Mohammed
Zwykle najlepiej jest używać klucza podstawowego wierszy, unikalnego identyfikatora wierszy (który często jest identyfikatorem, ale nie zawsze). Szczerze mówiąc, to zależy od tego, co chcesz zrobić, co definiuje „najlepszą” praktykę
Garret Gang
30

UPDATE zmieni tylko kolumny, które wymienisz.

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

Te WHERElimity klauzula które wiersze są aktualizowane. Zwykle używa się tego do zidentyfikowania wartości klucza podstawowego (lub identyfikatora) tabeli, tak aby aktualizować tylko jeden wiersz.

SETKlauzula mówi MySQL, które kolumny do aktualizacji. Możesz podać dowolną liczbę lub kilka kolumn. Wszystko, czego nie wymienisz , nie zostanie zaktualizowane.

VoteyDisciple
źródło
11

UPDATE zmienia tylko określone wartości:

UPDATE table SET cell='new_value' WHERE whatever='somevalue'
chrząknął
źródło
9

Spróbuj wykonać następujące czynności:

UPDATE TableName SET ValueName=@parameterName WHERE
IdName=@ParameterIdName
user3668628
źródło
Dodaj wyjaśnienie do swojej odpowiedzi, tak aby inni mogli się z niej nauczyć - do czego to @parameterName służy?
Nico Haase
7

AKTUALIZUJ TABELĘ <tablename> ZESTAW <COLUMN=VALUE> GDZIE <CONDITION>

Przykład:

UPDATE TABLE teacher SET teacher_name='NSP' WHERE teacher_id='1'
NSP
źródło
3

Spróbuj tego.

UPDATE `database_name`.`table_name` SET `column_name`='value' WHERE `id`='1';
abhay
źródło
1
Witamy w Stack Overflow! Chociaż ten fragment kodu jest mile widziany i może zapewnić pomoc, byłby znacznie ulepszony, gdyby zawierał wyjaśnienie, w jaki sposób odpowiada na pytanie. Bez tego Twoja odpowiedź ma znacznie mniejszą wartość edukacyjną - pamiętaj, że w przyszłości odpowiadasz na pytanie do czytelników, a nie tylko osoby, która pyta teraz! Proszę edytować swoje odpowiedzi, aby dodać wyjaśnienie, i dać wskazówkę co zastosować ograniczenia i założenia.
Toby Speight
0

Niektóre kolumny w MySQL mają klauzulę „on update”, zobacz:

mysql> SHOW COLUMNS FROM your_table_name;

Nie jestem pewien, jak to zaktualizować, ale opublikuję zmianę, gdy się dowiem.

Jake_Howard
źródło
Jeśli jest "przy aktualizacji", będzie to w kolumnie "Extra" tabeli, którą otrzymasz wykonując powyższe polecenie.
Jake_Howard