您的位置:首页 > 数据库 > MySQL

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

2016-07-15 15:04 696 查看
一,不存在则插入,不存在则更改的情况

两种选择①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');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: