Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Foregein key
Forum PHP.pl > Forum > Przedszkole
jacusek
Witam.
Mam takie tabele:
  1. DROP TABLE IF EXISTS `przychodnia`.`lekarze`;
  2. CREATE TABLE `przychodnia`.`lekarze` (
  3. `ID_LEK` int(3) NOT NULL,
  4. `NAZWISKO_IMIE` varchar(30) COLLATE utf8_polish_ci NOT NULL,
  5. `TYTUL` varchar(15) COLLATE utf8_polish_ci NOT NULL,
  6. `SPECJALNOSC` varchar(40) COLLATE utf8_polish_ci NOT NULL,
  7. PRIMARY KEY (`ID_LEK`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci ROW_FORMAT=DYNAMIC;


oraz
  1. DROP TABLE IF EXISTS `przychodnia`.`pacjenci`;
  2. CREATE TABLE `przychodnia`.`pacjenci` (
  3. `ID_PAC` int(10) NOT NULL AUTO_INCREMENT,
  4. `PESEL` varchar(11) COLLATE utf8_polish_ci DEFAULT NULL,
  5. `nazwisko` varchar(30) COLLATE utf8_polish_ci NOT NULL,
  6. `imie` varchar(30) COLLATE utf8_polish_ci NOT NULL,
  7. `miasto` varchar(30) COLLATE utf8_polish_ci DEFAULT NULL,
  8. `adres` varchar(40) COLLATE utf8_polish_ci DEFAULT NULL,
  9. `tel` varchar(9) COLLATE utf8_polish_ci DEFAULT NULL,
  10. `tel_kom` varchar(9) COLLATE utf8_polish_ci DEFAULT NULL,
  11. `rok_ur` varchar(4) COLLATE utf8_polish_ci DEFAULT NULL,
  12. `wizyta` date DEFAULT NULL,
  13. `plec` varchar(1) COLLATE utf8_polish_ci DEFAULT NULL,
  14. `ID_LEK` int(3) NOT NULL,
  15. `new` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  16. PRIMARY KEY (`ID_PAC`),
  17. UNIQUE KEY `PESEL` (`PESEL`)
  18. ) ENGINE=InnoDB AUTO_INCREMENT=5479 DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci ROW_FORMAT=DYNAMIC;


no właśnie do tabeli pacjenci chciałem dodać klucz obcy w postaci id_lek z pierwszej tabeli:
  1. ALTER TABLE `przychodnia`.`pacjenci` ADD CONSTRAINT `LEK_1` FOREIGN KEY `LEK_1` (`ID_LEK`)
  2. REFERENCES `lekarze` (`ID_LEK`)
  3. ON DELETE RESTRICT
  4. ON UPDATE RESTRICT
  5. , ROW_FORMAT = DYNAMIC;

dostaję informację o błędzie 1005. Jak widać klucz obcy chce zakładać na wartości indeksowanej, silnik jest innoDB, zakładałem też indeks w tabeli pacjenci na id_lek i też nie zadziałało. Nie bardzo wiem gdzie mam błąd.


Rozwiązałem. Okazało się, że tabela powinna była być bez wartości wstydnis.gif
yevaud
tabele nie musza byc bez wartosci, ale nie moze byc w nich wartosci ktore naruszaja klucz jaki chcesz nalozyc
jacusek
dane nie naruszały w żaden sposób więzów integralności więc nie wiem dlaczego nie działało. Całe szczęście to na razie testy i projektowanie...... no i teraz działa
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.