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 :

Code automatique sur sql


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    informaticien
    Inscrit en
    Décembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Haïti

    Informations professionnelles :
    Activité : informaticien

    Informations forums :
    Inscription : Décembre 2016
    Messages : 22
    Points : 19
    Points
    19
    Par défaut Code automatique sur sql
    bonjour je travail sur MySQL
    je suis en train de prépare un Base de données scolaire.
    j'aimerais que le " Id_Eleve " soit automatique c'est a dire compose du nom et du prenom.
    exemple : Sois un eleve Ralph Emmanuel date naissance 12-01-1993. son Id_eleve sera R_E_12.
    je veux le id_eleve soit automatique . tout comme sur access. ideleve= left(nom,3)+"-"+left (prénom,1)+"-"+left(date naissance). j'aimerais quelqu'un m'aide a ce sujet svp . quel est la requête SQL que je dois utiliser.

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut Ralph Emmanuel.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    --------------
    SET AUTOCOMMIT = 0
    --------------
     
    --------------
    START TRANSACTION
    --------------
     
    --------------
    show variables like 'version'
    --------------
     
    +---------------+------------+
    | Variable_name | Value      |
    +---------------+------------+
    | version       | 5.7.17-log |
    +---------------+------------+
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE `base`
        DEFAULT CHARACTER SET `latin1`
        DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`         integer unsigned not null auto_increment primary key,
      `nom`        varchar(255)     not null,
      `prenom`     varchar(255)     not null,
      `naissance`  date             not null,
      `id_eleve`   varchar(255)     not null
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    DROP TRIGGER IF EXISTS `eleve`
    --------------
     
    --------------
    CREATE TRIGGER `eleve`
    BEFORE INSERT ON `test`
    FOR EACH ROW BEGIN
      SET NEW.id_eleve=concat(left(new.nom,1),'_',left(new.prenom,1),'_',dayofmonth(new.naissance));
    END
    --------------
     
    --------------
    insert into `test` (`nom`,`prenom`,`naissance`) values
      ('daudet',   'alphonse', '1840-05-13'),
      ('blum',     'leon',     '1872-04-09'),
      ('marchais', 'georges',  '1920-06-07')
    --------------
     
    --------------
    select * from test
    --------------
     
    +----+----------+----------+------------+----------+
    | id | nom      | prenom   | naissance  | id_eleve |
    +----+----------+----------+------------+----------+
    |  1 | daudet   | alphonse | 1840-05-13 | d_a_13   |
    |  2 | blum     | leon     | 1872-04-09 | b_l_9    |
    |  3 | marchais | georges  | 1920-06-07 | m_g_7    |
    +----+----------+----------+------------+----------+
    --------------
    COMMIT
    --------------
     
    --------------
    SET AUTOCOMMIT = 1
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Membre à l'essai
    Homme Profil pro
    informaticien
    Inscrit en
    Décembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Haïti

    Informations professionnelles :
    Activité : informaticien

    Informations forums :
    Inscription : Décembre 2016
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup mon ami vous m'avez beaucoup aidé

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    J'ose espérer que cet identifiant ne sera pas votre identifiant primaire, car ce serait une énorme bourde à tout point de vue !

    De plus, plutôt que de stocker en base de données une colonne qui n'est qu'une redondance d'informations présentes par ailleurs, il est bien préférable de créer une vue, dans laquelle cette nouvelle colonne sera issue de la concaténation des informations requises

    Toute redondance est à éviter dans une BDD !

    En plus, un trigger a un impact sur les perfs, et il faut aussi prévoir les cas où les colonnes constitutives de votre identifiant évoluent (modif du nom, du prénom...), trigger for update donc

  5. #5
    Membre à l'essai
    Homme Profil pro
    informaticien
    Inscrit en
    Décembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Haïti

    Informations professionnelles :
    Activité : informaticien

    Informations forums :
    Inscription : Décembre 2016
    Messages : 22
    Points : 19
    Points
    19
    Par défaut Code automatique sql
    Donc tu me conseilles de mettre a jour le trigger a chaque fois le nom et le prénom modif

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Non pas du tout, il faut oublier les trigger

    La première chose, est bien sur d'avoir à l'esprit que cette colonne n'est pas unique, c'est donc un identifiant virtuel multiple

    ensuite pour éviter de stocker plusieurs fois la même information créez une vue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE VIEW mavue AS
        SELECT col1, col2, [...], coln, concat(left(nom,1),'_',left(prenom,1),'_',dayofmonth(naissance))
        FROM matable
    Ainsi, si une personne change de nom, de prénom ou de date de naissance, l'identifiant reste valide
    le terme d'identifiant pour cette donnée n'est pas très adapté, parlons plutôt de raccourci d'accès ou mnémonique par exemple.

  7. #7
    Membre à l'essai
    Homme Profil pro
    informaticien
    Inscrit en
    Décembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Haïti

    Informations professionnelles :
    Activité : informaticien

    Informations forums :
    Inscription : Décembre 2016
    Messages : 22
    Points : 19
    Points
    19
    Par défaut Code automatique sql
    Ça a marche mais seulement. Le id-eleve a créer dans une table a lui mais pas dans la même table avec le nom, prénom, date naiss

  8. #8
    Membre à l'essai
    Homme Profil pro
    informaticien
    Inscrit en
    Décembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Haïti

    Informations professionnelles :
    Activité : informaticien

    Informations forums :
    Inscription : Décembre 2016
    Messages : 22
    Points : 19
    Points
    19
    Par défaut Code automatique sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Create view code-eleve as 
    Sélect col1 , col2  concat left(nom,1),'-', left(prénom,1), '-', dayofmonth(naissance)
    Ça marche mais le code montre comme une table et il a les code des étudiants comme champ

  9. #9
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonsoir,

    Désolé mais je ne comprends pas ce que vous mentionnez

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Ralph Emmanuel Voir le message
    Ça a marche mais seulement. Le id-eleve a créer dans une table a lui mais pas dans la même table avec le nom, prénom, date naiss
    Je pense que vous n'avez pas compris la différence entre une table et une vue
    La table décrit les colonnes pour les données présentes physiquement dans la base de données, ces données sont stockées dans le(s) tablespace(s) associé(s) à cette table
    La vue par contre, est une présentation logique des données de la table, une vue peut présenter les colonnes dans le même ordre que celui de la table, dans un ordre différent, une partie seulement des colonnes, et ici, dans l'exemple que je vous propose, la vue "construit" une colonne à partir de colonnes de la table (par concaténation d'une partie de ces colonnes)
    Une vue peut également présenter les données issues d'une jointure entre plusieurs tables, filtrer, trier etc...

    Il est donc tout à fait normal de ne pas voir cette colonne si vous faites un select sur la table, puisqu'elle n'existe pas
    Si par contre vous faites un select sur la vue, là vous obtiendrez bien la colonne souhaitée

    Je profite de l'occasion pour corriger le script que je vous avais proposé, car il manque un nom dans la colonne "virtuelle" de la vue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE VIEW mavue AS
        SELECT col1, col2, [...], coln, concat(left(nom,1),'_',left(prenom,1),'_',dayofmonth(naissance)) as Macolonne
        FROM matable

  11. #11
    Membre à l'essai
    Homme Profil pro
    informaticien
    Inscrit en
    Décembre 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Haïti

    Informations professionnelles :
    Activité : informaticien

    Informations forums :
    Inscription : Décembre 2016
    Messages : 22
    Points : 19
    Points
    19
    Par défaut Code automatique sql
    Merci pour la rectification je vais modifier ma code

Discussions similaires

  1. [11g] Procédure stockée PL/SQL ajout automatique sur table
    Par schix dans le forum PL/SQL
    Réponses: 10
    Dernier message: 06/10/2015, 16h04
  2. [WD-2007] Balises de code automatique sur word
    Par FramanKalima dans le forum Word
    Réponses: 2
    Dernier message: 10/07/2015, 10h01
  3. [MySQL] Sécurité et publication du code PHP et SQL sur le forum
    Par redoran dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 25/11/2012, 21h26
  4. Réponses: 3
    Dernier message: 26/08/2007, 23h36
  5. Connexion automatique sur base SQL (Login/pass mémorisé)
    Par Fredo67 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/10/2005, 16h24

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