PDA

View Full Version : [MySQL] Problema foreign key


cech
11-06-2013, 18:32
Ciao a tutti, ho bisogno di urgente aiuto, sto facendo un progetto in mysql per l'università ed ho il seguente problema:

ho 2 tabelle (Eventi e Campionati), sulla tabella eventi ho come chiave esterna la chiave primaria di campionati, il problema è che un evento può essere anche singolo quindi può non appartenere ad un campionato. Quindi ho bisogno, in certi casi, di fare a meno della chiave esterna e metterla a NULL, il problema è che quando inserisco mi da sempre l'errore: Cannot add or update a child row: a foreign key constraint fails. Come devo risolvere??

Grazie

demos88
11-06-2013, 22:13
A me permette di inserire valori NULL come valore di un attributo chiave esterna... posta il codice SQL con cui hai creato le tabelle e la relazione.

cech
11-06-2013, 22:54
CREATE TABLE Campionati(
IDCampionato CHAR(8) PRIMARY KEY,
Nome CHAR(40) NOT NULL,
Sponsor CHAR(20),
Anno YEAR NOT NULL,
Stato CHAR(30),
Organizzatore CHAR(8),
FOREIGN KEY (Organizzatore) REFERENCES Organizzatori(Id) ON DELETE SET NULL
)ENGINE=InnoDB;

CREATE TABLE Eventi(
CodiceEvento CHAR(8) PRIMARY KEY,
Nome CHAR(40) NOT NULL,
Data DATE NOT NULL,
Tipo ENUM ('Gara', 'Prove') NOT NULL,
Circuito CHAR(8) NOT NULL,
Organizzatore CHAR(8),
Campionato CHAR(8),
FOREIGN KEY (Circuito) REFERENCES Circuiti(CodCircuito),
FOREIGN KEY (Organizzatore) REFERENCES Organizzatori(Id),
CONSTRAINT camp FOREIGN KEY (Campionato) REFERENCES Campionati(IDCampionato) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB;


relazione 1:N (piu eventi per un campionato, un evento appartiene ad un solo campionato)

non mi dà errore quando vado a inserirli io direttamente ma mi da errore solo quando lo faccio da una pagina php (qui sotto il codice):

<?php
session_start();
$username=$_SESSION['usernamed'];
include "connect.php";
mysql_select_db("lceccon",$conn);

$codice=$_POST['codiceevento'];
$nome=$_POST['nome'];
$data=$_POST['data'];
$radio=$_POST['radio'];
$circuito=$_POST['circuito'];
$campionato=$_POST['campionato'];

$organizzatore="SELECT * FROM Organizzatori o WHERE Mail='$username'";
$org=mysql_query($organizzatore,$conn) or die (mysql_error());
$row=mysql_fetch_assoc($org);
$id=$row['Id'];
$query="INSERT INTO `Eventi` (`CodiceEvento`, `Nome`, `Data`, `Tipo`, `Circuito`, `Organizzatore`, `Campionato`) VALUES ('$codice', '$nome', '$data', '$radio', '$circuito', '$id', '$campionato')";
$ris=mysql_query($query,$conn) or die (mysql_error());
?>