我的存储过程有一些问题。希望任何人都可以帮助我找出问题所在。
我使用来自weekly_schedule 的数据作为如何填写我的航班表的模板。我通过调用 CreateFlights() 来做到这一点。所有数据都按预期插入,所以我没有丢失任何数据,但由于某种原因,尽管我在 flight.id 上使用了 auto_increment,但由于某种原因,每第三行都会被跳过。
(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');