[ON DUPLICATE KEY UPDATE用武之地]
如果表里没有则insert,若有了则update就需要用到mysql ON DUPLICATE KEY UPDATE语法;就样就可以在代码里少写if语句来判断了
在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。
[实例讲解]
表结构
```sql
CREATE TABLE `spk_goods` (
`gid` int(11) NOT NULL auto_increment COMMENT '货物id',
`cid` int(11) NOT NULL COMMENT '所属分类id',
`name` char(30) NOT NULL COMMENT '货物名称',
PRIMARY KEY (`gid`),
UNIQUE KEY `NewIndex1` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
```
现有的表记录
![](http://image.gwalker.cn/Uploads_ArticleFiles_20141024_m_544a5d92a6863.jpg)
那么问题来了,现有一个需求。要求插入一个新的货物。若此货物在表中已经存在,则在货物名称在以前的基础上加一个后缀new;若以不存在此货物,则插入到数据库,用一条sql完成
测试一:插入表中已有的记录
sql如下:
```sql
INSERT INTO `spk_goods` (`cid`, `name`)
VALUES ( '1' , 'apple')
ON DUPLICATE KEY UPDATE
`name` = CONCAT(`name`,'new')
```
执行sql查看记录变化
![](http://image.gwalker.cn/Uploads_ArticleFiles_20141024_m_544a5dd8e6a28.jpg)
测试二:插入表中没有的记录
sql如下:
```sql
INSERT INTO `spk_goods` (`cid`, `name`)
VALUES ( '2' , 'wathermelon')
ON DUPLICATE KEY UPDATE
`name` = CONCAT(`name`,'new')
```
执行sql查看记录变化
![](http://image.gwalker.cn/Uploads_ArticleFiles_20141024_m_544a5e68833fc.jpg)