Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] problem z relacjami
@rtur
post 29.06.2014, 18:54:44
Post #1





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


  1. CREATE TABLE IF NOT EXISTS `mecze` (
  2. `druzyna1_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
  3. `druzyna2_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
  4. `data` datetime DEFAULT NULL,
  5. PRIMARY KEY (`druzyna1_id`,`druzyna2_id`),
  6. UNIQUE KEY `data` (`data`),
  7. KEY `druzyna1_id` (`druzyna1_id`),
  8. KEY `druzyna2_id` (`druzyna2_id`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
  10.  
  11. CREATE TABLE IF NOT EXISTS `druzyny` (
  12. `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  13. `name` varchar(255) COLLATE utf8_polish_ci NOT NULL,
  14. PRIMARY KEY (`id`),
  15. UNIQUE KEY `name` (`name`),
  16. KEY `id` (`id`)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci;
  18.  
  19.  
  20. ALTER TABLE `mecze`
  21. ADD CONSTRAINT `mecze_ibfk_3` FOREIGN KEY (`druzyna1_id`) REFERENCES `druzyny` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  22. ADD CONSTRAINT `mecze_ibfk_4` FOREIGN KEY (`druzyna2_id`) REFERENCES `druzyny` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;


Zrobiłem sobie taką tabelę i ona działa doskonale usuwam drużynę z tabeli druzyny, automatycznie usuwaja sie mecze w których drużyny brały udział i jest ok, ale mi potrzeba aby w tabeli mecze wartość druzyna1_id i druzyna2_id przybierały wartość 0 lub null jak biorę zamiast ON DELETE CASCADE ON DELETE SET NULL to dostaje Błąd podczas tworzenia klucza zewnętrznego na druzyna1_id (należy sprawdzić typy danych) Błąd podczas tworzenia klucza zewnętrznego na druzyna2_id (należy sprawdzić typy danych), w czym tkwi problem

Ten post edytował @rtur 29.06.2014, 18:56:28


--------------------
Artur
Go to the top of the page
+Quote Post
trueblue
post 29.06.2014, 19:03:38
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


  1. `druzyna1_id` int(10) UNSIGNED [b]NOT NULL[/b] DEFAULT '0',
  2. `druzyna2_id` int(10) UNSIGNED [b]NOT NULL[/b] DEFAULT '0',


--------------------
Go to the top of the page
+Quote Post
@rtur
post 30.06.2014, 04:22:16
Post #3





Grupa: Zarejestrowani
Postów: 254
Pomógł: 3
Dołączył: 23.02.2006

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


Jak rozumiem:
  1. ALTER TABLE `mecze`
  2. ADD CONSTRAINT `mecze_ibfk_3` FOREIGN KEY (`druzyna1_id`) REFERENCES `druzyny` (`id`) ON DELETE SET DEFAULT ON UPDATE CASCADE,
  3. ADD CONSTRAINT `mecze_ibfk_4` FOREIGN KEY (`druzyna2_id`) REFERENCES `druzyny` (`id`) ON DELETE SET DEFAULT ON UPDATE CASCADE;

zamiast:
  1. ALTER TABLE `mecze`
  2. ADD CONSTRAINT `mecze_ibfk_3` FOREIGN KEY (`druzyna1_id`) REFERENCES `druzyny` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  3. ADD CONSTRAINT `mecze_ibfk_4` FOREIGN KEY (`druzyna2_id`) REFERENCES `druzyny` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

powinno po usunięciu ustawić wartość '0' dla druzyna1_id i druzyna2_id a tym czasem dostaje
Cytat
ALTER TABLE `mecze` ADD CONSTRAINT `mecze_ibfk_3` FOREIGN KEY ( `druzyna1_id` ) REFERENCES `druzyny` ( `id` ) ON DELETE SET DEFAULT ON UPDATE CASCADE ,
ADD CONSTRAINT `mecze_ibfk_4` FOREIGN KEY ( `druzyna2_id` ) REFERENCES `druzyny` ( `id` ) ON DELETE SET DEFAULT ON UPDATE CASCADE ;
MySQL zwrócił komunikat: Dokumentacja
#1005 - Nie można stworzyć tabeli 'test.#sql-6131_a8ba48c' (Kod błędu: 150)


co robię nie tak?


--------------------
Artur
Go to the top of the page
+Quote Post
trueblue
post 30.06.2014, 07:29:56
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Proponowałem Ci zdjęcie "NOT NULL" z pól.
Natomiast jeśli chcesz użyć akcji "SET DEFAULT", to przeczytaj dobrze dokumentację.

EDIT. No, tak, ale masz klucz z tych dwóch pól. Pozostaje opcja 2, która i tak będzie kolidować z restrykcjami klucza.

Ten post edytował trueblue 30.06.2014, 07:33:55


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:51