解析mysqldump的delay-insert选项

 更新时间:2013年06月22日 16:00:29   作者:  
本篇文章是对mysqldump的delay-insert选项进行了详细的分析介绍,需要的朋友参考下

如果用delayed-insert插入时不用锁表。
./bin/mysqldump -uroot  -proot   --lock-tables --extended-insert  --opt --quick  --master-data  test >/home/zhanghong/opdir/tmp/test.sql
--
LOCK TABLES `student` WRITE;
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
INSERT INTO `student` VALUES (16,'hhah',3),(17,'22',3),(18,'ss',18);
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
UNLOCK TABLES;

使用delayed-insert不会锁表
./bin/mysqldump -uroot  -proot   --lock-tables --delayed-insert --extended-insert  --opt --quick  --master-data  test >/home/zhanghong/opdir/tmp/test.sql
/*!40000 ALTER TABLE `student` DISABLE KEYS */;
INSERT  DELAYED INTO `student` VALUES (16,'hhah',3),(17,'22',3),(18,'ss',18);
/*!40000 ALTER TABLE `student` ENABLE KEYS */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

当一个线程对一个表执行DELAYED语句时,会创建出一个管理程序线程(如果原来不存在),对用于本表的所有DELAYED语句进行处理。

·线程会检查是否管理程序以前已获取了DELAYED锁定;如果没有获取,则告知管理程序线程进行此项操作。 即使其它线程对表有READ或WRITE锁定,也可以获得DELAYED锁定。但是管理程序会等待所有的ALTER TABLE锁定或FLUSH TABLE锁定,以确保表的结构是最新的。

·线程执行INSERT语句,但不是把行写入表中,而是把最终行的拷贝放入一个由管理程序线程管理的队列中。线程会提示出现语法错误,这些错误会被报告到客户端中。

·因为在插入操作之前,INSERT返回已经完成,所以客户端不能从服务器处获取重复记录的数目,也不能获取生成的行的AUTO_INCREMENT值。(如果您使用C API,则出于同样的原因,mysql_info()函数不会返回任何有意义的东西。)

·当行被插入表中时,二进制日志被管理程序线程更新。在多行插入情况下,当第一行被插入时,二进制日志被更新。

相关文章

  • MySQL多表操作的外键约束教程

    MySQL多表操作的外键约束教程

    MySQL多表之间的关系可以概括为:一对一、一对多/多对一关系,多对多,这篇文章主要介绍了MySQL多表操作的外键约束,需要的朋友可以参考下
    2023-01-01
  • MySql 设置表格字段key中的值

    MySql 设置表格字段key中的值

    本文主要介绍了MySql 设置表格字段key中的值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • MySQL控制流函数(-if ,elseif,else,case...when)

    MySQL控制流函数(-if ,elseif,else,case...when)

    这篇文章主要介绍了MySQL控制流函数(-if ,elseif,else,case...when),文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • MySQL如何开启远程连接权限

    MySQL如何开启远程连接权限

    这篇文章主要介绍了MySQL如何开启远程连接权限问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • 分享MYSQL插入数据时忽略重复数据的方法

    分享MYSQL插入数据时忽略重复数据的方法

    当程序中insert时,已存在的数据不插入,不存在的数据insert。在网上搜了下,可以使用存储过程或者是用NOT EXISTS 来判断是否存在
    2013-09-09
  • MySQL基础快速入门知识总结(附思维导图)

    MySQL基础快速入门知识总结(附思维导图)

    MySQL 为关系型数据库(Relational Database Management System), 这种所谓的关系型可以理解为表格的概念, 一个关系型数据库由一个或数个表格组成,这篇文章主要给大家介绍了关于MySQL基础快速入门知识的相关资料,需要的朋友可以参考下
    2021-09-09
  • mysql8.0 windows x64 zip包安装配置教程

    mysql8.0 windows x64 zip包安装配置教程

    这篇文章主要为大家详细介绍了mysql8.0 windows x64 zip包安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 史上最全的MySQL备份方法

    史上最全的MySQL备份方法

    史上最全的MySQL备份方法,需要的朋友可以参考下。
    2010-03-03
  • Mysql经典高逼格/命令行操作(速成)(推荐)

    Mysql经典高逼格/命令行操作(速成)(推荐)

    这篇文章主要介绍了Mysql命令行操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • MYSQL增加索引语句小结

    MYSQL增加索引语句小结

    这篇文章主要给大家介绍了关于MYSQL增加索引的相关资料,索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针,需要的朋友可以参考下
    2023-09-09

最新评论