Wstaw do tabeli MySQL lub zaktualizuj, jeśli istnieje
Chcę dodać wiersz do tabeli bazy danych, ale jeśli wiersz istnieje z tym samym unikalnym kluczem, chcę go zaktualizować.
Na przykład,
insert into table (id, name, age) values(1, "A", 19)
Załóżmy, że unikalnym kluczem jest id
, a w mojej bazie danych znajduje się wiersz z id = 1
. W takim przypadku chcę zaktualizować ten wiersz tymi wartościami. Zwykle daje to błąd. Jeśli użyję insert IGNORE
zignoruje błąd, ale nadal nie zaktualizuje.
9 answers
Użycie INSERT ... ON DUPLICATE KEY UPDATE
QUERY:
INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE
name="A", age=19
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-12 05:53:39
Sprawdź zastąp
Http://dev.mysql.com/doc/refman/5.0/en/replace.html
REPLACE into table (id, name, age) values(1, "A", 19)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-17 14:15:24
Podczas wstawiania wsadowego należy stosować następującą składnię:
INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
name = VALUES (name),
...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-27 12:51:30
Wypróbuj to:
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;
Mam nadzieję, że to pomoże.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-17 14:17:32
Spróbuj tego:
INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'
Uwaga:
Tutaj jeśli id jest kluczem głównym, to po pierwszym wstawieniu z id='1'
za każdym razem, gdy spróbujesz wstawić id='1'
zaktualizuje nazwę i wiek, a poprzednia nazwa wiek ulegnie zmianie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-27 08:05:15
INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);
INTO TABLE (id, name, age) VALUES(1, "A", 19) ON DUPLICATE UPDATE SET NAME = "A", AGE = 19;
REPLACE INTO table (id, name, age) VALUES(1, "A", 19);
Wszystkie te rozwiązania będą działać w odniesieniu do twojego pytania.
Jeśli chcesz poznać szczegóły dotyczące tych oświadczeń odwiedź ten link
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-03 15:18:17
Podczas korzystania z SQLite:
REPLACE into table (id, name, age) values(1, "A", 19)
Pod warunkiem, że id
jest kluczem podstawowym. Albo po prostu wstawia kolejny rząd. Zobacz też INSERT (SQLite).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-08 13:08:52
Tylko dlatego, że Szukałem tego rozwiązania, ale do aktualizacji z innej identycznie skonstruowanej tabeli (w moim przypadku test DB na live DB):
INSERT live-db.table1
SELECT *
FROM test-db.table1 t
ON DUPLICATE KEY UPDATE
ColToUpdate1 = t.ColToUpdate1,
ColToUpdate2 = t.ColToUpdate2,
...
Jak wspomniano w innym miejscu, tylko kolumny, które chcesz zaktualizować, muszą być dołączone po ON DUPLICATE KEY UPDATE
.
Nie trzeba wymieniać kolumn w INSERT
lub SELECT
, choć zgadzam się, że to chyba lepsza praktyka.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-09 05:31:24
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;
Nie zapomnij również o unikalnym ograniczeniu klucza.
ALTER TABLE `table` ADD UNIQUE `unique_key` ( `id` )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-12 11:21:54