Mysql
 sql >> Database >  >> RDS >> Mysql

Come posso impedire la duplicazione dei record nel mio database durante l'aggiornamento dei record?

Se la tua applicazione supporta più utenti, devi assicurarti che le modifiche non vengano apportate da un altro utente tra il controllo dei duplicati e l'aggiornamento del database.

Il modo più semplice per farlo è, come suggerito da mbeckish, creare un vincolo UNICO sulla colonna del titolo:

ALTER TABLE maindatabase.animelist 
ADD CONSTRAINT U_animelist_TitleAnime UNIQUE (TitleAnime)

Il motore di database applicherà quindi titoli univoci e il tuo cliente può gestire il feedback degli utenti rilevando qualsiasi eccezione di violazione dei vincoli:

void checkData()
{
    SuspendLayout();
    try
    {

        updateData();

    }
    catch (Exception ex)
    {
        MySqlException sqlEx = ex as MySqlExecption;
        // If there is a constraint violation error.
        // (I may have the wrong error number, please test.)
        if (sqlEx != null && sqlEx.Number == 1062) 
        {
            my = Form.ActiveForm as MyList;
            my.msg = new Message_Box();
            my.msg.Descrip.Text = "Record is already in the Database";
            my.msg.Title.Text = "Duplicate Record";
            my.msg.ShowDialog();
        } 
        else 
        {
            MessageBox.Show("" + ex);
        }
    }
    finally
    {
        ResumeLayout();
    }
}