如何用存储过程一次插入多条数据?求助大牛!

一魅 2013-06-15 02:38:37
我有表agt_action:包含3列:id,name,action_group_id,请问如何编写一个存储过程一次更新多条记录呢
(1,lihua,1)
(2,wangli,2)
(3,zhaoxin,3)
...?
...全文
519 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
一魅 2013-06-17
  • 打赏
  • 举报
回复
引用 15 楼 YI_MQ 的回复:
[quote=引用 13 楼 worldy 的回复:] 对了,你对更新数据的where 子句中涉及的字段是否设置了索引,这个非常重要
我设置了一个索引,这个索引是自动增长的,唯一的[/quote] 不过在where语句中并没有包含索引
一魅 2013-06-17
  • 打赏
  • 举报
回复
引用 13 楼 worldy 的回复:
对了,你对更新数据的where 子句中涉及的字段是否设置了索引,这个非常重要
我设置了一个索引,这个索引是自动增长的,唯一的
一魅 2013-06-17
  • 打赏
  • 举报
回复
引用 12 楼 worldy 的回复:
改成单线程,慢就让他慢,观察速度感觉是否不变,再做判断
它的速度也会慢慢变慢的
worldy 2013-06-17
  • 打赏
  • 举报
回复
对了,你对更新数据的where 子句中涉及的字段是否设置了索引,这个非常重要
worldy 2013-06-17
  • 打赏
  • 举报
回复
改成单线程,慢就让他慢,观察速度感觉是否不变,再做判断
一魅 2013-06-17
  • 打赏
  • 举报
回复
引用 10 楼 worldy 的回复:
我感觉是,多线程造成访问冲突
可为什么我将它改为单线程的话也好慢呢?而多线程刚开始时好快的,假如多线程造成访问冲突的话,那么刚开始的时候就会变得好慢吧?
worldy 2013-06-17
  • 打赏
  • 举报
回复
我感觉是,多线程造成访问冲突
一魅 2013-06-17
  • 打赏
  • 举报
回复
引用 8 楼 worldy 的回复:
是不是线程开太多了?连接池ado自己会管理,你改成单线程的试试,估计是数据库多线程访问冲突互锁吧
单线程的更慢,我的每一个线程都会为它分配一个数据库连接,刚开始好快的,也许插入100条数据只要几毫秒,过了10分钟或者更久就会变得好慢,也许插一条数据就要3秒,还要说明的是,我的每个线程函数里面有个无限循环,就是在不断地更新数据库。
worldy 2013-06-17
  • 打赏
  • 举报
回复
是不是线程开太多了?连接池ado自己会管理,你改成单线程的试试,估计是数据库多线程访问冲突互锁吧
一魅 2013-06-17
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
多个INSERT 语句之间,用分号(;)或者空格,隔开,这样数据库就认为你是在进行多条SQL语句的插入操作。
引用 5 楼 worldy 的回复:
使用事务加循环
引用 3 楼 xiaoc1026 的回复:
数据量大的话建议用导入数据功能
引用 6 楼 caozhy 的回复:
呵呵,要么把这条语句重复3遍,要么使用循环。 SQL也支持循环,用法和C语言类似,参考: http://database.51cto.com/art/201009/224145.htm
这个问题我暂时不急,但是为什么我的程序在刚开始的时候对数据库进行插入或者更新之类的操作很快,但是过了一段时间后就会变得很慢呢?我用的是多线程和数据库连接池,请各位大神帮忙看下是怎么回事,谢谢了!
一魅 2013-06-17
  • 打赏
  • 举报
回复
引用 19 楼 worldy 的回复:
[quote=引用 18 楼 YI_MQ 的回复:] [quote=引用 17 楼 worldy 的回复:] 那估计你的数据量大了之后,where子句的字段没有索引,那你定位数据就要一个一个查找,速度就肯定慢了 where子句涉及的字段设置索引非常重要,除非你使用主键定位数据
那为什么刚开始的时候不会慢呢?[/quote] 刚开始的时候,你的数据量少,数据多了自然就慢,没有索引的话 在100个数据里面找一个数 在10000个路面找一个数 前者肯定肯定快很多啊[/quote] 这个问题我已经解决了,呵呵,还是没建立索引的关系,从而导致我大量的访问磁盘,所以到了后面很慢。因为我的存储过程在插入和更新之间都要对表进行判断这条数据是否存在,没有索引的话就要全表扫描了,谢谢您了
Dobzhansky 2013-06-17
  • 打赏
  • 举报
回复
oracle 支持 array binding, 不知道你的 mysql 支持不
一魅 2013-06-17
  • 打赏
  • 举报
