首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声明变量MySQL触发器并使用该变量创建表

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

Stack Overflow用户
提问于 2019-12-05 06:32:22
回答 2查看 160关注 0票数 0

我有一个事件,在该事件中,我将字符串存储在变量中。现在我想使用这个变量来创建一个新的表。每次我的事件运行时,它都会创建名为"mon“的表。我做错什么了?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

发布于 2019-12-05 06:35:35

因为您使用的是mon而不是@mon。即使这样,它也无法工作,因为您需要动态SQL。

但更重要的是:

别干那事!

不要乱动地创建一个桌子。表的设计应该是静态的。闻起来像是设计上的大缺陷。

票数 2
EN

Stack Overflow用户

发布于 2019-12-17 16:04:29

这是设计上的错误。例如,您需要做年度报告。在您的设计中,您必须连接12个表,以及如何连接的地方。这是非常缓慢的。更好的设计是创建两个表-“月份”和"reporting_periods“表的外键‘月’。这样,当您需要年度报告-您只加入两个表的ID与“哪里”。

使用相同的mysql事件,每年可以填充一次表“月份”。然后使用mysql "存储过程“(和mysql 事件)定期插入带有月份id的reporting_period。月名可以包括年份作为“不好的方式”,也可以有字段‘年份’=‘更好的一个’。

代码语言:javascript
复制
CREATE TABLE months(
    id int auto_increment,
    name varchar(10),
    number int not null,
    year int not null,
    constraint monthes_pk
    primary key (id)
);

和reporting_period

代码语言:javascript
复制
   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)
   );

关于DB设计的更多信息:归一化

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59189494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档