在工作中,我在向数据库库中添加数据的时候通常for update的方式,然后进行复制粘贴的方式,但是很多前辈告诉我这样做很不规范,容易出现死锁等一系列问题,所以向各位大侠请教,望给予赐教。

解决方案 »

  1.   

    参考论坛中的这篇文章:http://blog.csdn.net/wyzsc/article/details/6247712
      

  2.   

    你加个条件,保证没有锁住其他人的记录不就行了么。如:select * from table_name where 1=2 for update;
    这样不会锁住别人的记录,然后你再往里面站数据呗。
      

  3.   

    select * from table_name where 1=2 for update;
    这样不会锁住别人的记录,然后你再往里面站数据呗。
      

  4.   

    补充一下,我是想把几十条或者几百条数据插入数据库,如果用update可能会很费时费力
      

  5.   

    谁让你用update了。
    你不是复制粘贴么。
      

  6.   

    一楼前辈提供的参考文章正是我现在用的方式,但是我的导师告诉我,尽量不要用这种方式,因为excel表里可能会有残留的空格等问题,对数据库造成不良影响,有没有更好地办法,确保万无一失呢?
      

  7.   

    SQLSEVER里有一个类似的工具,我以前EXCEL数据导ORACLE一直用它的。
      

  8.   

    存为 csv 然后用文本导入器 导入
    for update 会产生锁的 你查询多少条记录 就锁多少行 
    查询多表 就锁多表
      

  9.   

    我是新人,请问一下
    select * from table_name where 1=2 for update;
    中的 1=2 代表什么
      

  10.   

    1=2 代表什么 代表false 
    这样就不会锁住记录了。
      

  11.   

    哦,那既然他是false,那这样写完之后,我还能把数据加进去吗
      

  12.   

    你不想锁表,教你一个笨办法,,,create table TABLE_B AS SELECT *FROM TABLE_A WHERE 1=2
    先创建一张表,然后对创造的TABLE_B进行for update,数据加完后,提交,再把 TABLE_B表的数据insert into 到TABLE_A中。这样锁表TABLE_A的时间就短了。
      

  13.   


    select * from table_name for update;
    --这样会把这个表里的所有记录查出来锁住,影响别人更新、删除操作。
    select * from table_name where 列名='1' for update;
    --这个会把这个表里的所有列名='1'的记录查出来锁住,影响别人更新、删除操作。
    --同时,你只是insert 并不会用到这些记录,因此你锁住记录就是不应该的,
    ----所以 where 1=2 就是起到这个作用,至于添加么,肯定是不影响的了,你试试不就知道了。
      

  14.   

    粘贴都是用数据量少的excel,用where 1=2 就行了。不过就是要先校验数据呢。
      

  15.   

    我也是新手,推荐最近学的一个笨方法,见笑了~
    建立一个 .sql文件
    文件内容是要执行的插入语句:
    insert into A(...)values();
    ....(复制粘贴)
    insert into A(...)values();然后在command window 下 执行:@(文件所在位置)\(文件名).sql呵呵 就这些,笨方法
      

  16.   

    select * from table_name where 1=2 for update
    执行然后点那把锁,然后点击数据表格成全选状态,然后再把EXCEL里面的数据复制进去,然后再上锁,然后在F10