Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [errornr 150] problem z utworzeniem tabeli
veyron
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 2.04.2006

Ostrzeżenie: (0%)
-----


Witam na forum (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Mam taki problemik. Przy probie utworzenia tabeli wyskakuje mi nastepujacy blad:
Błąd: 1005 : Can't create table '.\projekt2\t_transformatory.frm' (errno: 150)

zastosowany kod:
  1. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $izolacja
  2. CREATE TABLE IF NOT EXISTS '.$izolacja.'(
  3. id smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  4. izolacja_uzwojenia varchar(15) NOT NULL
  5. )TYPE=InnoDB;
  6.  
  7. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $producent
  8. CREATE TABLE IF NOT EXISTS '.$producent.'(
  9. id_producent smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  10. nazwa varchar(60) NOT NULL,
  11. kod_pocztowy varchar(6) NOT NULL,
  12. miasto varchar(60) NOT NULL,
  13. ulica varchar(60) NOT NULL,
  14. nr_telefonu varchar(20) NOT NULL,
  15. INDEX id_prod (id_producent)
  16. )TYPE=InnoDB;
  17.  
  18. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $przekladnia
  19. CREATE TABLE IF NOT EXISTS '.$przekladnia.'(
  20. id_przekladnia smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  21. przekladnia varchar(15) NOT NULL,
  22. INDEX id_przekl (id_przekladnia)
  23. )TYPE=InnoDB;
  24.  
  25. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $rodzaj_uzwojenia
  26. CREATE TABLE IF NOT EXISTS '.$rodzaj_uzwojenia.'(
  27. id_rodzaj smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  28. rodzaj_uzwojenia varchar(15) NOT NULL,
  29. INDEX id_rodz (id_rodzaj)
  30. )TYPE=InnoDB;
  31.  
  32. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $uklad_polaczen
  33. CREATE TABLE IF NOT EXISTS '.$uklad_polaczen.'(
  34. id_uklad smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  35. uklad_polaczen varchar(6) NOT NULL,
  36. INDEX id_uklad (id_uklad)
  37. )TYPE=InnoDB;
  38.  
  39. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $transformator
  40. CREATE TABLE IF NOT EXISTS '.$transformator.'(
  41. id_trafo smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  42. typ varchar(15) NOT NULL,
  43. moc_zn int NOT NULL,
  44. zakres_regulacji blob NOT NULL,
  45. nap_zwarcia float(4,1) NOT NULL,
  46. straty_jal mediumint NOT NULL,
  47. straty_obc mediumint NOT NULL,
  48. prad_jal float(4,1) NOT NULL,
  49. id_producent smallint NOT NULL,
  50. id_izolacja smallint NOT NULL,
  51. id_rodzaj_gorne smallint NOT NULL,
  52. id_rodzaj_dolne smallint NOT NULL,
  53. id_przekladnia smallint NOT NULL,
  54. id_uklad smallint NOT NULL,
  55. INDEX prod (id_producent),
  56. FOREIGN KEY (id_producent) REFERENCES '.$producent.'(id_producent) ON UPDATE CASCADE ON DELETE RESTRICT,
  57. INDEX izol (id_izolacja),
  58. FOREIGN KEY (id_izolacja) REFERENCES '.$izolacja.'(id) ON UPDATE CASCADE ON DELETE RESTRICT,
  59. INDEX rodzaj_gorne (id_rodzaj_gorne),
  60. FOREIGN KEY (id_rodzaj_gorne) REFERENCES '.$rodzaj_uzwojenia.'(id_rodzaj_gorne) ON UPDATE CASCADE ON DELETE RESTRICT,
  61. INDEX rodzaj_dolne (id_rodzaj_dolne),
  62. FOREIGN KEY (id_rodzaj_dolne) REFERENCES '.$rodzaj_uzwojenia.'(id_rodzaj) ON UPDATE CASCADE ON DELETE RESTRICT,
  63. INDEX przekladnia (id_przekladnia),
  64. FOREIGN KEY (id_przekladnia) REFERENCES '.$przekladnia.'(id_przekladnia) ON UPDATE CASCADE ON DELETE RESTRICT,
  65. INDEX uklad (id_uklad),
  66. FOREIGN KEY (id_uklad) REFERENCES '.$uklad_polaczen.'(id_uklad) ON UPDATE CASCADE ON DELETE RESTRICT
  67. )TYPE=InnoDB';


czytalem tu na forum tematy o podobnych problemach (tu i tu) oraz to: klik. i nic to nie pomoglo. w phpmyadmin sprawdzalem, przy tworzeniu nowej tabeli moge wybrac InnoDB, wiec chyba obsluguje. moze ktos wie, gdzie lezy blad ? (tylko prosze nie pisac, ze w tym kodzie powyzej (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) (IMG:http://forum.php.pl/style_emoticons/default/laugh.gif) )
za kazda pomoc z gory dziekuje.
wersja mysql: 4.0.20a-nt.

/edit/ utworzylem baze bez kluczy obcych, z poziomu phpmyadmin dodalem indeksy (na razie dla 1 pola) dla id_izolacja, indeks dodalo, w tabeli "indeksy" w phpmyadmin indeks jest widoczny. nastepnie klikam na widok relacyjny, dla pola id_izolacja moge wybrac pole klucza obcego, wiec wybieram t_izolacja>id_izolacja, dalej jakies opcje dla pol on delete i on update. wybieram "wykonaj" i blad: "Brak zdefiniowanego indeksu! (izolacja_id)". A przeciez indeks jest zdefiniowany ! Ktos cos wie na ten temat ?

pozdrawiam.


/edit 2/
no to odpowiem sobie sam -> moze komus sie przyda (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

powinno byc:
  1. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $izolacja
  2. CREATE TABLE IF NOT EXISTS '.$izolacja.'(
  3. id smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  4. izolacja_uzwojenia varchar(15) NOT NULL
  5. )TYPE=InnoDB;
  6.  
  7. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $producent
  8. CREATE TABLE IF NOT EXISTS '.$producent.'(
  9. id_producent smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  10. nazwa varchar(60) NOT NULL,
  11. kod_pocztowy varchar(6) NOT NULL,
  12. miasto varchar(60) NOT NULL,
  13. ulica varchar(60) NOT NULL,
  14. nr_telefonu varchar(20) NOT NULL,
  15. INDEX id_prod (id_producent)
  16. )TYPE=InnoDB;
  17.  
  18. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $przekladnia
  19. CREATE TABLE IF NOT EXISTS '.$przekladnia.'(
  20. id_przekladnia smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  21. przekladnia varchar(15) NOT NULL,
  22. INDEX id_przekl (id_przekladnia)
  23. )TYPE=InnoDB;
  24.  
  25. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $rodzaj_uzwojenia
  26. CREATE TABLE IF NOT EXISTS '.$rodzaj_uzwojenia.'(
  27. id_rodzaj smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  28. rodzaj_uzwojenia varchar(15) NOT NULL,
  29. INDEX id_rodz (id_rodzaj)
  30. )TYPE=InnoDB;
  31.  
  32. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $uklad_polaczen
  33. CREATE TABLE IF NOT EXISTS '.$uklad_polaczen.'(
  34. id_uklad smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  35. uklad_polaczen varchar(6) NOT NULL,
  36. INDEX id_uklad (id_uklad)
  37. )TYPE=InnoDB;
  38.  
  39. <span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $transformator
  40. CREATE TABLE IF NOT EXISTS '.$transformator.'(
  41. id_trafo smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
  42. typ varchar(15) NOT NULL,
  43. moc_zn int NOT NULL,
  44. zakres_regulacji blob NOT NULL,
  45. nap_zwarcia float(4,1) NOT NULL,
  46. straty_jal mediumint NOT NULL,
  47. straty_obc mediumint NOT NULL,
  48. prad_jal float(4,1) NOT NULL,
  49. id_producent smallint UNSIGNED NOT NULL,
  50. id_izolacja smallint UNSIGNED NOT NULL,
  51. id_rodzaj_gorne smallint UNSIGNED NOT NULL,
  52. id_rodzaj_dolne smallint UNSIGNED NOT NULL,
  53. id_przekladnia smallint UNSIGNED NOT NULL,
  54. id_uklad smallint [COLOR=red]UNSIGNED[/COLOR] NOT NULL,
  55. INDEX prod (id_producent),
  56. FOREIGN KEY (id_producent) REFERENCES '.$producent.'(id_producent) ON UPDATE CASCADE ON DELETE RESTRICT,
  57. INDEX izol (id_izolacja),
  58. FOREIGN KEY (id_izolacja) REFERENCES '.$izolacja.'(id) ON UPDATE CASCADE ON DELETE RESTRICT,
  59. INDEX rodzaj_gorne (id_rodzaj_gorne),
  60. FOREIGN KEY (id_rodzaj_gorne) REFERENCES '.$rodzaj_uzwojenia.'(id_rodzaj) ON UPDATE CASCADE ON DELETE RESTRICT,
  61. INDEX rodzaj_dolne (id_rodzaj_dolne),
  62. FOREIGN KEY (id_rodzaj_dolne) REFERENCES '.$rodzaj_uzwojenia.'(id_rodzaj) ON UPDATE CASCADE ON DELETE RESTRICT,
  63. INDEX przekladnia (id_przekladnia),
  64. FOREIGN KEY (id_przekladnia) REFERENCES '.$przekladnia.'(id_przekladnia) ON UPDATE CASCADE ON DELETE RESTRICT,
  65. INDEX uklad (id_uklad),
  66. FOREIGN KEY (id_uklad) REFERENCES '.$uklad_polaczen.'(id_uklad) ON UPDATE CASCADE ON DELETE RESTRICT
  67. )TYPE=InnoDB';


czyli nie zgadzaly sie typy danych (brakowalo unsigned w kluczach obcych w tabeli $transformator).

tak btw to takie rzeczy, ktore przy tym znalazlem, a na ktore nalezy zwracac uwage to:
- zgodnosc kodowania - nie moze byc tak, ze jedno pole ma np utf a drugie np latin (dot np char, varchar)
- dokladna zgodnosc typow danych jednego i drugiego pola (u mnie brak unsigned w kluczu obcym powodowal wspomniany error)
- obydwie tabele musza byc InnoDB
- no i klucze obce musza byc najpierw zaindeksowane (o tym juz tu bylo)

pomocne przy szukaniu bledu moze byc polecenie:
  1. SHOW INNODB STATUS


no coz, pewnie osoby obeznane to wiedzialy, ale moze poczatkujacym takim jak ja sie przyda (IMG:http://forum.php.pl/style_emoticons/default/rolleyes.gif)

pozdrawiam.

Ten post edytował veyron 17.05.2006, 17:53:24
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 10:04