Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL 5.5.30仅在不存在时插入_Mysql_Sql_Insert_Unique - Fatal编程技术网

MySQL 5.5.30仅在不存在时插入

MySQL 5.5.30仅在不存在时插入,mysql,sql,insert,unique,Mysql,Sql,Insert,Unique,我正在尝试插入一行,但前提是该行尚不存在 我已经浏览了论坛,这个语法似乎就是我想要的: 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 cor

我正在尝试插入一行,但前提是该行尚不存在

我已经浏览了论坛,这个语法似乎就是我想要的:

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在效率上与上述语法相当,我只想使用REPLACE。有什么想法吗? 2插入忽略。可能值得使用,tblSites当前具有siteId、名称和主页。我可以将homepage设置为唯一的id,然后我相信这会起作用,但我也使用TBLContentSiteId、contentId和复合键siteId+contentId将此表链接到站点上的tblContent内容。我觉得每次在连接表中重复一个整数ID都比在主页上好。我也很欣赏你的想法。 3关于复制密钥更新-在我看来,这似乎是复制行,但只是给新行一个不同的ID,这等于复制数据,可能会导致我的问题。我是不是误解了这个用法?在重复密钥更新之后,我是否有更多的灵活性来做什么

非常感谢,

绘制了两个步骤:

如果尚未在“主页”列上添加唯一约束,请执行以下操作:

ALTER TABLE `tblSites` ADD UNIQUE(`homepage`)
使用INSERT IGNORE仅在不会导致冲突的情况下插入

INSERT IGNORE INTO `tblSites` (`site`, `homepage`) VALUES ('A','www.a.com');

您从哪里得到语法错误?哪一个?请粘贴错误。您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在“WHERE NOT EXISTS SELECT*FROM tblSites WHERE homepage=”www.a.com第1行hanks Jack附近使用的正确语法。你是说我担心在tblContentSites中使用homepage作为Id是不合理的吗?@user3535031 Jack没有改变你的主键,他只是在表中添加了一个新的约束,表示此列是唯一的。啊,我明白了,好的,谢谢!如果你对此有任何想法,我仍然有兴趣知道为什么当前语法不起作用,但我会尝试使用Jack的方法。@user3535031如果主页是自然主键,那么无论如何,让它这样做。。否则,添加一个单独的索引会更有意义。@user3535031说明查询出错的原因;在INSERT语句中不能使用WHERE: