避免重复行mysql
每当我在我的表上运行插入时,我都想避免重复。如果唯一链接已保存,则应更新该行。在这种情况下可以使用ON DUPLICATE KEY UPDATE
?我一直在尝试,但它不会工作避免重复行mysql
id cat_id cat_name prod_group link
------ ------ ----------------------- ----------------------------- ---------------------
1 5 Notebooks Alienware /url_to/what_is/unique
10 5 Notebooks Latitude /url_to/what_is/unique
11 3 Desktops Alienware /url_to/what_is/unique
12 3 Desktops Optiplex /url_to/what_is/unique rquery=na
20 3 Desktops Legacy-System /url_to/what_is/unique rquery=na
21 3 Desktops Studio /url_to/what_is/unique rquery=na
22 1 Monitore und Elektronik Axim Electronic /url_to/what_is/unique %40%2CAxim%2BElectronic&rquery=na
27 1 Monitore und Elektronik TV /url_to/what_is/unique rquery=na
28 2 Handys und Tablets Tablet /url_to/what_is/unique rquery=na
29 2 Handys und Tablets Mobile Device /url_to/what_is/unique rquery=na
30 4 Drucker Printer /url_to/what_is/unique
31 6 Server und Netzwerk Cloud Product /url_to/what_is/unique
我的查询
$sql="INSERT INTO drivers_cat_copy(cat_id,cat_name,prod_group,link)
VALUES('$id','$name','$p','$cat_url')".
"ON DUPLICATE KEY UPDATE cat_id='$id',cat_name='$name',prod_group='$p',link='$cat_url'";
表格属性
CREATE TABLE `drivers_cat_copy` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cat_id` int(1) DEFAULT NULL,
`cat_name` varchar(64) DEFAULT NULL,
`prod_group` varchar(64) DEFAULT NULL,
`link` varchar(1054) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=77 DEFAULT CHARSET=latin1
你可以写一个存储过程
proc_insert_or_update(VAR1, var2,varN,链接)
如果链接存在 UPDATE查询 ELSE INSERT查询
http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html
作为OP解决方案的存储过程就像用火箭筒杀死蚊子,矫枉过正。 – 2012-08-02 21:52:39
是的,你可以,如果你想与匹配的唯一键的记录更新值使用对重复密钥更新。当然,这意味着你必须在桌面上拥有唯一的键。
'链接'列必须定义为主键或唯一键才能使'插入..重复键更新'语法正常工作。
执行'Describe TableName'语句以打印表格及其关键字的描述。
现在你已经张贴你的表的模式,你可以看到表中只定义了一个密钥,ID列的关键。
你可以这样做:
ALTER TABLE drivers_cat_copy 添加唯一索引link_uniq_index(链接(1054));
但是,它不会很有效率。你应该看看这个问题的第一个答案,以获得更好的解决方案:MySQL: How to alter varchar(255) UNIQUE column to UNIQUE Text NOT NULL?
你可以发表表架构和你说的查询不起作用吗? – 2012-08-02 21:13:54
请发布您尝试过的不起作用的内容,以便我们帮助弄清楚为什么它失败。 – 2012-08-02 21:15:19
好了一分钟 – lgt 2012-08-02 21:16:40