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

PHP & Base de données Discussion :

Problème avec InnoDB [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de Jovial
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut Problème avec InnoDB
    Voilà j'ai modifié mes fichiers de conf afin d'utiliser InnoDB.
    Ca a donc l'air de marcher, puisque mes tables sont bien de type InnoDB mais par contre, ça ne me jète pas quand je ne respecte pas les contraintes de clés étrangères.

    Voilà j'aurais voulu savoir si je n'avais pas oublié qqchose dans le fichier de conf "my.ini".

    Voilà merci de votre aide

  2. #2
    Membre confirmé
    Avatar de omiossec
    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2002
    Messages : 241
    Points : 563
    Points
    563
    Par défaut
    INNODB permet d'avoir des contraintes sur les clé etrangère donc il est normale d'avoir une erreure lorsque ces contrainte ne sont pas respecté.

    Pour passer outre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SET AUTOCOMMIT=0;
    SET FOREIGN_KEY_CHECKS=0;
    ...
    Requete sql 
     
    COMMIT;
    SET FOREIGN_KEY_CHECKS=1;
    Olivier Miossec

  3. #3
    Membre du Club Avatar de Jovial
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    Merci de me répondre mais je crois que tu ne m'as pas bien lu.
    Je disais qu'en fait "il NE me jète PAS quand je ne respecte pas l'ensemble des clés étrangères" et moi justement si j'utilise InnoDB c'est pour qu'il me jète.

  4. #4
    Membre confirmé
    Avatar de omiossec
    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2002
    Messages : 241
    Points : 563
    Points
    563
    Par défaut
    Comment a tu mis tes contrainte
    est ce que tu es sur d'avoir créer des tables innodb ?
    Olivier Miossec

  5. #5
    Membre du Club Avatar de Jovial
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    mes contraintes je les ai mis avec des foreign key.
    Sinon il me semble que j'ai réglé tout comme il faut pour pouvoir utilisé InnoDB et le type de ma table est vraiment innodb.
    Donc voilà

    Je comprends pas bien pourquoi ca ne marche pas.

    CREATE TABLE tab(
    id INT PRIMARY KEY,
    idExt INT,
    FOREIGN KEY idExt REFERENCES tabExt(id));

    CREATE TABLE tabExt(
    id INT PRIMARY KEY,
    ...)

    En gros quand je crée une ligne de la première table avec le champ idExt ne correspondant à rien dans l'autre table, bah ca grogne pas et moi je voudrais que ca grogne.

    Je pense que j'ai oublié de faire un truc avec innodb...

  6. #6
    Membre chevronné

    Profil pro
    Chef de Projet / Développeur
    Inscrit en
    Juin 2002
    Messages
    599
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de Projet / Développeur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2002
    Messages : 599
    Points : 2 024
    Points
    2 024
    Par défaut
    Citation Envoyé par Jovial
    Je pense que j'ai oublié de faire un truc avec innodb...
    A mon sens, tu as plutot fait un truc de trop.
    Chez moi ça grogne et j'ai pourtant un my.ini minimaliste.

    Donne nous une copie de ton my.ini pour voir.
    --
    vanquish

  7. #7
    Membre du Club Avatar de Jovial
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    *----------------------------------------------*
    CREATE TABLE tabExt(
    id INT PRIMARY KEY) TYPE=INNODB;

    CREATE TABLE tab(
    id INT PRIMARY KEY,
    idExt INT,
    FOREIGN KEY (idExt) REFERENCES tabExt(id)) TYPE=INNODB;
    *----------------------------------------------*

    Voilà le code que j'essai de passer pour créer mes tables.
    Bon là ca marche pas il me dit
    "#1005 - Ne peut créer la table '.\annuaire\tab.frm' (Errcode: 150)"
    En fait il me créé juste la premiere
    Je comprends pas pkoi il me créé pas la seconde. La premiere apparait en Innodb
    Bon bah je retire le type=Innodb et je créé la seconde table. J'ai donc une table en innodb et une autre en myisam.

    J'alter ma seconde table en innodb. Là ca marche (??) !
    Ensuite j'essai d'ajouter la ligne suivante à la table "tab"
    "INSERT INTO `tab` ( `id` , `idExt` ) VALUES ('0', '1');"
    et là ca marche alors que moi je voudrais que ca marche pas puisque la reference 1 n'est pas présente dans la table tabExt.

    Bon bah je vais mettre le contenu de my.ini pour en finir :

    # Example mysql config file.
    # Copy this file to c:\my.cnf to set global options
    #
    # One can use all long options that the program supports.
    # Run the program with --help to get a list of available options

    # This will be passed to all mysql clients
    [client]
    #password=my_password
    port=3306
    #socket=MySQL

    # Here is entries for some specific programs
    # The following values assume you have at least 32M ram

    # The MySQL server
    [mysqld]
    #skip-innodb
    bind-address=127.0.0.1
    port=3306
    #socket=MySQL
    skip-locking
    set-variable = key_buffer=16K
    set-variable = max_allowed_packet=1M
    set-variable = thread_stack=64K
    set-variable = table_cache=4
    set-variable = sort_buffer=64K
    set-variable = net_buffer_length=2K
    server-id = 1

    # Uncomment the following if you want to log updates
    #log-bin

    # Uncomment the following rows if you move the MySQL distribution to another
    # location
    basedir = C:/Program Files/EasyPHP1-7/mysql/
    datadir = C:/Program Files/EasyPHP1-7/mysql/data/


    # Uncomment the following if you are NOT using BDB tables
    #skip-bdb

    # Uncomment the following if you are using Innobase tables
    innodb_data_file_path = ibdata1:100M
    innodb_data_home_dir = c:\ibdata
    innodb_log_group_home_dir = c:\iblogs
    innodb_log_arch_dir = c:\iblogs
    set-variable = innodb_mirrored_log_groups=1
    set-variable = innodb_log_files_in_group=3
    set-variable = innodb_log_file_size=5M
    set-variable = innodb_log_buffer_size=8M
    innodb_flush_log_at_trx_commit=1
    innodb_log_archive=0
    set-variable = innodb_buffer_pool_size=16M
    set-variable = innodb_additional_mem_pool_size=2M
    set-variable = innodb_file_io_threads=4
    set-variable = innodb_lock_wait_timeout=50

    [mysqldump]
    quick
    set-variable = max_allowed_packet=16M

    [mysql]
    no-auto-rehash
    # Remove the next comment character if you are not familiar with SQL
    #safe-updates

    [isamchk]
    set-variable = key_buffer=8M
    set-variable = sort_buffer=8M

    [myisamchk]
    set-variable = key_buffer=8M
    set-variable = sort_buffer=8M

    [mysqlhotcopy]
    interactive-timeout


    Merci encore de votre aide

  8. #8
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    salut

    en fait dans la table qui contient la contrainte réferntielle tu dois créer un index sur la clé étrangère référencée par exemple

    CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
    CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id),
    FOREIGN KEY (parent_id) REFERENCES parent(id)
    ON DELETE SET NULL
    ) TYPE=INNODB;

    sinon il ne pourra créer l'intégrité référentielle c'est spécifique à mysql

    à+
    il n'y a pas de solution sans problème.

  9. #9
    Membre du Club Avatar de Jovial
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 42
    Points
    42
    Par défaut
    Merci, ca marche
    C'était pas évident à deviner cette chose là !

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 78
    Points : 28
    Points
    28
    Par défaut
    bonjour

    j'ai le même souci et j'ai donc essayé d'indexé la clé étrangère mais cela n'a rien changé. je voulais savoir si ça pouvais venir de mon my.ini
    #------------------------ IMPORTANT ! ----------------------
    # This file is GENERATED by EasyPHP when needed so edit the
    # file C:\Program Files\EasyPHP1-8\conf_files\my.ini if you want to do
    # modifications in this file
    #-----------------------------------------------------------


    ; IMPORTANT
    ; C:/Program Files/EasyPHP1-8 is used to specify EasyPHP installation path

    [mysqld]
    datadir=C:/Program Files/EasyPHP1-8/mysql/data
    basedir=C:/Program Files/EasyPHP1-8/mysql
    bind-address=127.0.0.1
    ; Uncomment for use on USB key
    ; skip-innodb
    j'ai remarqué qu'il était bien moins complet que celui au dessus.

    Avez vous une idée. d'avance merci

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

Discussions similaires

  1. Problème avec InnoDB
    Par Dylanddd dans le forum Administration
    Réponses: 9
    Dernier message: 10/03/2011, 10h31
  2. problème avec pour activer Innodb sur Mysql
    Par jarode2 dans le forum MySQL
    Réponses: 2
    Dernier message: 28/09/2009, 18h21
  3. Problème avec la création de mes tables innoDB (Pb de Foreign Key)
    Par pofexpray dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 08/03/2007, 08h44
  4. Problème de requete avec Innodb
    Par silef dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/04/2004, 12h54
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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