Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di P75
    Registrato dal
    Jul 2001
    Messaggi
    41

    [MySQL] Indici compositi ed autoincrement: è possibile...?

    Salve,
    mi domando se sia possibile creare degli indici compositi, composti da 2 campi, il cui campo secondario abbia un autoincrement legato al valore del primo.

    Ad esempio un indice composito formato da: anno int(4), numero (int 10) dove inserendo nel campo anno il valore relativo, venga generato un numero per quell'anno.


    2008 | 1
    2008 | 2
    2008 | 3

    2009 | 1 <---- anno diverso, nuova numerazione
    2009 | 2
    2008 | 4 <---- riprende la numerazione del 2008

    Ho un po' cercato sul sito di mySql ma non ho trovato informazioni particolarmente illuminanti.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Prova con un trigger:

    codice:
    delimiter $$
    
    create trigger progressivo before insert on tabella 
        for each row begin 
        if (select count(*) from tabella where anno = new.anno) = 0 then   
        set new.id = 1;
        else
        set new.id = (select max(id) from tabella where anno = new.anno) + 1;
        end if; 
    end;
    $$
    
    delimiter ;

  3. #3
    Utente di HTML.it L'avatar di P75
    Registrato dal
    Jul 2001
    Messaggi
    41
    grazie per la tua risposta,
    devo dedurre quindi che non esite una funzionalità nativa che permette questo tipo di indici?

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    No. L'unica soluzione è quella di ricorrere a un trigger come quello che ti ho scritto.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da nicola75ss
    No. L'unica soluzione è quella di ricorrere a un trigger come quello che ti ho scritto.
    Rispolvero questa discussione perchè le mie convinzioni erano sbagliate.
    In realtà è fattibilissmo.

    codice:
    create table progressivo (
      anno smallint not null,
      numero int unsigned not null auto_increment,
      primary key (anno,numero)
    ) engine=myisam;
    
    insert into progressivo(anno) values (2008),(2008),(2007),(2008),(2007),(2005),(2006),(2006),(2008),(2010)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.