Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Autonumeracja a klucze obce
Kikert
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 15.09.2008

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


Małe pytanie - jeżeli dla klucza podstawowego z numerem użytkownika ustawię opcję 'Auto Incremental' to czy:

1. Numeracja będzie się zmieniać automatycznie przy różnych operacjach (np. usunięciu użytkownika), tak, że wartości kolejnych rekordów będą zawsze tworzyć ciąg liczb naturalnych (1,2,3,...)?

2. Czy przy takich zmianach klucze obce w innych tabelach również będą się odpowiednio zmieniać?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kikert
post
Post #2





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 15.09.2008

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


Poczytałem trochę, podumałem, ale dalej nie jestem w stanie niczego wymyślić. Poniżej treść mojego posta z innego forum:

OK, narazie jest fajnie, jednak wszędzie temat jest opisany dosyć ogólnikowo, w związku z czym proszę o pomoc.

Udało mi się dowiedzieć, że chodzi tutaj o kod ON DELETE i ON ACTION w kodzie SQL.

Chciałbym się dowiedzieć, jaki będzie prawidłowy kod SQL tworzący tabele bazy danych w moim przypadku. Chciałbym, aby w sytuacji, kiedy zostanie usunięty lub zmieniony numer ID użytkownika, klucz obcy w tabeli str_messages_receivers został usunięty lub nadpisany.

Fragment diagramu EER (klucze podstawowe to klucze , a obce to czerwone romby):

(IMG:http://1.1.1.3/bmi/twojezdjecie.pl/plikinew/9/4/941283604375.jpg)

Kod dla tabeli str_users:
  1. CREATE TABLE IF NOT EXISTS `starter`.`str_users` (
  2. `user_id` INT NOT NULL ,
  3. `name` VARCHAR(50) NOT NULL ,
  4. `username` VARCHAR(20) NOT NULL ,
  5. `password` CHAR(40) NOT NULL ,
  6. `mail` VARCHAR(50) NOT NULL ,
  7. `access_id` TINYINT NOT NULL ,
  8. `ban` TINYINT(4) NOT NULL DEFAULT 0 ,
  9. PRIMARY KEY (`user_id`) ,
  10. INDEX `users_to_groups_access_access` (`access_id` ASC) ,
  11. CONSTRAINT `users_to_groups_access_access`
  12. FOREIGN KEY (`access_id` )
  13. REFERENCES `starter`.`str_groups_access` (`access_id` )
  14. ON DELETE NO ACTION
  15. ON UPDATE NO ACTION)
  16. ENGINE = InnoDB


Kod dla tabeli str_message_receivers:
  1. CREATE TABLE IF NOT EXISTS `starter`.`str_message_receivers` (
  2. `message_id` INT NOT NULL ,
  3. `user_id` INT NOT NULL ,
  4. `read` TINYINT(4) NULL ,
  5. INDEX `fk_str_message_receivers_str_messages1` (`message_id` ASC) ,
  6. INDEX `fk_str_message_receivers_str_users1` (`user_id` ASC) ,
  7. CONSTRAINT `fk_str_message_receivers_str_messages1`
  8. FOREIGN KEY (`message_id` )
  9. REFERENCES `starter`.`str_messages` (`message_id` )
  10. ON DELETE NO ACTION
  11. ON UPDATE NO ACTION,
  12. CONSTRAINT `fk_str_message_receivers_str_users1`
  13. FOREIGN KEY (`user_id` )
  14. REFERENCES `starter`.`str_users` (`user_id` )
  15. ON DELETE NO ACTION
  16. ON UPDATE NO ACTION)
  17. ENGINE = InnoDB


Koniec posta. Chciałbym się również zapytać, czy można jakoś te więzy integralności ustawić w MySQL Workbench, wtedy mógłbym sobie sam popróbować.
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: 27.12.2025 - 08:12