是否可以插入行但仅在值已更改时?

时间:2012-04-21 19:04:13

标签: mysql

我已经读过这个:

How do I insert into a database only if a value has changed?

所以我的问题非常接近,但这并不是一样的。

我有一个包含4个“主”列的表(即我的所有表中都有4个相同的列):

  • id - int - autoinc
  • id_origin - int - 创建第一条记录时的ID
  • date_v_start - 日期时间 - 记录有效期的开始日期
  • date_v_end - 日期时间 - 记录有效期结束(如果NULL是当前“有效”记录)

以下是此表特有的其他一些字段: - summary - 文字 - detail - 文字

知道这一点,当我将某些内容更改为该表时,这就是我所做的:

  • 我将当前记录的date_v_end更新为“now()”
  • 我插入了一条新记录,前一个date_v_start = date_v_endid_origin =与之前相同,date_v_end = NULL和(当然)summarydetail的新价值。

我的问题是,如果summarydetail的值没有改变,我不想插入新记录,这是浪费时间和硬盘空间。

有没有办法(如果可能的话,一次性):

“if summary<>'a value' or detail<>'another value' then update this record and insert this new one

所以,我的问题和我上面提供的链接之间的区别是: - 有多个字段可供比较 - 有两个请求 - 如果可能的话,我想在一个请求中提出。

1 个答案:

答案 0 :(得分:0)

以下是我在一个“php查询”中创建它的方式=一个中间带逗号的字符串(这非常耗时,但如果我的网络服务器无法再处理它,我会在一天内更改它):

CREATE TEMPORARY TABLE tmp
SELECT * FROM table
WHERE id=:id;
ALTER TABLE tmp drop ID;
INSERT INTO table
SELECT 0,tmp.* FROM tmp;
DROP TABLE tmp:
UPDATE table
SET date_v_fin=NOW()
WHERE id=LAST_INSERT_ID();