我正在尝试将记录插入到具有唯一键的表中,并返回插入记录的ID。如果该唯一键已存在,我想返回现有记录的ID。
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_module_get_id`(IN code_prefix CHAR(4), IN code_num INT, IN module_name VARCHAR(100), IN url VARCHAR(100))
BEGIN
SET @auto_id = NULL;
SELECT `Module Table ID` INTO @auto_id
FROM `module`
WHERE `Code Prefix` = code_prefix AND `Code Num` = code_num;
-- Optionally one insert
IF @auto_id IS NULL AND code_prefix IS NOT NULL AND code_num IS NOT NULL THEN
INSERT INTO `module` (`Code Prefix`,`Code Num`, `Name`, `url`)
VALUES (code_prefix, code_num, module_name, url);
SET @auto_id = LAST_INSERT_ID();
END IF;
SELECT @auto_id AS res;
END
DB_connector.query('CALL insert_module_get_id(?,?,?,?)',
[code_prefix, code_number, name, url],
callback);
问题是回调永远不会被调用。如果使用唯一数据调用它,那么数据将按预期插入数据库,但不会调用回调。
为了增加这个谜团,前面的过程执行回调罚款。 工作程序是
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_code_prefix`(IN
codePrefixIns CHAR(4))
BEGIN
SET @codePrefix = NULL;
SELECT `Code Prefix` INTO @codePrefix
FROM `module base`
WHERE `Code Prefix` = codePrefixIns;
-- Optionally one insert
IF @codePrefix IS NULL AND codePrefixIns IS NOT NULL THEN
INSERT INTO `module base` (`Code Prefix`)
VALUES (codePrefixIns);
END IF;
END
为什么这会正确调用回调。
对于数据库原理图,请参阅:Github Source这个问题不是最新的,但原理图是