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)
REPLACE INTO table (id, data) VALUES (1, 'tekst');
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.
Wykorzystaj wyzwalacz/trigger na tabeli.
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
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
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ć
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.
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!!
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
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.