没有主键的表怎么更新?

yangbo99 2008-11-23 07:34:35
我想做一个access在线修改的可视程序,就和access2000那样,但不要这么复杂,就只要对数据进行增删改查就可以了。
转入正题,程序不能要求数据库的每个表都有主键,这在更新或删除的时候就出现麻烦了,删除时我是通过让表中每个field都等于value,我想这样的效率不是很高,而且在更新的时候,因为需要更新的记录改掉了,没有主键,我的WHERE后该怎么办。
...全文
1400 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
haozi1983915 2008-12-19
  • 打赏
  • 举报
回复
这根本就是个流氓建的表 表中还没没有唯一标识? 主键 唯一索引随便什么 我徒弟建张表没主键被我骂死了 设计数据库的时候要严谨 数据库并不是说能够存放数据就行了 设计的时候就要想我访问的时候怎么能使用方便 怎么冗余少 怎么能 提高查询效率 在我们公司没主键的表就是个笑话
平淡真无奇 2008-11-29
  • 打赏
  • 举报
回复
可以用数据集里面的指针,比如返回1000条记录,你改第10条,不会影响到其它记录

不过有个缺点,就是如果你改动时别人操作数据库,导致数据结果变化,那就乱套了,所以只适合单人操作的情形。
  • 打赏
  • 举报
回复
yangbo99 ,见过愚蠢的没有见过楼主这么愚蠢的
iwalk 2008-11-25
  • 打赏
  • 举报
回复
搞个自增字段不就行了
LikeCode 2008-11-25
  • 打赏
  • 举报
回复
没有主键的表结构是非常不合理的,或者你再建一个唯一索引,但这个唯一索引也可以算是半个主键了(主键不一定是数字)。
所以楼主的想法是不合理的,要马上改改。
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yangbo99 的回复:]
需要说的是也有可能会没有索引,这个表的结构是不在我的控制中的,我想是否可以在打开表的时候插入一个临时列作为主键或者唯一索引的,等到更新,删除后再删除这个列。大家评评。。
[/Quote]

也就是说每一个操作都对整个表中的数据通通修改一次?这反而会慢几百倍(原来1秒钟完成的工作现在需要20分钟)。

不论有没有索引,将所有字段都写在where中都是按照最低标准“保险”的做法。一旦某个字段有索引,可以确保可以使用到索引,从而查询可以加快速度。所以在where中多写几个判断很值得。除非你知道哪一个字段是主键(或者唯一索引),才不需要在where中写上很多字段。
jt9079 2008-11-24
  • 打赏
  • 举报
回复
同意楼上的。。
oec2003 2008-11-24
  • 打赏
  • 举报
回复
建唯一索引
changjiangzhibin 2008-11-24
  • 打赏
  • 举报
回复
要区别更新就应当在设计表结构时,做好区别各行的准备,

如添加唯一约束,或可联合多列(类似联合主键)的逻辑
zhnzzy 2008-11-24
  • 打赏
  • 举报
回复
用你每一行的唯一标识符区分
  • 打赏
  • 举报
回复
[Quote=引用楼主 yangbo99 的帖子:]
我想做一个access在线修改的可视程序,就和access2000那样,但不要这么复杂,就只要对数据进行增删改查就可以了。
转入正题,程序不能要求数据库的每个表都有主键,这在更新或删除的时候就出现麻烦了,删除时我是通过让表中每个field都等于value,我想这样的效率不是很高,而且在更新的时候,因为需要更新的记录改掉了,没有主键,我的WHERE后该怎么办。
[/Quote]

首先,这样的效率很高。一个比较判断能减少多少运行“效率”?当你的数据比较多时,就算写上上万个比较判断,其对“效率”的降低也比不上能够使用到一个索引来对效率的提高。当你写上个更多的条件,查询被自动优化的几率就会提高很多。

“更新的时候”,你自己的程序无法得到原来的值,这应该看你自己的程序设计流程的问题。

yangbo99 2008-11-24
  • 打赏
  • 举报
回复
需要说的是也有可能会没有索引,这个表的结构是不在我的控制中的,我想是否可以在打开表的时候插入一个临时列作为主键或者唯一索引的,等到更新,删除后再删除这个列。大家评评。。
  • 打赏
  • 举报
回复
没有主键,可以对表建唯一索引.
qinhl99 2008-11-23
  • 打赏
  • 举报
回复
如果where也不能区分,那估计就只能都删除,而不能更新了,所以平时建表加上索引列是必要的,哪怕是没有意义的索引列
yangbo99 2008-11-23
  • 打赏
  • 举报
回复
这样也不行啊,万一别的字段不能确定这一条记录该怎么办啊,
我是用GridView,不知道在RowUpdating事件时能不能传回没有字段被修改前的值啊。。
jiang_jiajia10 2008-11-23
  • 打赏
  • 举报
回复
那就要where 除了要更新的所有字段了

62,269

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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