IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Insertion avec contraintes qui ne fonctionnent pas


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Points : 301
    Points
    301
    Par défaut Insertion avec contraintes qui ne fonctionnent pas
    Bonjours a tous,

    Alors voici mon problem:
    J'ai un requete SQL qui insere des donnees dans une table jusque la rien de bien mechant, mais quand j'insere mes donnees, certaines changent comme par en chantement.

    Voici la structure de mes tables :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    CREATE TABLE IF NOT EXISTS `adgroup_keyword` (
      `keyword_google_id` int(10) unsigned NOT NULL,
      `adgroup_google_id` int(10) unsigned NOT NULL,
      `status_id` int(10) unsigned NOT NULL,
      `matching_id` int(10) unsigned NOT NULL,
      `keyword_name` varchar(100) default NULL,
      PRIMARY KEY  (`keyword_google_id`,`adgroup_google_id`),
      KEY `adgroup_keyword_FKIndex1` (`matching_id`),
      KEY `adgroup_keyword_FKIndex2` (`status_id`),
      KEY `adgroup_keyword_FKIndex3` (`adgroup_google_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    CREATE TABLE IF NOT EXISTS `adgroup_keyword_report_daily` (
      `timestamp` timestamp NOT NULL default CURRENT_TIMESTAMP,
      `adgroup_google_id` int(15) unsigned NOT NULL,
      `keyword_google_id` int(15) unsigned NOT NULL,
      `min_CPC` float default NULL,
      `max_CPC` float default NULL,
      `impression` int(10) unsigned default NULL,
      `clicks` int(10) unsigned default NULL,
      `avg_pos` float default NULL,
      `cost` decimal(10,4) default NULL,
      PRIMARY KEY  (`timestamp`,`adgroup_google_id`,`keyword_google_id`),
      KEY `adgroup_keyword_report_daily_FKIndex1` (`keyword_google_id`,`adgroup_google_id`),
      KEY `adgroup_google_id` (`adgroup_google_id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    ALTER TABLE `adgroup_keyword_report_daily`
      ADD CONSTRAINT `adgroup_keyword_report_daily_ibfk_5` FOREIGN KEY (`keyword_google_id`) REFERENCES `adgroup_keyword` (`keyword_google_id`),
      ADD CONSTRAINT `adgroup_keyword_report_daily_ibfk_1` FOREIGN KEY (`keyword_google_id`, `adgroup_google_id`) REFERENCES `adgroup_keyword` (`keyword_google_id`, `adgroup_google_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
      ADD CONSTRAINT `adgroup_keyword_report_daily_ibfk_4` FOREIGN KEY (`adgroup_google_id`) REFERENCES `adgroup_keyword` (`adgroup_google_id`);
    Et voici la requete que j'execute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO adgroup_keyword_report_daily VALUES( '2008-01-07 23:44:19', 483258165, 4659358005, 0.25,
    1.59, 1, 2, 7, 2.7200);
    Et voici le resultat que j'obtient :

    timestamp 2008-01-07 23:44:19
    adgroup_google_id 483258165
    keyword_google_id 4294967295
    min_CPC 0.25
    max_CPC 1.59
    impression 1
    clicks 2
    avg_pos 7
    cost 2.7200

    Ce que je ne comprend pas c'est que le keyword_google_id se change comme par enchantement...
    Le keyword_google_id que j'essaye d'inserer n'existe pas. Donc selon mes contraintes d'integritees, la bdd devrait me refuser l'insertion. Au lieu de cela elle l'autorise et insere un id proche de celui que je voulait inserer.

    Merci de m'eclairer sur ce probleme assez mysterieux.

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 927
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 927
    Points : 6 041
    Points
    6 041
    Par défaut
    Citation Envoyé par Aide MySQL
    l'intervalle de validité d'une colonne d'entiers INT va de -2147483648 à 2147483647. Si vous essayez d'insérer -9999999999 dans une colonne de ce type, la valeur sera ramenée à la plus proche possible, c'est à dire -2147483648. De même, si vous essayez d'insérer 9999999999, 2147483647 sera stocké à la place.

    Si la colonne INT possède l'attribut UNSIGNED, l'intervalle de validité est aussi large, mais les valeurs extrêmes se décalent vers 0 et 4294967295. Si vous essayez de stocker -9999999999 et 9999999999 dans cette colonne, vous obtiendrez respectivement 0 et 4294967296.
    le INT(10) ne signifie pas qu'on à un capacité de mémorisation de 10 chiffres..., c'est juste un format de restitution.

  3. #3
    Membre averti Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Points : 301
    Points
    301
    Par défaut
    Merci je pensais également a cette possibilité.

    Cependant pourquoi MySQL ne me dit pas qu'il est impossible d'insérer cet enregistrement puisque cet ID n'existe pas ?

    J'ai bien une contrainte qui devrait m'avertir de ce probleme et ne pas m'insérer mon enregistrement en m'affichant une violation de clef étrangère ? non ?

    Pourquoi est ce que cette contrainte n'est pas violée ?

    Merci

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 927
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 927
    Points : 6 041
    Points
    6 041
    Par défaut
    Es-tu certain que la valeur 4294967295 est absente dans la table "maitre" ?

    Car, la définition SQL de la colonne étant la même, lors de l'insertion de la vraie valeur (4659358005), la même transformation a du s'opérer...

  5. #5
    Membre averti Avatar de max44410
    Étudiant
    Inscrit en
    Juin 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2003
    Messages : 426
    Points : 301
    Points
    301
    Par défaut
    Merci pour les infos c'était exactement mon probleme

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/12/2010, 12h58
  2. [MySQL] insertion et update qui ne fonctionnent pas
    Par nox77 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 24/06/2010, 14h27
  3. Manoeuvre avec htmlentities qui ne fonctionne pas
    Par roy-mustang dans le forum Langage
    Réponses: 2
    Dernier message: 14/12/2009, 22h15
  4. [XL-2003] Problème avec code qui ne fonctionne pas
    Par NEC14 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/04/2009, 17h41
  5. [MySQL] INSERT et UPDATE qui ne fonctionnent pas
    Par philippef dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 09/07/2008, 13h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo