Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z kluczem obcym
Forum PHP.pl > Forum > Bazy danych > MySQL
bonio89
Witam ma zamodelowaną bazę i nie mogę dodać wpisu do tabeli z kluczmi obcymi(pozwalam na wartość NULL)
  1. -- -----------------------------------------------------
  2.  
  3. -- Table `xxx`.`PREMISSIONS`
  4.  
  5. -- -----------------------------------------------------
  6.  
  7. CREATE TABLE IF NOT EXISTS `xxx`.`PREMISSIONS` (
  8.  
  9. `id` INT NOT NULL AUTO_INCREMENT ,
  10.  
  11. `name` VARCHAR(45) NULL ,
  12.  
  13. PRIMARY KEY (`id`) )
  14.  
  15. ENGINE = InnoDB;
  16.  
  17. -- -----------------------------------------------------
  18.  
  19. -- Table `xxx`.`COMPANIES`
  20.  
  21. -- -----------------------------------------------------
  22.  
  23. CREATE TABLE IF NOT EXISTS `xxx`.`COMPANIES` (
  24.  
  25. `id` INT NOT NULL AUTO_INCREMENT ,
  26.  
  27. `name` VARCHAR(45) NULL ,
  28.  
  29. `nip` VARCHAR(45) NULL ,
  30.  
  31. `street` VARCHAR(45) NULL ,
  32.  
  33. `city` VARCHAR(45) NULL ,
  34.  
  35. `code` VARCHAR(45) NULL ,
  36.  
  37. PRIMARY KEY (`id`) )
  38.  
  39. ENGINE = InnoDB;
  40.  
  41.  
  42.  
  43.  
  44.  
  45. -- -----------------------------------------------------
  46.  
  47. -- Table `xxx`.`DELIVLERYADDRESS`
  48.  
  49. -- -----------------------------------------------------
  50.  
  51. CREATE TABLE IF NOT EXISTS `xxx`.`DELIVLERYADDRESS` (
  52.  
  53. `id` INT NOT NULL AUTO_INCREMENT ,
  54.  
  55. `name` VARCHAR(45) NULL ,
  56.  
  57. `street` VARCHAR(45) NULL ,
  58.  
  59. `code` VARCHAR(45) NULL ,
  60.  
  61. `city` VARCHAR(45) NULL ,
  62.  
  63. PRIMARY KEY (`id`) )
  64.  
  65. ENGINE = InnoDB;
  66.  
  67.  
  68.  
  69.  
  70.  
  71. -- -----------------------------------------------------
  72.  
  73. -- Table `xxx`.`USERS`
  74.  
  75. -- -----------------------------------------------------
  76.  
  77. CREATE TABLE IF NOT EXISTS `xxx`.`USERS` (
  78.  
  79. `id` INT NOT NULL AUTO_INCREMENT ,
  80.  
  81. `login` VARCHAR(45) NULL ,
  82.  
  83. `pass` VARCHAR(45) NULL ,
  84.  
  85. `passdate` DATETIME NULL ,
  86.  
  87. `ldate` DATETIME NULL ,
  88.  
  89. `phone` VARCHAR(45) NULL ,
  90.  
  91. `email` VARCHAR(45) NULL ,
  92.  
  93. `name` VARCHAR(45) NULL ,
  94.  
  95. `lastname` VARCHAR(45) NULL ,
  96.  
  97. `USERScol` VARCHAR(45) NULL ,
  98.  
  99. `premissions` INT NOT NULL ,
  100.  
  101. `company` INT NULL DEFAULT NULL ,
  102.  
  103. `delivleryaddress` INT NULL DEFAULT NULL ,
  104.  
  105. PRIMARY KEY (`id`) ,
  106.  
  107. INDEX `fk_USERS_PREMISSIONS_idx` (`premissions` ASC) ,
  108.  
  109. INDEX `fk_USERS_COMPANY1_idx` (`company` ASC) ,
  110.  
  111. INDEX `fk_USERS_DELIVLERYADDRESS1_idx` (`delivleryaddress` ASC) ,
  112.  
  113. CONSTRAINT `fk_USERS_PREMISSIONS`
  114.  
  115. FOREIGN KEY (`premissions` )
  116.  
  117. REFERENCES `xxx`.`PREMISSIONS` (`id` )
  118.  
  119. ON DELETE NO ACTION
  120.  
  121. ON UPDATE NO ACTION,
  122.  
  123. CONSTRAINT `fk_USERS_COMPANY1`
  124.  
  125. FOREIGN KEY (`company` )
  126.  
  127. REFERENCES `xxx`.`COMPANIES` (`id` )
  128.  
  129. ON DELETE NO ACTION
  130.  
  131. ON UPDATE NO ACTION,
  132.  
  133. CONSTRAINT `fk_USERS_DELIVLERYADDRESS1`
  134.  
  135. FOREIGN KEY (`delivleryaddress` )
  136.  
  137. REFERENCES `xxx`.`DELIVLERYADDRESS` (`id` )
  138.  
  139. ON DELETE NO ACTION
  140.  
  141. ON UPDATE NO ACTION)
  142.  
  143. ENGINE = InnoDB;


Daje takiego inserta:

  1. INSERT INTO USERS SET `login`='adrian', `pass`='67a74306b06d0c01624fe0d0249a570f4d093747', `passdate`='2013-05-23 16:34:21', `ldate`='2013-05-23 16:34:21', `phone`='77894564566', `email`='asd@asd', `name`='Adrian', `lastname`='Dasa', `premissions`='3', `company`='', `delivleryaddress`=''


Dostaje taki błąd:
  1. #1452 - Cannot add or update a child row: a foreign key constraint fails (`xxx`.`USERS`, CONSTRAINT `fk_USERS_COMPANY1` FOREIGN KEY (`company`) REFERENCES `COMPANIES` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)


Nie wiem czy zrobiłem dobry model w workbeanchu.
gothye
Wg. tego modelu ,musisz dodać pozycje w COMPANIES a dopiero potem w USERS
bonio89
no ale właśnie ja nie chcę dodawać za każdym razem wpisu do COMPANIES, tylko w USERS wstawić NULLa
gothye
więc dodaj klucz oby w tabli users => COMPANIES (odwrotnie tak jak teraz masz)
bonio89
Tutaj zależy mi na relacji 1:n (COMPANIES:USERS) gdzie nie każdy rekord z USERS jest powiązany z COMPANIES. Może zrobć tabele pośrednią USERS_COMPANIES?
Crozin
Pusty tekst ("") i brak danych (NULL) to dwie zupełnie inne rzeczy i nie można ich stosować przemiennie.
bonio89
fakt, przeoczyłem to facepalmxd.gif . Już poprawiony INSERT działa thumbsupsmileyanim.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.