回复
引用 21 楼 YI_MQ 的回复:
[quote=引用 19 楼 worldy 的回复:] [quote=引用 18 楼 YI_MQ 的回复:] [quote=引用 17 楼 worldy 的回复:] 那估计你的数据量大了之后,where子句的字段没有索引,那你定位数据就要一个一个查找,速度就肯定慢了 where子句涉及的字段设置索引非常重要,除非你使用主键定位数据
那为什么刚开始的时候不会慢呢?[/quote] 刚开始的时候,你的数据量少,数据多了自然就慢,没有索引的话 在100个数据里面找一个数 在10000个路面找一个数 前者肯定肯定快很多啊[/quote] 还有我可能没说清楚,我执行一遍线程时,这个数据量是基本不会发生改变的,我开了10 个线程,每个线程都会给它分配一个数据库连接,而且我要不断地更新数据,所以我的每个线程中的数据库连接是不会断的;也就是说我的程序变慢是完整的执行一遍线程函数过程中的,麻烦您了,谢谢[/quote] 我在用 show processlist;查询进程时发现我的程序所运用到的存储过程的state状态都是Sending date,是不是这个问题?
一魅 2013-06-17
  • 打赏
  • 举报
回复
引用 19 楼 worldy 的回复:
[quote=引用 18 楼 YI_MQ 的回复:] [quote=引用 17 楼 worldy 的回复:] 那估计你的数据量大了之后,where子句的字段没有索引,那你定位数据就要一个一个查找,速度就肯定慢了 where子句涉及的字段设置索引非常重要,除非你使用主键定位数据
那为什么刚开始的时候不会慢呢?[/quote] 刚开始的时候,你的数据量少,数据多了自然就慢,没有索引的话 在100个数据里面找一个数 在10000个路面找一个数 前者肯定肯定快很多啊[/quote] 还有我可能没说清楚,我执行一遍线程时,这个数据量是基本不会发生改变的,我开了10 个线程,每个线程都会给它分配一个数据库连接,而且我要不断地更新数据,所以我的每个线程中的数据库连接是不会断的;也就是说我的程序变慢是完整的执行一遍线程函数过程中的,麻烦您了,谢谢
一魅 2013-06-17
  • 打赏
  • 举报
回复
引用 18 楼 YI_MQ 的回复:
[quote=引用 17 楼 worldy 的回复:] 那估计你的数据量大了之后,where子句的字段没有索引,那你定位数据就要一个一个查找,速度就肯定慢了 where子句涉及的字段设置索引非常重要,除非你使用主键定位数据
那为什么刚开始的时候不会慢呢?[/quote] 还有我可能没说清楚,我执行一遍线程时,这个数据量是基本不会发生改变的,我开了10 个线程,每个线程都会给它分配一个数据库连接,而且我要不断地更新数据,所以我的每个线程中的数据库连接是不会断的;也就是说我的程序变慢是完整的执行一遍线程函数过程中的,麻烦您了,谢谢
worldy 2013-06-17
  • 打赏
  • 举报
回复
引用 18 楼 YI_MQ 的回复:
[quote=引用 17 楼 worldy 的回复:] 那估计你的数据量大了之后,where子句的字段没有索引,那你定位数据就要一个一个查找,速度就肯定慢了 where子句涉及的字段设置索引非常重要,除非你使用主键定位数据
那为什么刚开始的时候不会慢呢?[/quote] 刚开始的时候,你的数据量少,数据多了自然就慢,没有索引的话 在100个数据里面找一个数 在10000个路面找一个数 前者肯定肯定快很多啊
一魅 2013-06-17
  • 打赏
  • 举报
回复
引用 17 楼 worldy 的回复:
那估计你的数据量大了之后,where子句的字段没有索引,那你定位数据就要一个一个查找,速度就肯定慢了 where子句涉及的字段设置索引非常重要,除非你使用主键定位数据
那为什么刚开始的时候不会慢呢?
worldy 2013-06-17
  • 打赏
  • 举报
回复
那估计你的数据量大了之后,where子句的字段没有索引,那你定位数据就要一个一个查找,速度就肯定慢了 where子句涉及的字段设置索引非常重要,除非你使用主键定位数据
threenewbee 2013-06-15
  • 打赏
  • 举报
回复
呵呵,要么把这条语句重复3遍,要么使用循环。 SQL也支持循环,用法和C语言类似,参考: http://database.51cto.com/art/201009/224145.htm
worldy 2013-06-15
  • 打赏
  • 举报
回复
使用事务加循环
加载更多回复(4)

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