我有一个事件,其中我将字符串存储在变量中。现在,我想使用该变量创建一个新表。每当我的事件运行时,它都会创建一个名为“ mon ”的表。我在做什么错了?
BEGIN
DECLARE onlyweek INT;
DECLARE mon VARCHAR(20);
SET @mon = "rehan";
CREATE TABLE mon(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
capacity INT NOT NULL
);
END
答案 0 :(得分:2)
因为您使用mon
而不是@mon
。即便如此,它也无法正常工作,因为您需要动态SQL。
但是更重要的是:
不要动态创建表格。表设计应该是静态的。闻起来像是一个很大的设计缺陷。
答案 1 :(得分:0)
这是一个设计错误。例如,您需要报告该年度。在您的设计中,您必须连接12个表以及如何联接。这很慢。 更好的设计是使用表“ months”的外键创建2个表-“ months”和“ reporting_periods”。这样,当您需要年度报告时,您只需按ID将带有“ where”的2个表联接起来。
表'months'可以每年使用相同的mysql事件填充一次。 然后使用mysql“ stored procedure”(和mysql event)定期插入带有月ID的report_period。月的名称可以将“年”表示为“错误的方式”,也可以将字段“年” =“更好”。
CREATE TABLE months(
id int auto_increment,
name varchar(10),
number int not null,
year int not null,
constraint monthes_pk
primary key (id)
);
和report_period
CREATE TABLE reporting_period(
id INT auto_increment,
period_id INT NOT NOT,
capacity INT NOT NULL,
constraint `reporting_period_pk`
primary key (id),
constraint `reporting_period__fk`
foreign key (period_id) references months (id)
);
有关数据库设计的更多信息:normalization