数据库设计不合理的设计引起的问题

php_wsd 2010-10-13 10:46:32
sql server数据库不合理的设计,将本应该为自动编号ProductId的字段设计成为数字类型的字段了,并且设为主健了,现在这个字段中的值是先查询最大值,然后再加一,现在在线人数很多,如果几个人同时发布的产品的话,写入的时候,同时产生一个ID,第一个人写入数据库正常,那其他人就不正常了,提示主键字段重复插入。

我想到这点,写入的时候,我改用了存储过程,并且在存储过程中使用锁定,但还是没有用,不知道为什么?

这里存储过程中的主要代码
declare @a integer
declare @b integer
select @a = max(Productid) from cc_product
select @b=@a+1
insert into product(ProductId,UserId,ProductName) values(@b,@UserId,@ProductName)

为什么还是不成功?
遇到这样的情况,大家如何解决?
...全文
393 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
php_wsd 2010-10-13
  • 打赏
  • 举报
回复
现在考虑到搜索引擎收录,又不能直接删除掉原来的字段,改成自动增量字段。
真的好麻烦
这样的问题可有解决方法?
php_wsd 2010-10-13
  • 打赏
  • 举报
回复
太感谢aspwebchh,你帮我解决了一个大麻烦,感谢
slysmart 2010-10-13
  • 打赏
  • 举报
回复
正在为设计数据库头疼
ttt2 2010-10-13
  • 打赏
  • 举报
回复
把ID字段直接改成自增类型就可以
挨踢直男 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wangsdong 的回复:]

这样不可以,因为这里会改变原来产品的ProductID了,这样会导致以前的产品,搜索引擎上的收录全部丢失。
[/Quote]

set identity_insert tb on
这句会使 自增自段可以自已插入数据 也就是和普通字段一样 所以 productid 不会变的
php_wsd 2010-10-13
  • 打赏
  • 举报
回复
这样不可以,因为这里会改变原来产品的ProductID了,这样会导致以前的产品,搜索引擎上的收录全部丢失。
挨踢直男 2010-10-13
  • 打赏
  • 举报
回复
从新建一张一跟你那张表一模一样的表 但是 productID 是 identity(1,1)自增的 并且设置主键
create table tb
(
productid int identity primary key
.......
)

set identity_insert 新的表 on

insert 新的表(字段....) select (字段.....) from 旧的表 --把旧表数据复制到新表 最后删除旧表 把新表名称改掉

set identity_insert 新的表 off
php_wsd 2010-10-13
  • 打赏
  • 举报
回复
也想过这个办法,但是现在网站上的产品都是按照ProductID来读取的。
如果使用这个办法,假如出现了两个ProductID一样的产品,那就不要读取了
yangxxxxxx66 2010-10-13
  • 打赏
  • 举报
回复
可以给表再加一个字段sysno
设为自增长生成
以后用sysno代替ProductID即可

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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