Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/12/2011, 20h06   #1
Invité de passage
 
Femme dalila alba
Inscription : octobre 2010
Messages : 8
Détails du profil
Informations personnelles :
Nom : Femme dalila alba

Informations forums :
Inscription : octobre 2010
Messages : 8
Points : 3
Points : 3
Par défaut Le nom des contraintes dans mysql

Salut a tous , je suis confrotée a un petit soucis , j'aimerai afficher le nom d'une contrainte qui est dans une table , là par exemple j'aimerai supprimer cette contrainte qui est une clé primaire . Le truc c'est que je me souviens comment je l'ai appellé : C1 , mais je voudrais savoir au cas ou (on ne sait jamais si un jour je ne me souvenais plus ) comment je pourrais l'afficher.

donc la au début j'ai attribué une clé primére a la table 'etudiant' :

Code :
1
2
ALTER TABLE etudiant 
ADD constraint c1 PRIMARY KEY(num);
Table modifiée.

et là je voudrais afficher le nom de la contrainte de la table pour pouvoir la supprimer après, bien sur j'ai déja essayé mais ça n'a pas marché :

Code :
1
2
3
4
5
SELECT *
FROM information_schema.table_constraints 
WHERE table_schema = 'num' 
  AND table_name = 'etudiant' 
  AND constraint_type = 'primary key';
là on m'a dit carrément que la table n'existait pas , puis j'ai encore essayé autre chose et pareil :

Code :
1
2
3
4
SELECT *
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'etudiant' 
  AND COLUMN_NAME = 'num';
Toute solution serait la bien venue
javote31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 20h48   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Peut être un problème de casse, utilise SHOW TABLES pour vérifier la casse du nom de la table :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> CREATE TABLE TeSt (c int PRIMARY KEY);
Query OK, 0 rows affected (0.08 sec)
 
mysql> SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'test';
Empty SET (0.01 sec)
 
mysql> SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'TEST';
Empty SET (0.00 sec)
 
mysql> SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'TeSt';
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
| NULL               | test              | PRIMARY         | test         | TeSt       | PRIMARY KEY     |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
1 row IN SET (0.01 sec)
 
mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| TeSt           |
| _test_cat      |
| _test_catprd   |
| _test_prd      |
| t              |
+----------------+
5 rows IN SET (0.01 sec)
 
mysql>
[edit] Au fait je viens de voir les SQL>
Es tu sûr d'utiliser mysql et pas plutôt oracle ?
As tu des messages d'erreurs ?
Parce que oracle n'a pas de INFORMATION_SCHEMA, c'est plutôt all_constraints (et tous les noms sont stockés en majuscule, enfin sauf si lors de la création on utilise les doubles quotes comme "TeSt" alors le nom de la table doit respecter la casse)
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 21h49   #3
Invité de passage
 
Femme dalila alba
Inscription : octobre 2010
Messages : 8
Détails du profil
Informations personnelles :
Nom : Femme dalila alba

Informations forums :
Inscription : octobre 2010
Messages : 8
Points : 3
Points : 3
Citation:
Envoyé par skuatamad Voir le message
Peut être un problème de casse, utilise SHOW TABLES pour vérifier la casse du nom de la table :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mysql> CREATE TABLE TeSt (c int PRIMARY KEY);
Query OK, 0 rows affected (0.08 sec)
 
mysql> SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'test';
Empty SET (0.01 sec)
 
mysql> SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'TEST';
Empty SET (0.00 sec)
 
mysql> SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'TeSt';
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME | TABLE_SCHEMA | TABLE_NAME | CONSTRAINT_TYPE |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
| NULL               | test              | PRIMARY         | test         | TeSt       | PRIMARY KEY     |
+--------------------+-------------------+-----------------+--------------+------------+-----------------+
1 row IN SET (0.01 sec)
 
mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| TeSt           |
| _test_cat      |
| _test_catprd   |
| _test_prd      |
| t              |
+----------------+
5 rows IN SET (0.01 sec)
 
