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;