Domanda

Voglio aggiungere una riga a una tabella di database, ma se esiste una riga con la stessa chiave univoca, voglio aggiornare la riga.

Per esempio,

insert into table (id, name, age) values(1, "A", 19)

Diciamo che la chiave unica è id, e nel mio database c'è una riga con id = 1. In tal caso voglio aggiornare quella riga con questi valori. Normalmente questo dà un errore. Se uso insert IGNORE Ignorerà l'errore, ma non aggiornerà ancora.

È stato utile?

Soluzione

Uso INSERT ... ON DUPLICATE KEY UPDATE

Domanda:

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    
name="A", age=19

Altri suggerimenti

Controlla sostituire

http://dev.mysql.com/doc/refman/5.0/en/replace.html

REPLACE into table (id, name, age) values(1, "A", 19)

Quando si utilizza inserisci batch, utilizzare la seguente sintassi:

INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22)
ON DUPLICATE KEY UPDATE
    name = VALUES (name),
    ...

Prova questo:

INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;

Spero che sia di aiuto.

Prova questo:

INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'

Nota:
Qui se ID è la chiave principale, dopo il primo inserimento con id='1' Ogni volta tentare di inserire id='1' Aggiornerà il nome e l'età e l'era del nome precedente cambierà.

INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19);

INSERT INTO TABLE (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE NAME = "A", AGE = 19;

REPLACE INTO table (id, name, age) VALUES(1, "A", 19);

Tutta queste soluzione funzionerà per quanto riguarda la tua domanda.

Se vuoi sapere in dettaglio su questa affermazione Visita questo link

Quando si utilizza SQLite:

REPLACE into table (id, name, age) values(1, "A", 19)

Purché id è la chiave primaria. Altrimenti inserisce solo un'altra riga. Vedere INSERIRE (Sqlite).

Solo perché ero qui alla ricerca di questa soluzione ma per l'aggiornamento da un'altra tabella identica (nel mio caso siti Web Test DB per vivere DB):

INSERT  live-db.table1
SELECT  *
FROM    test-db.table1 t
ON DUPLICATE KEY UPDATE
        ColToUpdate1 = t.ColToUpdate1,
        ColToUpdate2 = t.ColToUpdate2,
        ...

Come menzionato altrove, solo le colonne che desideri aggiornare devono essere incluse dopo ON DUPLICATE KEY UPDATE.

Non è necessario elencare le colonne nel INSERT o SELECT, anche se sono d'accordo, probabilmente è una pratica migliore.

Nel mio caso ho creato sotto le query ma nella prima query se id 1 esiste già e l'età è già lì, dopo di che crei prima domanda senza age che il valore di age non sarà nessuno

REPLACE into table SET `id` = 1, `name` = 'A', `age` = 19

Per evitare il problema di cui sopra crea una domanda come di seguito

INSERT INTO table SET `id` = '1', `name` = 'A', `age` = 19 ON DUPLICATE KEY UPDATE `id` = "1", `name` = "A",`age` = 19

Possa ti aiuterà ...

Nel caso in cui desideri mantenere il vecchio campo (per ex: nome). La query sarà:

INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE    
name=name, age=19;
INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1;

Inoltre, non dimenticare di preoccuparsi del vincolo chiave unico.

ALTER TABLE `table` ADD UNIQUE `unique_key` ( `id` ) 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top