我正在尝试使用select查询中的数据子集填充表,并且我希望定期重新创建此表。 我试图创建一个插入记录的事件,但它会复制记录。 然后我尝试删除然后在事件中创建表,但它告诉我表已经存在
这就是我想要实现的目标:
DROP TABLE IF EXISTS tablea;
CREATE TABLE tablea;
INSERT INTO tablea
SELECT * from tableb WHERE etc.
实现这一目标的正确方法是什么?
答案 0 :(得分:0)
你是否使用正确的架构?我问你的drop table命令没问题,如果你在正确的架构(use whateverdb;
),它会工作。
如果汇总了你的命令,那么
如果当前架构中存在tablea:
drop table if exists tablea;
很好
要创建表,您需要指定字段,例如。
create table tablea (column1 varchar(20), column2 int, etc etc);
或更好的是,如果表是相同的结构,您可以忽略该部分并使用create table创建表:
drop table if exists tablea;
create table tablea like tableb;
insert into tablea select * from tableb where column1 = whatever;
如果tablea不需要与tableb相同的属性,你甚至可以这样做:
drop table if exists tablea;
create table tableb as select * from tableb where column1 = whatever;
这种方法相对于它上面的唯一缺点是它不会传递定义的键和特殊属性(如果有的话)。
最后,如果你要一遍又一遍地重新创建tablea,那么,在你最初创建tablea(create table tablea like tableb;
)后,你可以继续重新运行以下两行:
truncate tablea;
insert into tablea select * from tableb where whatever;
最好是截断(清空内容)比掉落快得多,并保留你的钥匙/属性。