2016-06-07 62 views
0

我想从选择查询的数据的子集填充表,我希望这个表定期重新创建。 我试图创建一个插入记录但重复记录的事件。 然后我试着放下,然后在事件创建表,但它告诉我的表已经存在mysql事件,其中删除,然后根据查询结果创建表

这就是我想实现:

DROP TABLE IF EXISTS tablea; 
CREATE TABLE tablea; 
INSERT INTO tablea 
SELECT * from tableb WHERE etc. 

什么是实现这一目标的正确方法?

回答

0

你在正确的模式?我问你的drop table命令是否正确,如果你在正确的模式(use whateverdb;),它会工作。

如果对它们进行汇总,则您的所有命令都看起来不错

如果您当前架构存在表A:

drop table if exists tablea; 

是罚款

创建一个表,你需要指定的字段如。

create table tablea (column1 varchar(20), column2 int, etc etc); 

或者更好的是,如果表是相同的结构,你可以忽略一部分,并与像语句创建表创建表:

drop table if exists tablea; 
create table tablea like tableb; 
insert into tablea select * from tableb where column1 = whatever; 

如果TableA中不需要相同属性表B,你甚至可以这样做:

drop table if exists tablea; 
create table tableb as select * from tableb where column1 = whatever; 

这种方法比它上面的stament的唯一缺点是,它不会通过自定义键和特殊性能进行(如果有NY)。

最后,如果你将要一遍又一遍重现TableA的,那么,你最初创建表A(create table tablea like tableb;)后,你可以只保留低于重新运行这两条线:

truncate tablea; 
insert into tablea select * from tableb where whatever; 

会最好是截断(清空内容)比放下要快得多,并让您的键/属性保持完整。

+0

截断不起作用在一个单一的事件。看来,任何终止行动“;”导致事件陈述的其余部分被删除 – cdeniro

+0

Truncate完美地适用于我需要的东西。问题在于我错过了BEGIN和END。感谢指针! – cdeniro