sql >> Databasteknik >  >> RDS >> Mysql

MySQL-infogning vid dubblettuppdatering för icke-PRIMÄR nyckel

Du behöver en fråga som kontrollerar om det finns någon rad med ditt record_id (eller person_id). Om det finns uppdatera det, annars infoga ny rad

IF EXISTS (SELECT * FROM table.person WHERE record_id='SomeValue')
    UPDATE table.person 
    SET some_text='new_some_text', some_other_text='some_other_text' 
    WHERE record_id='old_record_id'
ELSE
    INSERT INTO table.person (record_id, person_id, some_text, some_other_text) 
    VALUES ('new_record_id', 'new_person_id', 'new_some_text', 'new_some_other_text')

Ett annat bättre tillvägagångssätt är

UPDATE table.person SET (...) WHERE person_id='SomeValue'
IF ROW_COUNT()=0
    INSERT INTO table.person (...) VALUES (...)


  1. använd samma trigger för olika tabeller

  2. Vad du ska kontrollera om MySQL-minnesutnyttjandet är högt

  3. fatalt fel påträffades under kommandoexekvering under uppdatering

  4. SQLAlchemy deklarativ:definiera utlösare och index (Postgres 9)