mysql replace into,insert into ... on duplicate key

 

一,不存在则插入,存在则更改的情况

两种选择①REPLACE INTO t_score (NO,score)VALUES ('a','100') ;要保证no是唯一主键,这个语句,如果是不存在插入式,mysql 返回受影响行数为1,如果是存在则更新,则返回受影响行数为2;如果这个表里有个自增ID的情况,那么存在则更新的时候自增ID会每次增加1,但是存在则更新会使自增ID增加2。即使每次执行的时候数据一样,也会执行更新,返回更改行数为2。

②INSERT INTO t_score(NO,score) VALUES('a','102' )ON DUPLICATE KEY UPDATE score='103',或者INSERT INTO t_user(userno,DATA)  VALUES ('d','9899') ON DUPLICATE KEY UPDATE DATA=VALUES(DATA);no保证唯一主键,第一次执行受影响行数为1,core存入值为102,第二次执行受影响行数为2,自增ID不变设为n,socre存入值为103,但是下一次主键自增会变成n+2

 select * from t_score;
+----+------+-------+
| id | no   | score |
+----+------+-------+
| 46 | a    | 103   |
| 48 | b    | 102   |
+----+------+-------+

CREATE TABLE `t_score` (

  `id` int(11) NOT NULL AUTO_INCREMENT,
  `no` varchar(11) DEFAULT NULL,
  `score` varchar(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `NewIndex1` (`no`)

) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8

 

 总之每次replace更改每次都会更新  都会使自己的自增主键更改为最新生成的主键,INSERT INTO t_score(NO,score) VALUES('a','102' )ON DUPLICATE KEY UPDATE score='103', 在不存在的情况下会插入102,在存在的情况下会更改为103,自己的自增主键不改变,但是会影响到后续再次生成的主键

 

二,不存在则插入,存在则不插入的情况

①如果有主键的话,用普通的insert into就可以

INSERT INTO t_user(userno,DATA)  VALUES ('d','9899') ON DUPLICATE KEY UPDATE DATA=DATA;

②无主键的情况

INSERT INTO t_value (NAME,VALUE) SELECT 'a','102' FROM DUAL WHERE NOT EXISTS (SELECT NAME FROM t_value WHERE NAME='a');

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值