mysql>
[edit] Au fait je viens de voir les SQL>
Es tu sûr d'utiliser mysql et pas plutôt oracle ?
As tu des messages d'erreurs ?
Parce que oracle n'a pas de INFORMATION_SCHEMA, c'est plutôt all_constraints (et tous les noms sont stockés en majuscule, enfin sauf si lors de la création on utilise les doubles quotes comme "TeSt" alors le nom de la table doit respecter la casse)

Oui j'utilise mysql , j'ai écrit shéma information parce que je l'ai lu dans un site,c'est pour cela , donc forcément la solution que tu m'as donné ne marche pas , mais j'écris toujours en miniscule dans mysql , je ne savais pas que ça avait vraiment une grande importance ..
javote31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 22h31   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Citation:
Envoyé par javote31 Voir le message
donc forcément la solution que tu m'as donné ne marche pas
Ben j'ai fait mon test sur mysql donc je pense que c'est valide, non ?

Mon intérrogation sur oracle c'était juste au cas où, car moi dans le prompt c'est écrit mysql> et pas SQL> par contre mon prompt oracle écrit généralement SQL>
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 16h38   #5
Invité de passage
 
Femme dalila alba
Inscription : octobre 2010
Messages : 8
Détails du profil
Informations personnelles :
Nom : Femme dalila alba

Informations forums :
Inscription : octobre 2010
Messages : 8
Points : 3
Points : 3
Oui ça marche ..mais quand je veux l'appliquer a mon exemple sur l'étudiant , ça marche pas..
javote31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 16h52   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Avec notre boule de cristal, nous allons voir :
1) Le texte de la requête qui ne "marche pas" ;
2) Pourquoi ça ne "marche pas".

À mon avis, c'est parce qu'elle n'a pas de jambes mais il y a peut-être une autre cause ? Ma boule de cristal est un peu floue...
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/01/2012, 23h52   #7
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 928
Points : 1 928
Citation:
Envoyé par CinePhil Voir le message
À mon avis, c'est parce qu'elle n'a pas de jambes
héhé
Moi je pense que plus classiquement elle n'a pas de bras :

Pas de bras... Pas d'INFORMATION_SCHEMA...

skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 18h07   #8
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 874
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 874
Points : 1 361
Points : 1 361
salut,

si tu cherches une contrainte, c'est `information_schema.TABLE_CONSTRAINTS` ?

mais la différence avec ta syntaxe, regarde c'est la CASSE !!!

c'est pour ça qu'il te dit que les tables n'existent pas dans tes 2 dernières requêtes...
essaye pour voir... selon les versions de mysql et systèmes d'exploitation tu devra peut-être mettre aussi information_schema en majuscule...
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 14h18   #9
Invité de passage
 
Femme dalila alba
Inscription : octobre 2010
Messages : 8
Détails du profil
Informations personnelles :
Nom : Femme dalila alba

Informations forums :
Inscription : octobre 2010
Messages : 8
Points : 3
Points : 3
Salut eric , j'ai demandé a ma prof qui m'a répondu qu'il valait mieux que la prochaine fois je nomme mes contraintes selon la clé , par exemple "contnum",merci en tous cas, je pense avoir compris mon erreur..
javote31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2012, 16h23   #10
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 874
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 874
Points : 1 361
Points : 1 361
oui pour avoir des noms d'index et de contraintes parlants

on utilise souvent des noms genre:
  • pk_truc, pour une clé primaire sur la table truc
  • fk_truc, pour une clé étrangère sur la table truc
  • k_truc, pour un index sur la table truc, etc...
on suffixe ces noms avec des numéros si besoin...

faut juste se rappeler que les noms (table, contraintes, bd, etc...) sont limités à 64 caractères

tu peux ne pas les nommer mais alors tu as des noms générés à partir de caractères alphanumériques imbuvable pour un pauvre humain...

par contre attention à la casse, surtout sous linux

__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/01/2012, 14h47   #11
Invité de passage
 
Femme dalila alba
Inscription : octobre 2010
Messages : 8
Détails du profil
Informations personnelles :
Nom : Femme dalila alba

Informations forums :
Inscription : octobre 2010
Messages : 8
Points : 3
Points : 3
Merci beaucoup Eric tu m'en as appris des choses , je serai plus prudente la prochaine fois
javote31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h20.


 
 
 
 
Partenaires

Hébergement Web