Page 1 sur 1

integrité refentielle

Posté : 23 avr. 2008, 00:55
par ludo007
Bonjour,

bonjour j'ai réalisé ma bd sur mysql pour un mon site et pour ça j'utilise easyphp 1.8 avec mysql 5 donc j'ai téléchargé la version sans installeur et que j'ai décompressé dans le répertoire easyphp et renommé l'ancienne et ajouté ..... bref je travaille avec mysql 5 et je tape les codes suivants la bd est créée sans pb pour l'intregrité référentielle mais lors d'une suppression ou de modification rien ne se passe dans la bd

Code : Tout sélectionner

$sql = 'CREATE TABLE `abonne` (' . ' `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, ' . ' `login` VARCHAR(40) NOT NULL, ' . ' `mdp` VARCHAR(40) NOT NULL, ' . ' `tel1` VARCHAR(20) NOT NULL, ' . ' `tel2` VARCHAR(20), ' . ' `nom` VARCHAR(40) NOT NULL, ' . ' `ville` VARCHAR(40) NOT NULL, ' . ' `local` TEXT, ' . ' `mail` VARCHAR(40), ' . ' `site` VARCHAR(40), ' . ' `logo` INT, ' . ' `photo1` INT, ' . ' `photo2` INT, ' . ' `photo3` INT, ' . ' `type_abo` ENUM("1","2","3") NOT NULL,' . ' `date_cons` DATE NOT NULL,' . ' `etat` ENUM("0","1") NOT NULL,' . ' `qds` VARCHAR(75) NOT NULL, ' . ' `rep` VARCHAR(40) NOT NULL, ' . ' PRIMARY KEY (`id`),' . ' UNIQUE (`login`)' . ' )'; $exreq1=mysql_query($sql,$connection) or die (mysql_error()); $sql = 'CREATE TABLE `photo_abon` (' . ' `id` INT UNSIGNED AUTO_INCREMENT, ' . ' `id_offre` INT UNSIGNED NOT NULL, ' . ' `id_abon` INT UNSIGNED NOT NULL, ' . ' `lien` TEXT NOT NULL,' . ' `lien_vgt` TEXT NOT NULL,' . ' `poids` INT UNSIGNED NOT NULL,' . ' `larg` INT UNSIGNED NOT NULL,' . ' `haut` INT UNSIGNED NOT NULL,' . ' `format` TEXT NOT NULL,' . ' PRIMARY KEY (`id`),' . ' FOREIGN KEY (id_abon) REFERENCES abonne(id) ON DELETE CASCADE ON UPDATE CASCADE' . ' )'; $exreq1=mysql_query($sql,$connection) or die (mysql_error());
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 23 avr. 2008, 01:00
par naholyr
Le moteur MyIsam ne supporte ni les contraintes ni les "ondelete".
Il faut utiliser InnoDB pour ça.

Posté : 23 avr. 2008, 01:16
par ludo007
oui mais lorsque g mets a la fin engine=Innodb la base n est plus crée et j ai une erreur qui s affiche

Posté : 23 avr. 2008, 01:19
par Sékiltoyai
Si tu ne nous donnes pas cette erreur, nous ne pourrons malheureusement pas la deviner :)

Posté : 23 avr. 2008, 05:58
par Cyrano
Vérifie quels sont les moteurs disponibles dans ta version de MySQL. Ouvre mysql en ligne de commande et exécutes la requête SHOW ENGINES; ça devrait donner une réponse dans ce style :

Code : Tout sélectionner

mysql> SHOW ENGINES; +------------+---------+----------------------------------------------------------------+ | Engine | Support | Comment | +------------+---------+----------------------------------------------------------------+ | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | | InnoDB | YES | Supports transactions, row-level locking, and foreign keys | | BerkeleyDB | NO | Supports transactions and page-level locking | | BLACKHOLE | NO | /dev/null storage engine (anything you write to it disappears) | | EXAMPLE | NO | Example storage engine | | ARCHIVE | YES | Archive storage engine | | CSV | NO | CSV storage engine | | ndbcluster | NO | Clustered, fault-tolerant, memory-based tables | | FEDERATED | NO | Federated MySQL storage engine | | MRG_MYISAM | YES | Collection of identical MyISAM tables | | ISAM | NO | Obsolete storage engine | +------------+---------+----------------------------------------------------------------+ 12 rows in set (0.00 sec) mysql>
Si en face de InnoDB tu ne vois ni YES ni DEFAULT mais NO, tu ne pourras pas utiliser l'intégrité référentielle qu'il faudra alors gérer par programmation dans ton code.

Posté : 23 avr. 2008, 20:36
par ludo007
comment g fais ca dans easyphp

Posté : 24 avr. 2008, 00:36
par ouckileou
comment g fais ca dans easyphp
Tu vas dans un moteur de recherche, tu entres "exécuter requête sql phpmyadmin", tu cliques sur entrée et tu auras plusieurs milliers de résultats. Y'a un moyen, faut se bouger et chercher un peu, surtout popur de bêtes trucs comme ça. Tu gagneras du temps tu verras.