2012-07-15 9 views
13

Czy istnieje sposób usuwania rekordu na duplikacie klucza w MySQL?Wstaw MySQL na duplikacie klucza; kasować?

Załóżmy, że mamy rekord w bazie danych z określonym kluczem podstawowym, a my spróbujemy dodać kolejny z tym samym kluczem - ON DUPLICATE KEY UPDATE po prostu zaktualizuje rekord, ale czy istnieje opcja usunięcia rekordu, jeśli już istnieje? Służy do łatwego włączania i wyłączania po kliknięciu przycisku.

+3

Użyj ** spustu ** – rekenerd

+0

Dzięki - myślę, że to jedyna opcja. –

Odpowiedz

1

Najbliższe możliwe rozwiązanie tego samego oświadczenia to: REPLACE. Oto documentation for REPLACE.

Podobne pytanie został poproszony o MySQL Forums i recommended(and only) answer było wykorzystanie REPLACE.

+0

Tak, ale nie jest to dokładnie to, czego szukam - nie chcę zastępować elementu w bazie danych - jeśli istnieje, chcę się go pozbyć. –

+0

Domyślam się, że jedyną opcją (jeśli powyższe jest jedynym możliwym rozwiązaniem) w takim przypadku będzie uruchamianie oddzielnych instrukcji - najpierw sprawdź, czy rekord zostanie znaleziony, a następnie na podstawie wyniku dodaj go lub usuń. –

+0

lub utwórz kolumnę 'BOOLEAN' lub' ENUM' i ustaw ją na 0 lub 1, w zależności od tego, czy chcesz, czy nie. – hjpotter92

4

Zastosowanie REPLACE INTO:

replace into some_table 
select somecolumn from othertable 

albo będzie wstawić nowe dane lub jeśli istnieje Thr same dane zostaną usunięte dane i wstawić nowy jeden

+1

Wydajność zamiany na ODDŁUŻNĄ DUPLIKATOWĄ AKTUALIZACJĘ jest inna. REPLACE INTO nie aktualizuje rekordu - kasuje rekord i dodaje go ponownie, jeśli masz mnóstwo danych i indeksów, może potrwać dłuższą chwilę ... lepiej użyć DUPLICATE UPDATE, ale on prosi o USUNĄĆ coś takiego jak ON DUPLICATE DELETE –

-2

Tak oczywiście nie jest to rozwiązanie w MySQL dla problemu .

Jeśli chcesz usunąć lub pominąć nowy rekord wprowadzającej jeśli istnieje już duplikat zapis istnieje w kluczu kolumnie tabeli, można użyć IGNORUJ tak:

insert ignore into mytbl(id,name) values(6,'ron'),(7,'son'); 

Tutaj id kolumna jest kluczem podstawowym w tabeli mytbl. Spowoduje to wstawienie wielu wartości do tabeli przez usunięcie lub pominięcie nowych duplikatów rekordów.

Mam nadzieję, że spełni to twoje wymagania.

+1

Wstaw Ignoruj ​​NIE usuwa niczego –

5

Jest to obejść, ale to działa:

Utwórz nową kolumnę i nazwać do_delete, czy cokolwiek innego, co sprawia, że ​​jest to mały-int. Następnie wykonaj jedną z tych operacji w zależności od wersji/połączenia MySQL. Jeśli jednak nie, po prostu uruchom osobne zapytanie bezpośrednio po słowie. Tak czy inaczej, następne zapytanie będzie po prostu: Delete From [table] Where do_delete = 1;. W ten sposób, jeśli jest to nowy wpis, nic nie usunie. Jeśli nie był to nowy wpis, zostanie on oznaczony do usunięcia, a następnie można go usunąć.

+0

Podoba mi się ta opcja - i nie będę musiał zmieniać mojego oświadczenia aktualizacji. – ChiMo

Powiązane problemy