Duplikowanie przy Insert Into

0

Mam pytanie - czy istnieje w MySQL mozliwosc sprawdzenia czy wstawiane rekordy nie sa duplikatem ?
Tzn. chce za pomoca Insert Into wstawic rekord z danymi np "Jan Kowalski Gdynia" - czy jest jakies polecenie ktore sprawdza czy nie ma juz identycznego i wtedy po prostu nic nie wstawia ? (tak jak np przy tworzeniu bazy mamy CREATE DATABASE IF NOT EXISTS)

0

REPLACE INTO table (id, data) VALUES (1, 'tekst');

0

REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted.

0

Wykorzystaj wyzwalacz/trigger na tabeli.

0

to proszę cię napisz tu łaskawie jak proponujesz to zrobić triggerem. Bo chyba nie sugerujesz, żeby w triggerze robić delete from tabela where (wszystkie pola) = (wstawiane pola) - przecież dokłądnie to robi REPLACE INTO

0
abrakadaber napisał(a):

to proszę cię napisz tu łaskawie jak proponujesz to zrobić triggerem. Bo chyba nie sugerujesz, żeby w triggerze robić delete from tabela where (wszystkie pola) = (wstawiane pola) - przecież dokłądnie to robi REPLACE INTO

Ok zdałem sobie sprawę, że w wyzwalaczach (before insert) w MySQL nie możemy używać słów kluczowych transakcji takich jak np. ROLLBACK w przeciwieństwie do MS SQL. Można natomiast sprawdzić czy istnieje wpis i wywołać wyjątek jak poniżej. Łatwiejszym było by może założenie indeksu na te kolumny, ale jeżeli z jakichś przyczyn autor wątku chce sprawdzić to może tak zrobić.

begin
if exists ( select * from table where table.columnA = NEW.columnA) then
     SIGNAL sqlstate '45001' set message_text = "Duplicated data!";
end if;
end
0

ano nie da się (btw w postgresie jest to bajerancko rozwiązane). Co do wyjątku to znowu - jest to kłopotliwe bo trzeba po stronie aplikacji obsłużyć

0

W skrocie: stworzylem plik index.php w ktorym tworze nowa baze, tabele i uzupelniam ja danymi. Jednak za kazdym odswiezeniem pliku dodaje mi na nowo te same rekordy - czego nie chce.

Z tabela i baza danych jest prosto - dzieki funkcji IF NOT EXISTS po prostu nie tworzy nowej jesli juz jest - a rekordy dodaje, bo nie widze funkcji ktora by sprawdzala czy dany wiersz juz nie istnieje.

0

to błąd masz w myśleniu a nie dodawaniu duplikatów. Bazę tworzy się RAZ i RAZ uzupełnia się słowniki a nie za każdym razem jak ktoś na stronę wejdzie!!

0

w takim razie nie wiem jak mam stworzyc kod tak zeby tylko raz tworzylo baze i ja wypelnialo, a osobno wykonywalo na niej wszystkie funkcje

2

w wielkim skrócie index jest "uruchamiany" za każdym razem jak ktoś wejdzie na stronę lub ją odświeży więc umieszczanie w niej kodu, który tworzy bazę jest bezsensowne. Kod tworzący bazę umieszcza się tak, żeby wykonał się raz podczas instalacji serwisu. W Twoim przypadku może to być nawet osobny plik, który uruchomisz raz a potem skasujesz i tyle.

1 użytkowników online, w tym zalogowanych: 0, gości: 1