mysql on得语法_mysql"ON DUPLICATE KEY UPDATE"语法简析

[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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值