Bonjour à tous,
Je rencontre un problème avec une clé étrangère que j'ai besoin de mettre à null.
J'ai une table "versions" qui contient différentes versions de logiciel :
Ainis qu'une table "taches" regroupant différentes actions à effectuer sur un logiciel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 mysql> desc versions; +----------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | libelle | varchar(45) | NO | | | | | idProjet | int(11) | NO | | | | +----------+------------------+------+-----+---------+----------------+
La clé associée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 mysql> desc taches; +-------------+----------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+----------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | idProjet | int(10) unsigned | NO | MUL | | | | idVersion | int(10) unsigned | YES | MUL | NULL | | | idUser | int(10) unsigned | NO | MUL | | | | idClient | int(10) unsigned | NO | MUL | | | | idEtat | smallint(5) unsigned | NO | MUL | | | | idSociete | int(10) unsigned | NO | | | | | titre | varchar(255) | NO | | | | | demandeur | varchar(100) | NO | | | | | description | text | NO | | | | | date_start | datetime | NO | | | | | date_end | datetime | NO | | | | | valid_teb | tinyint(1) | NO | | | | | valid_pry | tinyint(1) | NO | | | | | text | text | NO | | | | +-------------+----------------------+------+-----+---------+----------------+
Une taches peut ou non être associé à une version de logiciel. J'ai donc défini idVersion comment pouvant être null.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ALTER TABLE taches ADD CONSTRAINT fk_tache_version FOREIGN KEY(idVersion) REFERENCES versions (id) ON DELETE CASCADE ON UPDATE NO ACTION
Mais je reçois une erreur de violation de contrainte. Je me dis que c'est normal car mon id dans la table version n'est pas défini comme pouvant être à null. Je modifie donc la crationde la table comme ceci :
Et à ma grande surprise id n'est toujours pas definissable à null. Surement du à la clé primaire et à l'auto incrément ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 CREATE TABLE IF NOT EXISTS `versions` ( `id` int(10) unsigned NULL auto_increment, `libelle` varchar(45) NOT NULL, `idProjet` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
Comment puis je résoudre ce problème ?
Partager