mysql 同时访问_mysql多线程访问

本文讨论了在多线程环境中如何安全地使用MySQL C API,包括线程安全连接、并发控制和最佳操作实践。在多线程访问MySQL时,需要注意在mysql_query()和mysql_store_result()之间确保只有一个线程操作,并使用线程锁进行同步。此外,还提到了开启事务前的清理、处理重连逻辑、避免二进制数据问题、检查受影响行数、设置连接超时、正确释放资源、使用合适的隔离级别、避免锁间隙问题等多方面的最佳实践。
摘要由CSDN通过智能技术生成

http://www.blogbus.com/skatings-logs/48527211.html

如果你用线程的编程,你应该用--with-thread-safe-client编译MySQL C API,这将使C API线程对每个连接更安全。你可以让2个线程共享相同的连接,只要如果你做下列事情:

两个线程不能同时在同一个连接上发送查询到MySQL。特别是你必须保证在一个mysql_query()和mysql_store_result()之间没有其他线程正在使用同一个连接。

许多线程能存取用mysql_store_result()检索出来的不同结果集合。

如果你使用mysql_use_result,你必须保证没有其他线程在同一个连接上正在询问任何东西,直到结果集合被关闭。

设计如下线程,验证上述内容, Thread1和Thread2使用同一个mysql连接,执行select语句:

Thread1: Thread2:

mysql_query();              sleep(1);

| |

| |

sleep(2); mysql_query();

| |

| |

mysql_store_result(); mysql_store_result();

线程2中调用mysql_query()时出错,通过mysql_error()返回的错误信息为:Commands out of sync; you can’t run this command now.

解决方法1:

一个线程分配一个mysql连接

解决方法2:

在mysql_query()之前加上线程锁,在mysql_store_r

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值