Mysql 如何在不使用视图的情况下自动计算表中的列

Mysql 如何在不使用视图的情况下自动计算表中的列,mysql,Mysql,例如,我有下表: CREATE TABLE `test` ( `total_results` int(10) unsigned NOT NULL, `num_results_as_expected` unsigned int(10) NOT NULL, ) ; 我想在不使用视图的情况下向表中添加另一列,以添加以下内容的百分比: (num_results_as_expected/total_results)*100 这在不使用视图的情况下是可能的吗 澄清。我知道可以使用select语

例如,我有下表:

CREATE TABLE `test` (
  `total_results` int(10) unsigned NOT NULL,
  `num_results_as_expected` unsigned int(10) NOT NULL,
) ;
我想在不使用视图的情况下向表中添加另一列,以添加以下内容的百分比:

(num_results_as_expected/total_results)*100
这在不使用视图的情况下是可能的吗

  • 澄清。我知道可以使用select语句,但我想在CREATETABLE语句中添加它,以便访问该表的任何人都可以使用该列

  • 澄清2:触发是正确的方法吗?这将在列中存储重复的信息

因此,要获取包括新列在内的所有列:

select total results, num_results_as_expected, (num_results_as_expected/total_results)*100 as percentage from test

这可以防止您存储任何额外的内容,在提取数据时,额外的列会神奇地出现。

创建一个常规列+添加“插入前”触发器,该触发器将在每次插入操作中使用计算值更新其值。例:

create trigger update_result before insert on test for each row
begin set new.result = (num_results_as_expected/total_results)*100;

使用触发器是最佳解决方案。您存储的值并不完全相同。如果每次运行select语句时都计算此值,则会在服务器上增加额外的过载。提示:您知道“demonrmalization”这个术语的含义吗?:)@koistya,行更新时计算的百分比将无效。@karim79,PeterMan还可以添加触发器,该触发器将在更新时触发statement@koistya,正确,但应用程序的性能不一定会更好-例如,如果执行选择的频率大于更新的频率,我的解决方案将有更多的开销,而如果数据被频繁更新,而不是频繁获取,那么您的解决方案将有更多的开销。
create trigger update_result before insert on test for each row
begin set new.result = (num_results_as_expected/total_results)*100;