我看过很多关于这一篇的文章。我想和你联系。 我的问题是: 一张表:ID(INT, Unique, Auto Increase) , Title(varchar), Content(text), Keywords(varchar)
我的 PHP 代码将始终插入新记录,但不接受基于标题或关键字的重复记录。因此,标题或关键字不能是主字段。我的 PHP 代码需要检查现有记录并同时插入 10-20 条记录。
所以,我这样检查:
SELECT * FROM TABLE WHERE TITLE=XXX
如果什么都不返回,那么我就执行 INSERT。 我读了一些其他的帖子。有人说:
INSERT IGNORE INTO Table values()
另一个人建议:
SELECT COUNT(ID) FROM TABLE
如果它返回 0,则执行 INSERT
我不知道这些查询中哪个更快。
我还有 1 个问题,这些查询有什么不同和更快:
SELECT COUNT(ID) FROM ..
SELECT COUNT(0) FROM ...
SELECT COUNT(1) FROM ...
SELECT COUNT(*) FROM ...
它们都显示了表中的记录总数,但我不知道 mySQL 认为数字 0 还是 1 是我的 ID 字段?即使我执行 SELECT COUNT(1000) ,我仍然得到我的表的总记录,而我的表只有 4 列。
我正在使用 MySQL Workbench,是否可以选择此应用程序的测试速度?
最佳答案
我会使用 insert on duplicate key update命令。文档中的一条重要评论指出:“...如果表上有一个多列唯一索引,则更新使用(似乎使用)更新查询中的(唯一索引的)所有列。”
因此,如果示例中的表有 UNIQUE(Title,Keywords) 约束,那么,您将使用:
INSERT INTO table (Title,Content,Keywords) VALUES ('blah_title','blah_content','blah_keywords')
ON DUPLICATE KEY UPDATE Content='blah_content';
它应该可以工作,而且是对数据库的一次查询。
关于mysql - 如果存在于 SQL/MySQL 上,哪一个在检查和跳过插入上更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8981011/