[英]MySQL procedure to insert and delete
我想創建一個MySQL過程以插入表中並從另一個表中刪除...
我的程序:
insert ignore into old_events (select * from events where start < now());
delete from events where start < now();
錯誤消息: insert ignore into old_events (select * from events where start < now()); delete from events where start < now();
insert ignore into old_events (select * from events where start < now()); delete from events where start < now();
使用INSERT INTO SELECT
時刪除()
:
insert ignore into old_events
select *
from `events`
where `start` < now();
考慮使用列列表而不是*
:
insert ignore into old_events(col1, col2, ...)
select col1, col2, ...
from `events`
where `start` < now();
請記住, now()
是與時間相關的,您應將其結果存儲在變量中以進行比較。 在INSERT
和DELETE
之間, now()
可能會更改。
如我所見,您將查詢插入到old_events列中,但您從事件表中選擇了所有列。 因此您只能選擇要插入到old_events列中的那列
INSERT IGNORE INTO old_events
SELECT * FROM events
WHERE start < now();
DELETE FROM events WHERE start < now();
在我的系統中,我創建了兩個表
create table events( id int,event_name varchar(20), start timestamp default current_timestamp);
create table old_events( id int,event_name varchar(20), start timestamp default current_timestamp);
然后將6行插入events
表
insert into events(id,event_name, start) values
(1,'event1','2016-02-18'),
(2,'event2','2016-02-19'),
(3,'event3','2016-02-20'),
(4,'event4','2016-02-21'),
(5,'event5','2016-02-22'),
(6,'event6','2016-02-23');
我執行開始current time
小於current time
選擇查詢
SELECT * FROM events
WHERE start < now();
返回5行, 請參見示例
但是在sqlfiddle中,我們只能運行select查詢,因此在我的系統中執行以下查詢之后,它會成功執行,並將5行插入到old_events中,其中start小於current time
INSERT INTO old_events
SELECT *
FROM EVENTS WHERE START < NOW();
之后,我從old_events表中選擇行,其返回5行
select * from old_events;
之后,我執行刪除查詢並將其從事件表中刪除5行
DELETE FROM EVENTS WHERE START < NOW();
在所有步驟之后,我events and old_events table
從events and old_events table
執行兩個查詢選擇
select * from events; // its return 1 row where start is greater than now()
select * from old_events; // its return 5 row where start is less than now()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.