【发布时间】:2012-11-17 09:03:44
【问题描述】:
我正在尝试创建一个函数
CREATE FUNCTION `func`(param1 INT, param2 INT, param3 TEXT) RETURNS int(11)
BEGIN
INSERT INTO `table1` (`column1`, `column2`, `column3` )
VALUES (param1, param2, param3)
ON DUPLICATE KEY
UPDATE `time_stamp` = UNIX_TIMESTAMP();
RETURN last_insert_id();
END
如果它不存在,这将在表中插入一行,否则更新它。
请注意,我返回了last_insert_id(),如果函数插入,这将是正确的,否则如果它更新,则将是不可预测的。
我知道解决此问题的替代方法是使用单独的SELECTS 并确定它是否存在;如果存在,则使用该id 检索id 和update;否则就做一个普通的INSERT。
现在我的问题是:除了我现在正在做的事情之外,还有什么可以替代做 2 个sql 语句的方法吗?
编辑 1
附录:
有一个自动递增的索引。 要插入的所有值都是唯一的
我宁愿不更改索引,因为它在另一个表中被引用..
【问题讨论】:
-
请提供SHOW CREATE TABLE。 column1、column2、column3哪一个是唯一的?