Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verhindere ich doppelte Datensätze in meiner Datenbank, während ich Datensätze aktualisiere?

Wenn Ihre Anwendung mehrere Benutzer unterstützt, müssen Sie sicherstellen, dass zwischen Ihrer Suche nach Duplikaten und der Datenbankaktualisierung keine Änderungen von einem anderen Benutzer vorgenommen werden.

Der einfachste Weg, dies zu tun, ist, wie mbeckish vorgeschlagen hat, eine EINZIGARTIGE Einschränkung für die Titelspalte zu erstellen:

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

Die Datenbank-Engine erzwingt dann eindeutige Titel und Ihr Client kann Benutzer-Feedback verarbeiten, indem er jede Einschränkungsverletzungs-Ausnahme abfängt:

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();
    }
}