社区
MySQL
帖子详情
MySql多线程
rickypc
2009-08-24 03:25:49
我在C++下面使用多线程对数据库进行大量数据的插入时,发生数据丢失的情况,C++中多线程是有锁控制的,但是MySql中就不是很清楚是如何控制的。
如何可以将MySql中的表格进行锁定呢? 比方说在一个线程在对数据库进行操作的时候,避免另一个线程的操作呢?
是使用锁定吗?
...全文
410
10
打赏
收藏
MySql多线程
我在C++下面使用多线程对数据库进行大量数据的插入时,发生数据丢失的情况,C++中多线程是有锁控制的,但是MySql中就不是很清楚是如何控制的。 如何可以将MySql中的表格进行锁定呢? 比方说在一个线程在对数据库进行操作的时候,避免另一个线程的操作呢? 是使用锁定吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
vinsonshen
2009-08-24
打赏
举报
回复
那就符合了上面所说的mysql的1064的错误,那是语法的错误造成的
rickypc
2009-08-24
打赏
举报
回复
现在找到原因了,是服务器这边接收到得数据出现问题,有的只能接收到一条信息的一半。。。问题还有待进一步解决。。。谢谢各位!
ACMAIN_CHM
2009-08-24
打赏
举报
回复
怀疑是你网络转输上的问题。
只在检查了你的日志才能确认MYSQL服务端到底收到的是什么。
rickypc
2009-08-24
打赏
举报
回复
没有,我传入的全部都是一样的值,即使标号出错也是全部都错啊,但是也就是1000条相同的sql语句中出现别那么5条左右,我想会不会是因为Mysql执行的时候发生紊乱,但是我现在将每条语句执行之后sleep(1000),休眠1s之后还是出错。还是没有执行成功。why?
vinsonshen
2009-08-24
打赏
举报
回复
初步我估计是你传进去的值里面带有什么特殊符号造成的
vinsonshen
2009-08-24
打赏
举报
回复
mysql的1064的错误,那是语法的错误造成的,并不是你所说的什么锁
你抓取下这个错误的语句看看吧
ACMAIN_CHM
2009-08-24
打赏
举报
回复
检查一下你的MYSQL的错误日志和普通日志,看一下你传到MYSQL服务器端的SQL语句到底是什么。
rickypc
2009-08-24
打赏
举报
回复
我查了了,最后跟到得是在mysql_real_query(m_myConnection, SQL.c_str(),SQL.length())的时候出错的,而且在执行1000次的时候就会出现5次这样的错误。错误编号:mysql_errno(m_myConnection) = 1064(存在特殊的不合法的符号),我还是断定在执行mySql的时候因为执行两条Sql语句的时候出现干扰问题造成的。应该还是因为线程锁定的问题。
ACMAIN_CHM
2009-08-24
打赏
举报
回复
你可以用 lock tables mytable WRITE 来锁定表。
vinsonshen
2009-08-24
打赏
举报
回复
比方说在一个线程在对数据库进行操作的时候,避免另一个线程的操作呢?
-------------------------------------------------
如果你非要这样的话,则“lock table tb_name write; unlock tables”
这样的话,感觉你用多线程是多余了的吧?
mysql内部自动有锁机制,你说的数据丢失,可能是死锁或超时引起的吧,建议你在c下抓下错误日志看看。
DB服务器使用
mysql
和redis高可用框架干货
db服务器连接
mysql
+redis高可用高性能框架干货1、使用c++语言,vs2019开发垮平台[windows和linux]连接
MySql
和redis框架。2、使用
MySql
持久化玩家数据,redis做玩家数据缓存层,redis不做数据持久化。
mysql
搭配redis工作效率非常高效,就好比男女搭配干活不累,没有redis,
mysql
也能独立很好的完成用户读写请求。有了redis,用户访问数据的效率更高,时间更短,快速的完成请求。3、讲解如何保持
mysql
和redis数据强一致性策略,并在代码里实现。每次启动redis,使用管道技术,从
mysql
批量导入活跃用户数据到redis中,并设置过期时间.4、教程使用线程池技术,每个线程拥有自己独立的数据,线程绑定类。每一个实例就包含一个线程每个线程数据里包含:
mysql
连接器、redis连接器、内存回收池、安全的串行队列、条件变量、互斥量保证线程内的数据安全。5、工作原理:没有请求时,各个工作线程处于休眠状态。有读写请求时,从线程池获取一个线程,添加读写请求,把数据推送到线程工作队列中。然后工作线程获取队列的数据,进行串行工作任务安排,进行
mysql
数据库读写操作,以及redis读写数据操作,当完成工作任务时,执行下一个工作任务,同时把处理结果推送到逻辑线程,把数据给用户。6、用户读数据策略:用户获取数据首先是先从redis查找数据,redis命中,返回数据给玩家,redis命中失败,
mysql
中查找数据,然后写入数据到redis中,返回数据给用户。7、用户写数据策略:用户先从redis中删除数据,然后写数据到
mysql
中,最后再把数据写入到redis中,保持数据一致性。8、教程是一个干货教程,不是新手教程,
mysql
基础语法讲解的少,redis有讲解基础系列。教程讲解的是如何搭建一个支持高并发,高性能的读写数据库框架,使用
mysql
+redis搭配的高可用、高性能框架。该套框架在多个项目使用过,也在棋牌类项目里面使用过。
MySQL
多线程
环境下的操作要点
MySQL
多线程
环境下的操作要点:
多线程
逻辑下的初始化要领
5.7
mysql
多线程
slave
5.7
mysql
多线程
slave 1.主库需要设置参数: server_id=202 log-bin=
mysql
-bin binlog_format=row log-slave-updates sync_binlog=1 innodb_flush_log_at_trx_commit=1 2.从库配置 server_id=203 log-bin=
mysql
-bin binlog_format=row log-slave-updates slave-parallel-type=LOGICAL_CLOCK s
MYSQL
多线程
并发操作同一张表同一个字段的更新问题
MYSQL
多线程
并发操作同一张表同一个字段的更新问题? 可以用乐观锁方案: 在表里增加个字段,版本号字段 每次更新前先从数据库里获取这个版本号的值,然后更新时要同步更新版本号+1,并且增加更新条件版本号=查询出来的值。 因为更新时每次只可能有一个线程更新到数据,等到另外一个线程再去更新数据的时候版本号已经+1了,所以会更新失败,重新获取版本号再走更新流程,这样就解决了
多线程
并发更新被覆盖的问题。 而且乐观锁机制避免了长事务中的数据库加锁开销(多个线程操作过程中,都没有对数据库数据加锁),大大提升了
易语言
mysql
多线程
_易语言数据库
多线程
易语言数据库教程
为什么易语言两个线程同时对一个
MYSQL
数据?数据库有自己的连接锁定机制。如果同一台机器使用同一接口插入,则
多线程
和单线程是相同的。除非您有多个数据库服务器,然后使用
多线程
来完成上述工作,否则效率将大大提高。在
mysql
的情况下,易语言
多线程
处理数据,新手求教?而且很容易使用
mysql
的子例程~,会发现一些不稳定的现象,如程序运行不稳定、退出程序时出错、崩溃现象、
多线程
无法直接破坏组件等。例如,运...
MySQL
56,679
社区成员
56,709
社区内容
发帖
与我相关
我的任务
MySQL
MySQL相关内容讨论专区
复制链接
扫一扫
分享
社区描述
MySQL相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章