我可以将查询指定为字段的默认值吗?

时间:2016-01-06 11:23:47

标签: mysql sql database field

我的意思是:

create table Measures (
id_user int,
date timestamp,
measure_1 double default 'select measure_1 from Measures where data = '**/**/****'',
measure_2 double default 'select measure_1 from Measures where data = '**/**/****'');

这样我插入了db中保存的最后一个度量值。 有可能吗?

2 个答案:

答案 0 :(得分:4)

Not directly:

  

11.7数据类型默认值

     

...默认值必须是常量;它不能是一种功能或表达。

您必须在应用程序级别或@Timekiller建议的触发器中执行此操作。

答案 1 :(得分:4)

您可以通过插入前trigger来完成此操作。

检查NEW.measure_1是否为空,如果是,则执行选择和存储结果。

<强> UPD:

对,我昨天有点匆忙,以后忘了举个例子。触发器是复杂默认值的良好替代品 - 它将透明地工作,看起来就像数据库用户角度的默认值,并且您不必在应用程序级别上执行任何操作,因为触发器存储在数据库中本身。它看起来像这样:

CREATE TRIGGER `measures_bi_trigger` BEFORE INSERT ON `Measures`
 FOR EACH ROW BEGIN
if NEW.measure_1 is null then
  SET NEW.measure_1 = (select measure_1 from Measures where ... limit 1);
end if;
if NEW.measure_2 is null then
  SET NEW.measure_2 = (select measure_2 from Measures where ... limit 1);
end if;
END

where条件中的内容并不完全清楚,因此您必须自己替换...。请注意,您的查询应该只返回一行,因此要么使用MAXorder by ... limit 1这样的聚合函数。如果您的查询未返回任何行,则会插入NULL