声明变量MySQL触发器并使用该变量创建表

时间:2019-12-05 06:32:22

标签: mysql mysql-event

我有一个事件,其中我将字符串存储在变量中。现在,我想使用该变量创建一个新表。每当我的事件运行时,它都会创建一个名为“ 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

2 个答案:

答案 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

相关问题