【发布时间】:2014-04-15 08:37:11
【问题描述】:
我正在尝试插入一行,但前提是它尚不存在。
我浏览了论坛,这个语法似乎是我想要的:
INSERT INTO tblSites (site,homepage) VALUES ('A','www.a.com')
WHERE NOT EXISTS (SELECT * FROM tblSites where homepage='www.a.com')
我得到一个语法错误。
You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right
syntax to use near 'WHERE NOT EXISTS (SELECT * FROM tblSites where homepage='www.a.com')'
at line 1
我已经阅读过,似乎每个人都在使用这种语法,它在我使用的版本中不可用吗?我在下面列出了一些其他选项,但我想了解为什么这对我自己的学习(和理智)不起作用。
我看过的其他方法是:
1) 替换。在我打算使用此查询的其他一些领域,我有数百万行并且可能重复。如果 REPLACE 在效率方面与上述语法相当,我只想使用它。有什么想法吗?
2)插入忽略。可能值得使用这个,tblSites 当前有(siteId,name,homepage)。我可以将主页设置为 id,因为它将是唯一的,然后我相信这会起作用(?),但我还使用 tblContentSites (siteId,contentId) 将此表链接到 tblContent(网站上的内容)和复合键 siteId+内容标识。我觉得每次在那个联结表中重复一个整数 ID 会比主页更好。也感谢对此的想法。
3)关于重复键更新-在我看来,这似乎是复制行,但只是给新行一个不同的 ID,这无异于复制数据,可能会导致我的问题。我误解了这个的用途吗?在 DUPLICATE KEY UPDATE 之后我可以更灵活地做什么?
非常感谢,
画了
【问题讨论】:
-
您在哪里得到语法错误,是哪一个?请粘贴错误。
-
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“WHERE NOT EXISTS (SELECT * FROM tblSites where homepage='www.a.com')”附近使用正确的语法