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 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');
两种选择①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');
相关文章推荐
- 处理mysql tokudb引擎无法启用问题一例
- mysql中日期比较大小方法详解
- session 加入mysql库的方法
- Mysql 查看使用命令行查看数据库和表,字段等信息
- 不能远程连接mysql解决方法
- MySql 数据库管理工具(navicat for mysql)
- mysql开启远程连接及修改root密码
- MySql插入中文乱码以及中文插入异常
- mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localho
- windows下mysql忘记root密码的解决方法
- mysql windows安装
- [置顶] "net start mysql"启动MySQL服务报错,提示发生系统错误5解决方法
- mysql 查询数据库表结构
- 查询mysql的外键应用信息
- mysqli_result类的方法和属性
- session如何加入mysql库
- mysql 日期操作 增减天数、时间转换、时间戳
- MySQL innodb_undo_tablespaces相关参数
- mysql优化
- mysql初步入门