我们可以在 MySQL 事件中编写多个查询吗?
Can we write multiple queries in a MySQL event?
我想在 Mysql 事件的帮助下执行以下查询但是当我在事件中添加删除语句并尝试创建它时,出现 Mysql 错误。如果我选择跳过 delete 语句,事件将毫无问题地创建。
INSERT INTO tbl_bookings_released
(
id, row, seatnum, price,theatre_id, play_id, show_id, showtime, show_date,
isbooked, inserted_at, inserted_from, booking_num, tot_price, subzone_id,
zone_id, txn_id
)
SELECT
id, row, seatnum, price,theatre_id, play_id, show_id, showtime,
show_date, isbooked, inserted_at, inserted_from, booking_num,
tot_price, subzone_id, zone_id, txn_id
FROM tbl_bookings
WHERE (
UNIX_TIMESTAMP( NOW( ) ) - UNIX_TIMESTAMP( inserted_at )
) /60 > 2
AND booking_num NOT
IN (
SELECT booking_id
FROM tbl_cust_booking
);
DELETE
FROM tbl_bookings
WHERE (
UNIX_TIMESTAMP( NOW( ) ) - UNIX_TIMESTAMP( inserted_at )
) /60 > 2
AND booking_num NOT
IN (
SELECT booking_id
FROM tbl_cust_booking
);
下面是一个从 documentation 修改而来的示例,它为一个事件执行多个查询:
delimiter |
CREATE EVENT e_daily
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Saves total number of sessions then clears the table each day'
DO
BEGIN
INSERT INTO tbl_bookings_released
(
id, row, seatnum, price,theatre_id, play_id, show_id, showtime, show_date,
isbooked, inserted_at, inserted_from, booking_num, tot_price, subzone_id,
zone_id, txn_id
)
SELECT
id, row, seatnum, price,theatre_id, play_id, show_id, showtime,
show_date, isbooked, inserted_at, inserted_from, booking_num,
tot_price, subzone_id, zone_id, txn_id
FROM tbl_bookings
WHERE (
UNIX_TIMESTAMP( NOW( ) ) - UNIX_TIMESTAMP( inserted_at )
) /60 > 2
AND booking_num NOT
IN (
SELECT booking_id
FROM tbl_cust_booking
);
DELETE
FROM tbl_bookings
WHERE (
UNIX_TIMESTAMP( NOW( ) ) - UNIX_TIMESTAMP( inserted_at )
) /60 > 2
AND booking_num NOT
IN (
SELECT booking_id
FROM tbl_cust_booking
);
END |
delimiter ;
如果您使用 phpmyadmin 创建事件,则在 BEGIN 和 END 标记内添加多个查询
DELIMITER @@;
CREATE EVENT test_event_03
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 72 HOUR
DO
BEGIN
UPDATE complete_exam_set
SET live_status = '1'
WHERE test_time < CURRENT_TIMESTAMP ;
UPDATE complete_exam_set
SET live_status = '2'
WHERE end_time < CURRENT_TIMESTAMP ;
END;
@@;
DELIMITER ;
为什么 红十字会 即将结束
怎么了?
我想在 Mysql 事件的帮助下执行以下查询但是当我在事件中添加删除语句并尝试创建它时,出现 Mysql 错误。如果我选择跳过 delete 语句,事件将毫无问题地创建。
INSERT INTO tbl_bookings_released
(
id, row, seatnum, price,theatre_id, play_id, show_id, showtime, show_date,
isbooked, inserted_at, inserted_from, booking_num, tot_price, subzone_id,
zone_id, txn_id
)
SELECT
id, row, seatnum, price,theatre_id, play_id, show_id, showtime,
show_date, isbooked, inserted_at, inserted_from, booking_num,
tot_price, subzone_id, zone_id, txn_id
FROM tbl_bookings
WHERE (
UNIX_TIMESTAMP( NOW( ) ) - UNIX_TIMESTAMP( inserted_at )
) /60 > 2
AND booking_num NOT
IN (
SELECT booking_id
FROM tbl_cust_booking
);
DELETE
FROM tbl_bookings
WHERE (
UNIX_TIMESTAMP( NOW( ) ) - UNIX_TIMESTAMP( inserted_at )
) /60 > 2
AND booking_num NOT
IN (
SELECT booking_id
FROM tbl_cust_booking
);
下面是一个从 documentation 修改而来的示例,它为一个事件执行多个查询:
delimiter |
CREATE EVENT e_daily
ON SCHEDULE
EVERY 1 DAY
COMMENT 'Saves total number of sessions then clears the table each day'
DO
BEGIN
INSERT INTO tbl_bookings_released
(
id, row, seatnum, price,theatre_id, play_id, show_id, showtime, show_date,
isbooked, inserted_at, inserted_from, booking_num, tot_price, subzone_id,
zone_id, txn_id
)
SELECT
id, row, seatnum, price,theatre_id, play_id, show_id, showtime,
show_date, isbooked, inserted_at, inserted_from, booking_num,
tot_price, subzone_id, zone_id, txn_id
FROM tbl_bookings
WHERE (
UNIX_TIMESTAMP( NOW( ) ) - UNIX_TIMESTAMP( inserted_at )
) /60 > 2
AND booking_num NOT
IN (
SELECT booking_id
FROM tbl_cust_booking
);
DELETE
FROM tbl_bookings
WHERE (
UNIX_TIMESTAMP( NOW( ) ) - UNIX_TIMESTAMP( inserted_at )
) /60 > 2
AND booking_num NOT
IN (
SELECT booking_id
FROM tbl_cust_booking
);
END |
delimiter ;
如果您使用 phpmyadmin 创建事件,则在 BEGIN 和 END 标记内添加多个查询
DELIMITER @@;
CREATE EVENT test_event_03
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 72 HOUR
DO
BEGIN
UPDATE complete_exam_set
SET live_status = '1'
WHERE test_time < CURRENT_TIMESTAMP ;
UPDATE complete_exam_set
SET live_status = '2'
WHERE end_time < CURRENT_TIMESTAMP ;
END;
@@;
DELIMITER ;
为什么 红十字会 即将结束 怎么了?