插入不重复记录~~~求一mysql语句~~~ 本帖最后由 setoy 于 2012-06-27 19:09:25 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本帖最后由 xuzuning 于 2012-06-27 19:07:40 编辑 你都不看手册的吗?这样如何进步?CREATE [UNIQUE|FULLTEXT] INDEX index_name ON tbl_name (col_name[(length)],... )REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),...or REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] SELECT ...or REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name SET col_name=expression, col_name=expression,...REPLACE 功能与 INSERT 完全一样,除了如果在表中存在一个老的记录与新记录在一个 UNIQUE 或 PRIMARY KEY 上有相同的值,那么在新记录被插入之前,老的记录将被删除。查看章节 6.4.3 INSERT 句法。 换句话说,你不可以从一个 REPLACE 中访问老的记录行的值。某些老的 MySQL 版本中,你或许可以这样做,但是这是一个 Bug,现在已被修正了。 为了能够使用 REPLACE,你必须有对该表的 INSERT 和 DELETE 权限。 当你使用一个 REPLACE 时,如果新的记录行代替了老的记录行,mysql_affected_rows() 将返回 2。这是因为在新行被插入之前,重复记录行被先删除了。 这个事实使得判断 REPLACE 是否是添加一条记录还是替换一条记录很容易:检查受影响记录行的值是 1 (添加)还是 2(替换)。 注意,除非你使用一个 UNIQUE 索引或 PRIMARY KEY ,使用 REPLACE 命令是没有感觉的,因为它会仅仅执行一个 INSERT。 谢谢!手册也看了,对于replace我的理解也是需要“索引”或primarykey。而且replace都重复记录是先删除再插入,性能多少有损。能不能先判断重复然后直接插入的? 那你就这样: insert ignore into .............但是也要在 cat 和 article 上做联合唯一索引 最笨的办法就是插入前,select一下是否该值已存在。 repalce into tablename(id,name) values('.$id.','".$name."'); or replace into tablename(id,name) select id,name 按楼主的想法先select再insert这种方式还不如replace呢 建议用replace,比较简单高效。 select 白瞎,又不锁表, 根本不是原子的,白判断。直接唯一索引插入看结果。 唉~ 还是建立了唯一索引,然后insert ignore了。 求助:php有没有else if这种语句啊? 循环 排列问题? while两层循环 如何调用值? Php堕落群 第十二轮散分宣传 关于文本数据库加密,请大家指教 文字变成乱码是怎么回事? 梦网的特服号怎么申请? 请各位PHPMYADMIN高手进,能帮帮小妹吗? 能否将js中的变量传到PHP中,或者下一页中?高分相送 Apache的.htaccess文件如何起作用的?如何写.htaccess文件可以对/tmp有写的权限? mysql timestamp类型能精准毫秒吗 困扰N久,php curl配置
ON tbl_name (col_name[(length)],... )
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
VALUES (expression,...),(...),...
or REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
SELECT ...
or REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name=expression, col_name=expression,...REPLACE 功能与 INSERT 完全一样,除了如果在表中存在一个老的记录与新记录在一个 UNIQUE 或 PRIMARY KEY 上有相同的值,那么在新记录被插入之前,老的记录将被删除。查看章节 6.4.3 INSERT 句法。 换句话说,你不可以从一个 REPLACE 中访问老的记录行的值。某些老的 MySQL 版本中,你或许可以这样做,但是这是一个 Bug,现在已被修正了。 为了能够使用 REPLACE,你必须有对该表的 INSERT 和 DELETE 权限。 当你使用一个 REPLACE 时,如果新的记录行代替了老的记录行,mysql_affected_rows() 将返回 2。这是因为在新行被插入之前,重复记录行被先删除了。 这个事实使得判断 REPLACE 是否是添加一条记录还是替换一条记录很容易:检查受影响记录行的值是 1 (添加)还是 2(替换)。 注意,除非你使用一个 UNIQUE 索引或 PRIMARY KEY ,使用 REPLACE 命令是没有感觉的,因为它会仅仅执行一个 INSERT。
手册也看了,对于replace我的理解也是需要“索引”或primarykey。
而且replace都重复记录是先删除再插入,性能多少有损。
能不能先判断重复然后直接插入的?
但是也要在 cat 和 article 上做联合唯一索引