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 :

INSERT INTO OUTFILE


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Par défaut INSERT INTO OUTFILE
    Bonjour à toutes et à tous,


    J'utilise le INSERT .... INTO OUTFILE .....

    Voici un exemple tous bête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM colis
    INTO OUTFILE 'C:\\Users\\gailup\\Desktop\\CSV.csv' FIELDS ESCAPED BY '' TERMINATED BY ';' LINES TERMINATED BY '\r\n'
    Un aperçut d'une table complète sous excel.

    Premièrement, le gros problème c'est que lorsque le fichier CSV existe déja, j'ai l'erreur suivante :
    #1086 - File 'C:\Users\gailup\Desktop\CSV.csv' already exists
    Il existe peut-être un mot clé permettant l'écrasement du fichier ?

    Puis, je voudrais ajouter les noms des colonnes comme première ligne.

    Merci d'avance pour vos réponses

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    Bonjour,

    Pour l'écrasement de fichier, ce n'est pas possible. La commande est prévue pour justement empêcher ces écrasements.
    Voici ce que dit la documentation MySQL à ce sujet :
    La forme SELECT ... INTO OUTFILE 'nom_fichier' de SELECT écrit les lignes sélectionnées dans un fichier. Le fichier est crée sur le serveur et ne peut y être déjà présent (cela permet entre autre d'éviter la destruction des tables et de fichiers tel que /etc/passwd). Vous devez avoir le droit FILE sur le serveur pour utiliser cette forme de SELECT.
    Pour le nom des colonnes, là encore, je ne crois pas que cette commande puisse le faire, vu qu'elle part d'un SELECT, qui renvoie les lignes de la table.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Par défaut
    Ok, merci beaucoup.

    C'est sympa pour sortir vite fait un rapport de dernière minutes.
    Mais bon pour une entreprise on peut trop rien faire. Je vais devoir passer des un script. Malheureusement pour 10 000 à 15 000 enregistrements PHP est bien plus long

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    pourquoi tu ne fais pas simplement une ligne de PHP pour supprimer un fichier déjà présent ? ensuite tu peux lancer le SELECT INTO OUTFILE.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Par défaut
    Citation Envoyé par Antoun Voir le message
    pourquoi tu ne fais pas simplement une ligne de PHP pour supprimer un fichier déjà présent ? ensuite tu peux lancer le SELECT INTO OUTFILE.

    Hummm vraiment pas con
    Il faut que je check si php permet de tester si un fichier est existant ou non, et dans la cas contraire le supprimer. Mais cela ne résous pas l'insertion de titre permettant d'effectuer des tri, des filtre et quelque chose de lisible pour les PDG.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Citation Envoyé par gailup Voir le message
    Hummm vraiment pas con
    Il faut que je check si php permet de tester si un fichier est existant ou non, et dans la cas contraire le supprimer.
    PHP permet !

    Citation Envoyé par gailup Voir le message
    Mais cela ne résous pas l'insertion de titre permettant d'effectuer des tri, des filtre et quelque chose de lisible pour les PDG.
    toujours en PHP, tu ajoutes ta ligne au début ensuite... si ce n'est pas possible, tu crées un nouveau fichier avec d'abord ta ligne d'en-têtes, ensuite le contenu du fichier pondu par MySQL.

    Pour les filtres et tris, en général je donne au fichier une extension .csv, voire même .xls, et ensuite le tableur préféré des PDG leur permet de tout faire.

  7. #7
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    Et bien de la même manière, tu ajoutes la ligne en question en PHP
    Et oui, PHP sait tester la présence d'un fichier dans un répertoire .

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 206
    Par défaut
    Ok, merci bien.

    Donc en PHP
    je test si le fichier existe, je le supprime dans ce cas.
    je lance ma requete SQL, qui cré le fichier CSV.
    finalement j'ajoute une ligne au debut du fichier csv créé précédement.

    cool

  9. #9
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 99
    Par défaut
    Citation Envoyé par Antoun Voir le message
    pourquoi tu ne fais pas simplement une ligne de PHP pour supprimer un fichier déjà présent ? ensuite tu peux lancer le SELECT INTO OUTFILE.
    Bonjour, c'est exactement ce que je cherche à faire mais...
    Le fichier créé par mysql appartient au user mysql et au group mysql, les droits sont rw pour tout le monde.
    Mon user apache a le droit de modifier le fichier, mais il ne peut pas le détruire !?!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM main INTO OUTFILE '/tmp/result.csv' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY ' '
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    root@server:/tmp # ll | grep result.csv
    -rw-rw-rw-   1 mysql       mysql      1687 2010-07-29 16:31 result.csv
    root@server:/tmp # 
    root@server:/tmp # su - www
    server /home/www> 
    server /home/www> echo "ma modif" > /tmp/result.csv 
    server /home/www> cat /tmp/result.csv 
    ma modif
    server /home/www> mv /tmp/result.csv /tmp/result_pour_php.csv
    mv: ne peut déplacer `/tmp/result.csv' vers `/tmp/result_pour_php.csv': Opération non permise
    server /home/www>
    J'ai donc le droit de vider le fichier et de mettre ce que je veux dedans, mais par contre je ne peux pas le supprimer.
    --> Pour l'instant je pense que je vais générer un fichier unique aléatoire à chaque fois, mais je ne trouve pas ça très optimum...

    Si quelqu'un a une idée pour arranger ça, merci de la partager.

  10. #10
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    si c'est de l'administration Linux, je ne crois pas que tu sois sur le bon forum...

  11. #11
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 99
    Par défaut
    Bonjour Antoun,
    Merci d'avoir prit le temps de me répondre.
    Mais en fait je pose la question ici, car du point de vu administration unix, il n'y a pas de problème:
    un utilisateur créé un fichier, un autre utilisateur, même en appartenant au même groupe, ne peux pas le détruire.

    Comme ce cas doit se produire pour tous ceux qui utilisent la commande INTO OUTFILE de manière basique: avec un user pour mysql et un user pour apache, j'espérais que quelqu'un puisse m'éclairer sur sa méthode.

    Bonne après midi.

  12. #12
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 99
    Par défaut
    Antoun,
    Ta réponse qui (malgré ce que je dis ci-dessus) m'a fait douté, m'a permis d'apprendre que:

    Exemple d'utilisation
    Sur certaines distribution linux,
    le sticky bit est utilisé pour le répertoire /tmp, qui doit être accessible
    en écriture par tous les utilisateurs, sans que ceux-ci se suppriment
    leurs fichiers les uns les autres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    drwxrwxrwt   86 root root  20480 tmp
    source http://fr.wikipedia.org/wiki/Permissions_Unix, paragraphe sur le Sticky Bit.

    --> Je pense donc avoir trouvé une partie de l'explication de mon problème.
    Encore merci à toi de m'avoir fait douté ;-), en tout état de cause, tu avais raison.

  13. #13
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Heureux d'avoir pu être utile !

    (même si pour ma part, je n'ai absolument rien compris )

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

Discussions similaires

  1. [Sauvegarde] SELECT * INTO OUTFILE ou bien Mysqldump ?
    Par mathieu dans le forum Administration
    Réponses: 17
    Dernier message: 25/04/2013, 17h58
  2. Réponses: 5
    Dernier message: 19/10/2006, 15h28
  3. probleme d'INSERT INTO et JavaScript
    Par Matlight dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/03/2004, 16h36
  4. erreur SQL ...INSERT INTO
    Par naidinp dans le forum ASP
    Réponses: 20
    Dernier message: 18/09/2003, 12h38
  5. Insert Into + Date
    Par BoeufBrocoli dans le forum SQL
    Réponses: 10
    Dernier message: 13/08/2003, 12h23

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