Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> bład errno: 150, tworzenie obcych kluczy
squid
post
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


majac takie tabele :
  1. CREATE TABLE `nodes` (
  2. `nodeID` int(10) UNSIGNED NOT NULL,
  3. `nodeName` varchar(64) DEFAULT NULL,
  4. PRIMARY KEY (`nodeID`)
  5. ) TYPE=InnoDB;
  6.  
  7. # --------------------------------------------------------
  8.  
  9. #
  10. # Struktura tabeli dla `blood`
  11. #
  12.  
  13. CREATE TABLE `blood` (
  14. `parentID` int(10) UNSIGNED NOT NULL,
  15. `childID` int(10) UNSIGNED NOT NULL,
  16. INDEX (`parentID`,`childID`),
  17. FOREIGN KEY(`parentID`) REFERENCES nodes(`nodeID`),
  18. FOREIGN KEY(`childID`) REFERENCES nodes(`nodeID`)
  19. ) TYPE=InnoDB;


otrzymuje taki komunikat:
Cytat
Błąd


zapytanie SQL : 


CREATE TABLE `blood` (
`parentID` int( 10 ) unsigned NOT NULL ,
`childID` int( 10 ) unsigned NOT NULL ,
INDEX ( `parentID` , `childID` ) ,
FOREIGN KEY ( `parentID` ) REFERENCES nodes( `nodeID` ) ,
FOREIGN KEY ( `childID` ) REFERENCES nodes( `nodeID` )
) TYPE = InnoDB


MySQL zwrócił komunikat:


#1005 - Can't create table './test2/blood.frm' (errno: 150)


nie wiem co tam poprawic, ktos ma jakis pomysl?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
squid
post
Post #2





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

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


No dzieki wielkie!!

zrobilem na podstwaie tego co mi dales tak :
  1. #
  2. # Struktura tabeli dla `nodes`
  3. #
  4.  
  5. CREATE TABLE `nodes` (
  6. `nodeID` int(10) UNSIGNED AUTO_INCREMENT,
  7. `nodeName` varchar(64) DEFAULT NULL,
  8. UNIQUE (nodeID),
  9. INDEX nowy1 (nodeID),
  10. PRIMARY KEY (`nodeID`)
  11. ) TYPE=InnoDB;
  12.  
  13. # --------------------------------------------------------
  14.  
  15. #
  16. # Struktura tabeli dla `blood`
  17. #
  18.  
  19. CREATE TABLE `blood` (
  20. `parentID` int(10) UNSIGNED NOT NULL,
  21. `childID` int(10) UNSIGNED NOT NULL,
  22. PRIMARY KEY (parentID,childID),
  23. INDEX in1 (parentID),
  24. FOREIGN KEY (parentID) REFERENCES nodes (nodeID) ON DELETE cascade ON UPDATE cascade,
  25. INDEX in2 (childID),
  26. FOREIGN KEY (childID) REFERENCES nodes (nodeID) ON DELETE cascade ON UPDATE cascade
  27. ) TYPE=InnoDB;
  28.  
  29. # --------------------------------------------------------


i dziala.

Pytania:
1. Jesli usune indeksy to juz nie dziala (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ale dlaczego przeciez wymagane indexy powinno tworzyc Primary Key (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ?
2. co znaczy :
  1. ON DELETE cascade ON UPDATE cascade

znaczy wiem ze podczas kasowania i uaktulaniania sprawdzane jest czy istnieje wogole taki nodeID jego powiazania itp. ale czy bez tego dzialaloby inaczej?
3. kontrola integralnosc i kluczy na poziomie bazy danych to naprawde fajna sprawa tylko czy ktos testowal kto zrobi to szybciej baza czy skrypt? obstawiam baze ale moge sie mylic
4. Co z przenosnoscia takiego kodu? postgre tez by cos takiego dzialalo?

z gory dzieki za odpowiedz

Ten post edytował squid 31.10.2004, 17:33:42
Go to the top of the page
+Quote Post

Posty w temacie


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: 26.12.2025 - 20:01