Domanda

Sto avendo alcuni problemi con la mia stored procedure. La speranza qualcuno può aiutarmi a capire quale sia il problema.

I utilizzare i dati da weekly_schedule come modello di come riempire il mio volo-tavolo. Faccio questo chiamando CreateFlights (). Tutti i dati vengono inseriti come previsto, quindi non mi manca tutti i dati, ma per qualche ragione ogni terza fila viene saltato, nonostante il fatto che io uso auto_increment su flight.id.
(Flight.id = 1,2,4,5,7,8,10,11 ... 472.473.475.476 ...
flight.id = 3,6,9,12 ecc non sono nulla, sono semplicemente non c'è.)

Non riesco a capire perché mi vengono i fori della id-sequenza. Chiunque può aiutare me capire cosa succede? Voglio che il volo-id è in una sequenza continua.

Ecco il mio codice ..


CREATE PROCEDURE CreateFlights()
BEGIN
  DECLARE startdate date DEFAULT curdate();
  DECLARE enddate date DEFAULT date_add(startdate, interval 367 day);

 WHILE startdate <= enddate DO
 INSERT INTO flight(`id_weekly_flights`, `flightdate`)
  (select `id`, startdate  
   from `weekly_flights`
   WHERE `name_weekdays` = dayname(startdate)
   AND `fl_year` = year(startdate));
 SET startdate = date_add(startdate, interval 1 day);
 END WHILE;
END //

CREATE TABLE weekly_flights (  
id int NOT NULL AUTO_INCREMENT,  
departuretime time,  
fl_year int,  
name_weekdays varchar(9),  
id_route varchar(8),  
PRIMARY KEY (id),  
FOREIGN KEY (name_weekdays) REFERENCES weekdays(name),  
FOREIGN KEY (id_route) REFERENCES route(id)  
)  
ENGINE=INNODB;

CREATE TABLE flight (  
id int NOT NULL AUTO_INCREMENT,  
flightdate date DEFAULT NULL,   
id_weekly_flights int,  
PRIMARY KEY (id),  
FOREIGN KEY (id_weekly_flights) REFERENCES weekly_flights(id)  
)  
ENGINE=INNODB;

INSERT INTO weekly_flights(departuretime, fl_year, name_weekdays, id_route)  
VALUES  
(073000,2010,'Monday', 'LIN2STH'),  
(073000,2010,'Monday', 'STH2LIN'),  
(073000,2010,'Friday', 'LIN2STH'),  
(073000,2010,'Friday', 'STH2LIN'),  
(210000,2010,'Sunday', 'LIN2STH'),  
(210000,2010,'Sunday', 'STH2LIN'),  
(073100,2011,'Monday', 'LIN2STH'),  
(073100,2011,'Monday', 'STH2LIN'),  
(073100,2011,'Friday', 'LIN2STH'),  
(073100,2011,'Friday', 'STH2LIN'),  
(093100,2011,'Sunday', 'LIN2STH'),  
(093100,2011,'Sunday', 'STH2LIN');
È stato utile?

Soluzione

io chiamo un 'non-problema' su questo.

Sei consapevole del fatto, che non sono garantiti per avere valori auto_increment consecutivi a tutti? In realtà, non ha la garanzia che il valore auto_incremented prossimo sarà maggiore, di quella prima. Funziona in questo modo a volte per caso.

auto_increment è lì per aiutare a generare valori di identità, che è tutto ciò che devi fare, davvero.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top