na wstępie proszę o wyrozumiałość, to moje początki na tym zarówno na tym forum jak i z mysql.
Od kilku dni zastanawiam się jak rozwiązać następujący problem:
Na polecenie szefa zrobiłem bazę danych w mysql która wygląda mniej więcej tak:
CREATE TABLE `kontakty` ( `imie` varchar(45), `nazwisko` varchar(60), `adres` varchar(255), `miasto` varchar(60), `wojewodztwo` varchar(60), `kod` int(20), `telefon` int(20), CONSTRAINT sprawdz_numer CHECK (telefon > 99999999 AND telefon < 10 0000 0000), alt_phone int(20), alt_phone2 int(20), last_update DATE, classification varchar(20), `id` int(30) UNSIGNED NOT NULL UNIQUE AUTO_INCREMENT, CONSTRAINT composit_key PRIMARY KEY ( name,surname,phone) );
gdzie założyłem klucz złożony z imienia, nazwiska i telefonu. Dzięki temu przy imporcie kontaktów mysql nie ładuje duplikatów:
LOAD DATA INFILE 'C:\\user/Desktop/SQL/test/przyklad/1.csv' IGNORE INTO TABLE `kontakty` FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\n' (imie,nazwisko,adres,miasto,wojewodztwo,kod,telefon,alt_phone,alt_phone2,last_update,classification);
1). Tydzień temu dostałem polecenie od przełożonego żeby te duplikaty były zachowywane w innej tabeli....i w ten właśnie sposób z prostej czynności zaczęły się kłopoty. Mam taki pomysł, żeby przed importem do głównej tabeli, tworzyć tymczasową tabelę, i dzięki niej najpierw ładować istniejące już duble do nowej tabeli. Niestety zdublowane rekordy w .csv muszę ładować ręcznie... Czy jest na to jakiś mądry sposób? Ktoś ma jakiś pomysł? Albo może mnie na coś naprowadzić?
2). Mam również problem z walidacją nr telefonów. Myślałem, że przy ładowaniu polecenia:
CONSTRAINT sprawdz_numer CHECK (telefon > 99999999 AND telefon < 10 0000 0000),
mysql załaduje tylko numery 9 cyfrowe. Niestety tak się nie dzieje i znalazłem w @ informację, że funkcja CHECK nie działa w mysql. Czy to prawda? Czy ktoś ma pomysł na walidację numerów (tak żeby tylko numery 9 cyfrowe mogły istnieć w tabeli?
Z góry dziękuję za wszystkie pomysły/podpowiedzi
