首页 > 数据库 >Mysql,replace into,存在则更新,不存在则插入

Mysql,replace into,存在则更新,不存在则插入

时间:2023-01-13 11:13:08浏览次数:43  
标签:-- into Mysql replace 123 user Tom

REPLACE INTO 首先判断数据是否存在;如果不存在,则插入;如果已存在则更新(先删除再插入)

 

注意:

  1. 根据主键或唯一索引判断记录是否已存在,所以插入数据的表必须要有主键或者唯一索引!否则的话,REPLACE INTO 会直接插入数据(相当于INSERT),会导致表中出现重复数据。

  2. 如果不写某个字段的值则会使用默认值,如果该字段没有定义默认值则报错。

  3. 要使用REPLACE INTO,必须同时拥有表的INSERT和 DELETE权限。

MySQL replace into 有三种形式:1. replace into tbl_name(col_name, ...) values(...)2. replace into tbl_name(col_name, ...) select ...3. replace into tbl_name set col_name=value, ...alter table t_user change id id int(11) not null AUTO_INCREMENT; -- 修改主键为自增
-- 修改后的DDLCREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(40) NOT NULL, `password` varchar(40) NOT NULL, `sex` varchar(4) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `save_unique_index` (`username`,`password`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
1. replace into tbl_name(col_name, ...) values(...)-- 修改前的数据1  Tom  123  男2  Tom  1234  男3  Jerry  234  女4  Tom  12345  男replace into t_user(username,password) values('Tom','123');-- 报错,Field 'sex' doesn't have a default valuereplace into t_user(username,password,sex) values('Tom','123','男');-- 受影响的行: 2 ,先删除,再插入-- 修改后的数据2  Tom  1234  男3  Jerry  234  女4  Tom  12345  男5  Tom  123  男replace into t_user(username,password,sex) values('Tom','123','女');  -- 受影响的行: 2-- 修改后的数据2  Tom  1234  男3  Jerry  234  女4  Tom  12345  男6  Tom  123  女replace into t_user(username,password,sex) values('Tom','123456','男'); -- 受影响的行: 1-- 修改后的数据2  Tom  1234  男3  Jerry  234  女4  Tom  12345  男6  Tom  123  女7  Tom  123456  男

 

2. replace into tbl_name(col_name, ...) select ...CREATE TABLE `t_user2` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(40) NOT NULL,  `pwd` varchar(40) NOT NULL,  `sex` varchar(4) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;t_user:2  Tom  1234  男3  Jerry  234  女4  Tom  12345  男6  Tom  123  女7  Tom  123456  男t_user2:1  Tom  123  男2  Tonny  123  女3  Jerry  234  女replace into t_user(username,password,sex) select  name,pwd,sex from t_user2 ; -- 受影响的行: 5-- 修改后,(t_user)6删除,(t_user)8添加,(t_user)9添加,(t_user)3删除,(t_user)10添加 -- (唯一索引,所以‘Tom  123  女’会删除,再插入‘Tom  123  男’)t_user:2  Tom  1234  男4  Tom  12345  男7  Tom  123456  男8  Tom  123  男9  Tonny  123  女10  Jerry  234  女

 

3. replace into tbl_name set col_name=value, ...replace into  t_user set username = 'Tommy' ; -- Field 'password' doesn't have a default value
replace into t_user set username = 'Tommy' ,password = '1234567'; -- Field 'sex' doesn't have a default value
replace into t_user set username = 'Tommy' ,password = '1234567',sex = '男'; -- 受影响的行: 1-- 修改后2 Tom 1234 男4 Tom 12345 男7 Tom 123456 男8 Tom 123 男9 Tonny 123 女10 Jerry 234 女11  Tommy  1234567  男  -- 这一行是新加的replace into t_user set username = 'Tommy' ,password = '1234567',sex = '女'; -- 受影响的行: 2-- 修改后2 Tom 1234 男4 Tom 12345 男7 Tom 123456 男8 Tom 123 男9 Tonny 123 女10 Jerry 234 女12  Tommy  1234567  女 -- 把id=11的记录delete后,再insert id=12的记录

标签:--,into,Mysql,replace,123,user,Tom
From: https://www.cnblogs.com/luoguixin/p/17048979.html

相关文章

  • 【学习日志】MongoDB为什么选择B树,而MySQL选择B+树实现索引
    先说B树和B+树的区别B树:非叶子节点也存储数据B+树:只有叶子节点存储数据,且所有叶子节点通过指针相连接。为什么MongoDB选择B树而,MySQL选择B+树呢?两种数据结构的区别摆在......
  • python-备份mysql数据库
    python-备份mysql数据库1.python-备份mysql数据库源码安装python3环境下载版本:https://www.python.org/downloads/source/wgethttps://www.python.org/ftp/pyth......
  • Mysql索引失效场景
    Mysql索引失效场景 序言 众所周知在Mysql中,通过使用索引的方式可以加快查询速度,从而避免全文搜索;而索引本身就像图书馆中所有书籍目录,通过查询关键字就能快速找......
  • python-pymysql-基本使用
    python-pymysql-基本使用1.pymysql-基本使用创建表[root@pythontmp]#mysql-h127.0.0.1-utest-p'Test@963852'WelcometotheMariaDBmonitor.Comma......
  • python-pymysql安装和数据库安装
    python-pymysql安装和数据库安装1.pymysql安装安装python连接数据库pymysql模块[root@python~]#pip3installPyMySQlLookinginindexes:http://mirror......
  • python-pymysql模块介绍
    python-pymysql模块介绍1.pymysql模块介绍pymysql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。但目前pymysql支持python3.x而后者不支持3.x版本。pymysql......
  • python pymysql-增删改查
    pymysql-增删改查1.pymysql-增删改查#!/usr/bin/envpython3#_*_coding:utf-8_*_#Author:shichao#File:.pyimportpymysqlconn=pymysql.connect(host='1......
  • python pymysql-参数使用
    pymysql-参数使用1.pymysql-参数使用connect()函数常用参数:方法描述host数据库主机地址user数据库账户passwd账户密码db使用的数据库port......
  • MySQL8升级对备份的影响
    ​最近将MySQL5.7.26升级到8.0.27后,备份遇到了一些问题。升级采用的是使用复制节点的备份,使用perconaxtrabackup做的的物理备份。对于MySQL5.7,用的是PXB2.4做的物理备份......
  • MySQL表连接及其优化(转)
    https://blog.csdn.net/weixin_30895723/article/details/113914791导读:在做MySQL数据库的优化工作时,如果只涉及到单表查询,那么95%的慢SQL都只需从索引上入手优化即可,通......