Хранимая процедура MySQL пропускает идентификаторы при автоматическом увеличении - PullRequest
1 голос
/ 25 сентября 2010

У меня проблемы с хранимой процедурой.Надеюсь, что кто-нибудь может помочь мне выяснить, в чем проблема.

Я использую данные из Weekly_schedule в качестве шаблона для того, как заполнить мою таблицу рейсов.Я делаю это, вызывая CreateFlights ().Все данные вставляются как положено, поэтому я не пропускаю никаких данных, но по какой-то причине пропускается каждая третья строка, несмотря на то, что я использую auto_increment для flight.id.
(flight.id = 1,2,4, 5,7,8,10,11 ... 472,473,475,476 ...
flight.id = 3,6,9,12 и т. Д. Не равны нулю, их просто нет.)

Я не могу понять, почему я получаю дыры в id-последовательности.Может ли кто-нибудь помочь мне понять, что происходит?Я хочу, чтобы идентификатор рейса был в непрерывной последовательности.

Вот мой код ..


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');

1 Ответ

3 голосов
/ 25 сентября 2010

Я называю это "не проблема".

Известно ли вам о том, что вам вовсе не гарантировано наличие последовательных значений auto_increment? На самом деле, вам не гарантируется, что следующее значение auto_increment ed будет больше, чем предыдущее. Просто так иногда работает по стечению обстоятельств.

auto_increment призван помочь вам в создании значений идентичности, вот и все, что нужно, на самом деле.

...