表的更新是不是只能通过主键来更新,如果不设主键,那么更新是依据哪个字段呢?
这可能是一个初级问题,但是我确实不明白.
按道理说,表的更新是通过主键来进行的,因为主键的作用就是惟一性,只有惟一性的字段才能做为更新的标识字段.
但是
1.当表没有设置主键时,是依据哪个字段来更新的呢?
2.如果一个表设置了一个主键,同时又设置一个惟一索引字段,这时更新时依据哪个字段呢?
3.如果一个表设置了一个聚集索引字段(但是这个字段不做主键),同时又设了一个主键(主键所依据的索引是非聚集索引),这是一种特别的情况,但是也有可能出现呀,这种情况下,更新记录时,依据的是哪个字段呢?

解决方案 »

  1.   

    更新不是根据主键的 你要知道这一点
    你更新的条件可以看where 后面的条件比如说 在学生表里 学号是主键 里面还是姓名 课程 以及对应的课程号
    我现在想更新所有学生的英语成绩为90fen
    我只要这样
    update student
    set grade=90
    where cname='英语'--看这
    这个例子就没用到主键
      

  2.   

    1.根据where子句决定,不一定只更新一个的,也可以批量的。只是where后的条件最好用到索引字段,否则效率不高很费时,我还碰到过死锁。
    2.还是根据where子句决定的。
    3.还是根据where子句决定的。
    最直观的方法查看一下执行计划就知道了,多换几个条件多看几次。
      

  3.   

    通常而言主键是定位唯一记录的一种有效方式。因此查找、修改、删除某一条具体记录经常用主键定位。
    无主键表更新数据时,首先看你要更新哪些数据--where子句的限定效果。
      

  4.   

    1.看你的条件是怎么写的.
    2.还是看你写的条件是什么.
    3.还是那句话,条件,也就是WHERE后面的条件,没有WHERE条件就是更新SET后面字段的全部内容.
      

  5.   

    如果有where字段的话,则一定是根据where条件更新的,而且更新有可能是多条记录。
    如果在企业管理器中删除一条记录,则必须要有一个惟一字段,否则是无法更新成功的,这种情况下,我估计是以簇集索引字段,其实以哪个字段都无所谓,能确定惟一性就可以。