精华内容
下载资源
问答
  • MySQL批量插入与更新

    万次阅读 多人点赞 2019-05-20 16:07:36
    在使用insert into select时,MySQL会对select的数据加S(读)锁,在事务较为复杂的场景下可能有死锁的风险,下篇博客会总结。 replace into replace into表示插入替换数据,当记录中有PrimaryKey,或者unique索引...

    目录

    准备表和测试数据

    insert into values、insert into select

    replace into

    insert into on duplicate key update

    insert ignore into

    总结


    准备表和测试数据

    CREATE TABLE `t` (
      `id` int(11) NOT NULL,
      `age` int(11) DEFAULT NULL,
      `name` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    CREATE TABLE `t_copy` (
      `id` int(11) NOT NULL,
      `age` int(11) DEFAULT NULL,
      `name` varchar(20) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    -- t_copy 创建两条条数据
    INSERT INTO t_copy VALUES (3, 30, 'c'),(4, 22, 'd');

    insert into values、insert into select

    INSERT INTO t 
    VALUES
      (1, 20, 'a'),
      (2, 26, 'b');
    
    -- 两张表的字段要一一对应
    INSERT INTO t 
      SELECT id,age,name from t_copy where id < 10;

    结果:

    1  20  a
    2  26  b
    3  30  c
    4  22  d

    注:insert into values 或 insert into select批量插入时,都满足事务的原子性与一致性,一条出错整体都会回滚。在使用insert into select时,MySQL会对select的数据加S(读)锁,在事务较为复杂的场景下可能有死锁的风险,下篇博客会总结。 


    replace into

    replace into表示插入替换数据,当记录中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据替换(先delete再insert),如果没有数据效果则和insert into一样。

    REPLACE INTO t (id,age) VALUES (2, 15);
    

    结果:

    1  20  a
    2  15  NULL
    3  30  c
    4  22  d


    insert into on duplicate key update

     insert into on duplicate key update表示插入更新数据,当记录中有PrimaryKey,或者unique索引的话,如果数据库已经存在数据,则用新数据更新(update),如果没有数据效果则和insert into一样。

    INSERT INTO t 
        (id, age) 
    VALUES 
        (3, 28),
        (4, 29) 
    ON DUPLICATE KEY UPDATE
        id = VALUES(id),
        age = VALUES(age);
    

    结果:

    1  20  a
    2  15  NULL
    3  28  c
    4  29  d


    insert ignore into

    insert ignore into表示尽可能的忽略冲突,暴力插入。

    INSERT IGNORE INTO t VALUES(1,30,'f'),(6,33,'o');

    结果:

    1  20  a
    2  15  NULL
    3  28  c
    4  29  d
    6  33  o

    注:可以看到,虽然记录为1的数据会产生主键冲突,但insert ignore into会进行忽略,继续执行记录6的插入。另外除了唯一约束的冲突,类似于字段超出长度、类型不匹配等错误,insert into on duplicate key update与replace into都会整体失败,而insert ignore into不会失败,它对于类型不匹配且无法转化的提供了默认值,超出长度的按照最大长度进行了截取。


    总结

    1. insert into values 或 insert into select批量插入时,都满足事务的原子性与一致性,但要注意insert into select的加锁问题。
    2. replace into与insert into on duplicate key update都可以实现批量的插入更新,具体是更新还是插入取决与记录中的pk或uk数据在表中是否存在。如果存在,前者是先delete后insert,后者是update。
    3. insert ignore into会忽略很多数据上的冲突与约束,平时很少使用。
    展开全文
  • mysql批量删除大量数据 假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条,直接执行DELETEFROMsyslogsWHEREstatusid=1会发现删除失败,因为lockwait...

    mysql批量删除大量数据

    假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM syslogs WHERE statusid=1 会发现删除失败,因为lock wait timeout exceed的错误。

    因为这条语句所涉及的记录数太多,因此我们通过LIMIT参数分批删除,比如每10000条进行一次删除,那么我们可以利用 MySQL这样的语句来完成:

     DELETE FROM syslogs WHERE status=1 ORDER BY statusid LIMIT 10000;

    然后分多次执行就可以把这些记录成功删除。

    注:

    执行大批量删除的时候注意要使用上limit。因为如果不用limit,删除大量数据很有可能造成死锁。

    如果delete的where语句不在索引上,可以先找主键,然后根据主键删除数据库。

    平时update和delete的时候最好也加上limit 1 来防止误操作。

    展开全文
  • mysql批量修改语句

    2018-03-28 10:35:12
    mysql批量语句,传入list 批量修改mysql批量语句,传入list 批量修改mysql批量语句,传入list 批量修改
  • 首先介绍用到的软件msyql 8.0.13客户端 DataGrip 2019.2.1,Navicat 12.1接前面文章mysql 批量更新的两种方法数据准备select count(*) from account;800万数据.批量修改数据条数1000 条1,首先测试批量update set ...
    03348ce3eb291f7f6772cdb4098733ce.png

    首先介绍用到的软件

    msyql 8.0.13

    客户端 DataGrip 2019.2.1,Navicat 12.1

    接前面文章mysql 批量更新的两种方法

    数据准备select count(*) from account;800万数据.

    批量修改数据条数1000 条

    1,首先测试批量update set where id =? 性能:

    6a02518b66bdbbf0edfe88b99ccb016b.png
    a70c29448e411f6afcef70b75fc1ba20.png

    2、update account t1 inner join (

    b741a43074ec054896e7125825a717cf.png
    12f9e0d44446f3a61712de7c302c3a13.png

    3、update account t set (case when

    1d9f4ebd15303e5765a41b4b8478c324.png
    690e4b1fc8cf22d8f0e68374ed84e08e.png

    总结:三种方法没有大的性能差异,项目中可以灵活选用。

    附:测试用到的文件

    https://gitee.com/lucifinil/publicfile/raw/master/mysql/batch_update/b1.sql

    https://gitee.com/lucifinil/publicfile/raw/master/mysql/batch_update/b2.sql

    https://gitee.com/lucifinil/publicfile/raw/master/mysql/batch_update/b3.sql

    展开全文
  • mysql批量操作

    2020-01-09 17:30:37
    MySQL 批量操作 MySQL批量SQL插入性能优化
    展开全文
  • MySQL批量杀进程的操作方法发布时间:2020-05-26 11:27:43来源:51CTO阅读:174作者:三月下文我给大家简单讲讲关于MySQL批量杀进程的操作方法,大家之前了解过相关类似主题内容吗?感兴趣的话就一起来看看这篇文章...
  • #mysql批量修改字段类型#获得修改语句并存储到临时表USE db;CREATE TEMPORARY TABLE XIUGAI SELECT CONCAT( ‘alter table ‘,table_name,‘ MODIFY COLUMN ‘,column_name, ‘ 新类型 DEFAULT NULL;‘ ) AS col ...
  • mysql批量删除多条记录的sql语句

    万次阅读 2017-04-25 10:03:13
    mysql批量删除多条记录的sql语句
  • mysql批量添加

    2020-07-05 17:34:26
    mysql批量添加最简单但是挺麻烦的
  • 主要介绍了mysql批量删除大量数据的相关资料,需要的朋友可以参考下
  • update product_image set image='a.jpeg' where product_id = 100 update product_image set image='b.jpeg' where ...mysql 批量修改例子表结构: CREATE TABLE `asc_product_image` ( `product_image_id` i...
  • 利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题。1.批量插入。我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不固定),循环3000次。每次在循环到100次...
  • mysql批量更新产生的原因自然是因为一条条数据去更新会降低效率,导致性能变差,其二就是一条条数据更新会导致写sql语句麻烦,下面我将介绍2种批量更新的update语句1:创建临时表,先更新临时表,然后从临时表中...
  • mysql批量更新我们可能使用update,replace into来操作,下面小编来给各位同学详细介绍mysql 批量更新与性能吧批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:UPDATE mytable SET myfield = ...
  • mysql批量删除大量数据假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM syslogs WHERE statusid=1 会发现删除失败,因为lock...
  • mysql 批量插入

    2020-12-23 13:38:54
    mysql 批量插入应用场景插入流程视图展示 应用场景 对于需要批量插入数据库的场景,如果采用循环遍历单次插入的话,数据量大时效率较慢,故建议采用批量插入 插入流程 // 1.获取待插入数据来源 // 2.组合待插入数据...
  • MySQL批量操作

    2019-07-25 09:50:48
    Mybatisd对MySQL批量插入、批量更新及批量删除语句 https://yq.aliyun.com/articles/667282?utm_content=m_1000023365
  • 首先介绍用到的软件msyql 8.0.13客户端 DataGrip 2019.2.1,Navicat 12.1接前面文章mysql 批量更新的两种方法数据准备select count(*) from account;800万数据.批量修改数据条数1000 条1,首先测试批量update set ...
  • mysql批量删除表

    2020-06-02 11:03:30
    mysql批量删除表
  • mysql批量增加字段.txt

    2020-06-26 19:08:16
    MySQL批量对表增加指定字段,会快速实现批量字段的添加。写了2个存储存储过程,执行即可。方便快速!
  • mysql 批量更新多条记录的方法:UPDATEmytableSETmyfield=CASEidWHEN1THEN'value'WHEN2THEN'value'WHEN3THEN'value'ENDWHEREidIN(1,2,3)这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅...
  • mysql批量修改字符编码,可以把整个数据库的所有表的charset统一设置为utf-8的。
  • mysql批量导出批处理脚本,每次手动导出太麻烦了,写了这个批量导出脚本.使用方式:直接新建一个daochu.bat在mysql的bin目录下,然后直接双击执行即可daochu.bat文件内容如下@echo offrem 杀死mysql服务器taskkill /F /...
  • mybatis+mysql批量插入和批量更新一、批量插入批量插入数据使用的sql语句是:insert into table (字段一,字段二,字段三) values(xx,xx,xx),(oo,oo,oo)mybatis中mapper.xml的代码如下:useGeneratedKeys="true">...
  • kettle的mysql批量导出建表语句,可以快捷循环换导出mysql建表语句,可以下载下来学习参考
  • mysql更新语句很简单,更新一条数据的某个字段,一般这样写:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即可:UPDATE ...
  • mysql批量修改和批量新增 ** ** 批量新增: ** 一般语言或者框架都有自己封装好的,当然可以直接用拼接的方式,如下: INSERT INTO t VALUES (1, 20, ‘a’), (2, 26, ‘b’), (3, 30, ‘c’); – 两张表的字段要一一...
  • mysql批量替换

    2018-04-24 22:23:53
    update wp_posts set post_content=replace(post_content,'http://www.biteng.net','https://www.biteng.net')mysql批量替换
  • mysql批量添加数据

    千次阅读 2017-09-20 09:52:54
    mysql批量添加数据
  • MySql批量drop table

    2019-01-22 08:27:00
    MySql批量drop table 原文:MySql批量drop table 今天发现数据库中很多没用的表,想清理掉。 发现mysql好像不支持类似这样的写法:drop table like "%r" 在oracle中,查了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,360
精华内容 6,544
关键字:

mysql批量

mysql 订阅