好的,首先,我不是一个mysql大师。其次,我进行了搜索,但没有看到任何与mysql相关的内容,而且由于我的数据库知识有限,猜测两种不同数据库类型之间的语法差异并不在卡片中。
我试图在插入行之前确定表中是否已存在特定值。我决定使用两个存储过程来解决这个问题。第一个:
CREATE PROCEDURE `nExists` ( n VARCHAR(255) ) BEGIN
SELECT COUNT(*) FROM (SELECT * FROM Users WHERE username=n) as T;
END
和第二:
CREATE PROCEDURE `createUser` ( n VARCHAR(255) ) BEGIN
IF (nExists(n) = 0) THEN
INSERT INTO Users...
END IF;
END
因此,正如您所看到的,我正在尝试从createUser调用nExists。我得到的错误是没有函数存在,名称为nExists ...因为它是一个存储过程。我不清楚区别是什么,或者为什么需要这样的差异,但我是一个Java开发人员,所以也许我在这里错过了一些与DB相关的大概念。
你们有没有机会帮助我? 感谢
答案 0 :(得分:0)
只需将用户名(或主应用程序索引为)UNIQUE
索引,然后无需测试:只需尝试插入新记录即可。如果它已存在,请处理错误。如果成功,一切都很好。
它可以(而且应该)都是一个存储过程。
答案 1 :(得分:0)
我不确定它对你有什么帮助,但是......
为什么
SELECT COUNT(*) FROM (SELECT * FROM Users WHERE username=n)
而不只是SELECT COUNT(*) FROM Users WHERE username=n
?