注册 登录
编程论坛 ASP技术论坛

[求助] 插入重复列时,数据库提示的错误信息可否利用?

DACHENER 发布于 2007-09-12 09:41, 835 次点击
请教个问题:

数据库的表中某列值我设了唯一值了,不允重复插入。现在我做的东西,是想如果表中有已存在的列,就update,没有

就insert。那对已存在的列的检查,现在我想的方法很弱,就是select *全部搜一遍,感觉表很大时,会影响效率,有没

有可能利用数据库的一些方法(它不允许插入重复列,会报错,可不可以根据它提示的错识信息来判断已有存在列,如果

有这类错误信息,asp怎么调用呢?)


万分感谢
5 回复
#2
YSKING2007-09-12 10:54

你说的是更新吧,更新的就直接用update就可以了,如果是插入的话,你给表定义一个主键就好了

#3
DACHENER2007-09-12 12:53
回复:(YSKING)你说的是更新吧,更新的就直接用upda...
看样子,我没有表述清楚

已经定义主键了
如果该列值已经存在,就只能update了
我有疑惑的是 判断该列值存在的方法 我只知道用 select * from 表名 where id=值

如果表很大的话,几百或几千条记录,都这么查以验证列值是否存在

效率会很慢


有没有更好的办法?
#4
xcnli2007-09-13 13:08
顶一下,我也很想知道。请哪位高手教教我们。
#5
不惑2007-09-13 14:13
select * from 表名 where id=值
表大也不会增加太多的负担的,只要id为主键。
因为它是直接选取(这就是设为主键的目的),并不是一条一条地去找。
但表大如果用:
select * from 表名 where 字段 like '%" & 内容& "%'"
来找,那系统会摊了的。
如果你的表大,而经常会有这样的模糊查找,建议把数据库进行改造
比如新建一个查找“内容”的表名,表内容就为查找的记录。这个方法中能为经常查找的内容建新表。
可以使用程序自动来生成(第一次查会查慢,但第二次以后就飞一样了)。
如果不是模糊查找,分别生成以那个字段为主键的表,那样查找也会非快的。
#6
不惑2007-09-13 14:21
为了说明问题,我再哆嗦二句
为什么会表大也没什么负担的原因是,如果以主键方式查找,查找的方式为二分法。也就是再大的表,也只要运算几十次就够了。比如2的60次方为多大的数了?
也就是说不太可能会超过60次的运算的。就算超过了。61次,62次又增加了多少个微秒呢?可每增加一次,可查找的数据都是几何级地增多的。
可能我说得还有点抽象,再直接一点说吧:
运行30次就可以查找10亿条数据记录了。
60次,可能google的数据库也没有这么多记录。

[此贴子已经被作者于2007-9-13 14:28:08编辑过]

1