在一个有索引的数据表上更新数据,更新后数据表会重新建立索引,在建立索引的过程中能否插入数据或查询数据?建立索引的过程中数据表处于什么状态?如果能插入或查询,它是等表建立完索引后再插入或查询还是直接执行?

解决方案 »

  1.   

    mysql建立索引的时候不能插入数据sqlserver2005可以在线建立索引
      

  2.   

    update tablename set sname=same+1 where id=100;
    这样的修改语句,如果在sname上面有索引的话,修改的同时也会更新索引文件。在这个过程中,加的是X锁,如果ID是主键,那么这一行就被锁定,这个表还可以进行并发的插入。在修改的时候不影响查询。
      

  3.   

    不能。当然这个时间不会很长。 MYSQL会先插入数据,然后立即更新索引。更新索引是更新记录操作的一部分, 整个记录仍未完成更新。所以在锁定状态。看你的存储引擎,如果不是锁表,则能插入。 查询也可以。
      

  4.   

    songjian5532 (songjian5532)
      '截至2011-06-12 11:06:45  用户结帖率0.00%  当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
    http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
    http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html8、如何给分和结贴?
    http://community.csdn.net/Help/HelpCenter.htm#结帖
      

  5.   

    更新某条数据记录时,mysql并不会立即重新建立索引,这要视你更新的数据是否会更改原来记录在物理文件中的位置,也就是该记录的索引值。如果该列值A的宽度变大(其所在的数据块为B),造成A在B中的位置需要改变,因此A的索引值C需要更新,此时在更新索引时,先是删除C,然后插入一条C'。C'为A在表中的新的物理位置。
    如果A的更新对索引值没有任何影响的话,索引也就不会更新了。
      

  6.   

    MYISAM的话是表锁
    INNODB的话是行锁