我有表agt_action:包含3列:id,name,action_group_id,请问如何编写一个存储过程一次更新多条记录呢
(1,lihua,1)
(2,wangli,2)
(3,zhaoxin,3)
...?存储行业数据

解决方案 »

  1.   

    多个INSERT 语句之间,用分号(;)或者空格,隔开,这样数据库就认为你是在进行多条SQL语句的插入操作。
      

  2.   

    呵呵,要么把这条语句重复3遍,要么使用循环。
    SQL也支持循环,用法和C语言类似,参考:
    http://database.51cto.com/art/201009/224145.htm
      

  3.   

    是不是线程开太多了?连接池ado自己会管理,你改成单线程的试试,估计是数据库多线程访问冲突互锁吧
      

  4.   

    对了,你对更新数据的where 子句中涉及的字段是否设置了索引,这个非常重要
      

  5.   


    我设置了一个索引,这个索引是自动增长的,唯一的不过在where语句中并没有包含索引
      

  6.   

    那估计你的数据量大了之后,where子句的字段没有索引,那你定位数据就要一个一个查找,速度就肯定慢了
    where子句涉及的字段设置索引非常重要,除非你使用主键定位数据
      

  7.   


    那为什么刚开始的时候不会慢呢?刚开始的时候,你的数据量少,数据多了自然就慢,没有索引的话
    在100个数据里面找一个数
    在10000个路面找一个数
    前者肯定肯定快很多啊还有我可能没说清楚,我执行一遍线程时,这个数据量是基本不会发生改变的,我开了10 个线程,每个线程都会给它分配一个数据库连接,而且我要不断地更新数据,所以我的每个线程中的数据库连接是不会断的;也就是说我的程序变慢是完整的执行一遍线程函数过程中的,麻烦您了,谢谢我在用 show processlist;查询进程时发现我的程序所运用到的存储过程的state状态都是Sending date,是不是这个问题?
      

  8.   

    oracle 支持 array binding, 不知道你的 mysql 支持不