我有一个事件,在该事件中,我将字符串存储在变量中。现在我想使用这个变量来创建一个新的表。每次我的事件运行时,它都会创建名为"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发布于 2019-12-05 06:35:35
因为您使用的是mon而不是@mon。即使这样,它也无法工作,因为您需要动态SQL。
但更重要的是:
别干那事!
不要乱动地创建一个桌子。表的设计应该是静态的。闻起来像是设计上的大缺陷。
发布于 2019-12-17 16:04:29
这是设计上的错误。例如,您需要做年度报告。在您的设计中,您必须连接12个表,以及如何连接的地方。这是非常缓慢的。更好的设计是创建两个表-“月份”和"reporting_periods“表的外键‘月’。这样,当您需要年度报告-您只加入两个表的ID与“哪里”。
使用相同的mysql事件,每年可以填充一次表“月份”。然后使用mysql "存储过程“(和mysql 事件)定期插入带有月份id的reporting_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)
);和reporting_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)
);关于DB设计的更多信息:归一化
https://stackoverflow.com/questions/59189494
复制相似问题