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:
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $izolacja
CREATE TABLE IF NOT EXISTS '.$izolacja.'(
id smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
izolacja_uzwojenia varchar(15) NOT NULL
)TYPE=InnoDB;
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $producent
CREATE TABLE IF NOT EXISTS '.$producent.'(
id_producent smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
nazwa varchar(60) NOT NULL,
kod_pocztowy varchar(6) NOT NULL,
miasto varchar(60) NOT NULL,
ulica varchar(60) NOT NULL,
nr_telefonu varchar(20) NOT NULL,
INDEX id_prod (id_producent)
)TYPE=InnoDB;
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $przekladnia
CREATE TABLE IF NOT EXISTS '.$przekladnia.'(
id_przekladnia smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
przekladnia varchar(15) NOT NULL,
INDEX id_przekl (id_przekladnia)
)TYPE=InnoDB;
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $rodzaj_uzwojenia
CREATE TABLE IF NOT EXISTS '.$rodzaj_uzwojenia.'(
id_rodzaj smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
rodzaj_uzwojenia varchar(15) NOT NULL,
INDEX id_rodz (id_rodzaj)
)TYPE=InnoDB;
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $uklad_polaczen
CREATE TABLE IF NOT EXISTS '.$uklad_polaczen.'(
id_uklad smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
uklad_polaczen varchar(6) NOT NULL,
INDEX id_uklad (id_uklad)
)TYPE=InnoDB;
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $transformator
CREATE TABLE IF NOT EXISTS '.$transformator.'(
id_trafo smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
typ varchar(15) NOT NULL,
moc_zn int NOT NULL,
zakres_regulacji blob NOT NULL,
nap_zwarcia float(4,1) NOT NULL,
straty_jal mediumint NOT NULL,
straty_obc mediumint NOT NULL,
prad_jal float(4,1) NOT NULL,
id_producent smallint NOT NULL,
id_izolacja smallint NOT NULL,
id_rodzaj_gorne smallint NOT NULL,
id_rodzaj_dolne smallint NOT NULL,
id_przekladnia smallint NOT NULL,
id_uklad smallint NOT NULL,
INDEX prod (id_producent),
FOREIGN KEY (id_producent) REFERENCES '.$producent.'(id_producent) ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX izol (id_izolacja),
FOREIGN KEY (id_izolacja) REFERENCES '.$izolacja.'(id) ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX rodzaj_gorne (id_rodzaj_gorne),
FOREIGN KEY (id_rodzaj_gorne) REFERENCES '.$rodzaj_uzwojenia.'(id_rodzaj_gorne) ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX rodzaj_dolne (id_rodzaj_dolne),
FOREIGN KEY (id_rodzaj_dolne) REFERENCES '.$rodzaj_uzwojenia.'(id_rodzaj) ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX przekladnia (id_przekladnia),
FOREIGN KEY (id_przekladnia) REFERENCES '.$przekladnia.'(id_przekladnia) ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX uklad (id_uklad),
FOREIGN KEY (id_uklad) REFERENCES '.$uklad_polaczen.'(id_uklad) ON UPDATE CASCADE ON DELETE RESTRICT
)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:
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $izolacja
CREATE TABLE IF NOT EXISTS '.$izolacja.'(
id smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
izolacja_uzwojenia varchar(15) NOT NULL
)TYPE=InnoDB;
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $producent
CREATE TABLE IF NOT EXISTS '.$producent.'(
id_producent smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
nazwa varchar(60) NOT NULL,
kod_pocztowy varchar(6) NOT NULL,
miasto varchar(60) NOT NULL,
ulica varchar(60) NOT NULL,
nr_telefonu varchar(20) NOT NULL,
INDEX id_prod (id_producent)
)TYPE=InnoDB;
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $przekladnia
CREATE TABLE IF NOT EXISTS '.$przekladnia.'(
id_przekladnia smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
przekladnia varchar(15) NOT NULL,
INDEX id_przekl (id_przekladnia)
)TYPE=InnoDB;
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $rodzaj_uzwojenia
CREATE TABLE IF NOT EXISTS '.$rodzaj_uzwojenia.'(
id_rodzaj smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
rodzaj_uzwojenia varchar(15) NOT NULL,
INDEX id_rodz (id_rodzaj)
)TYPE=InnoDB;
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $uklad_polaczen
CREATE TABLE IF NOT EXISTS '.$uklad_polaczen.'(
id_uklad smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
uklad_polaczen varchar(6) NOT NULL,
INDEX id_uklad (id_uklad)
)TYPE=InnoDB;
<span style="font-weight: bold;"><span style="text-decoration: underline;">#tabela $transformator
CREATE TABLE IF NOT EXISTS '.$transformator.'(
id_trafo smallint UNSIGNED AUTO_INCREMENT PRIMARY KEY NOT NULL,
typ varchar(15) NOT NULL,
moc_zn int NOT NULL,
zakres_regulacji blob NOT NULL,
nap_zwarcia float(4,1) NOT NULL,
straty_jal mediumint NOT NULL,
straty_obc mediumint NOT NULL,
prad_jal float(4,1) NOT NULL,
id_producent smallint UNSIGNED NOT NULL,
id_izolacja smallint UNSIGNED NOT NULL,
id_rodzaj_gorne smallint UNSIGNED NOT NULL,
id_rodzaj_dolne smallint UNSIGNED NOT NULL,
id_przekladnia smallint UNSIGNED NOT NULL,
id_uklad smallint [COLOR=red]UNSIGNED[/COLOR] NOT NULL,
INDEX prod (id_producent),
FOREIGN KEY (id_producent) REFERENCES '.$producent.'(id_producent) ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX izol (id_izolacja),
FOREIGN KEY (id_izolacja) REFERENCES '.$izolacja.'(id) ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX rodzaj_gorne (id_rodzaj_gorne),
FOREIGN KEY (id_rodzaj_gorne) REFERENCES '.$rodzaj_uzwojenia.'(id_rodzaj) ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX rodzaj_dolne (id_rodzaj_dolne),
FOREIGN KEY (id_rodzaj_dolne) REFERENCES '.$rodzaj_uzwojenia.'(id_rodzaj) ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX przekladnia (id_przekladnia),
FOREIGN KEY (id_przekladnia) REFERENCES '.$przekladnia.'(id_przekladnia) ON UPDATE CASCADE ON DELETE RESTRICT,
INDEX uklad (id_uklad),
FOREIGN KEY (id_uklad) REFERENCES '.$uklad_polaczen.'(id_uklad) ON UPDATE CASCADE ON DELETE RESTRICT
)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:
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