(首先,对不起我的英语不好,这不是我的第一语言。)
我有一个SQL数据库表来存储一些购物车,喜欢这样的东西:
Shopcart
----------
ID(PK) shopcartid price user
1 S123 112.00 Tom
2 S124 6543.00 Mary
3 S125 456.00 James
4 S126 25.00 Peter
由于数据库不是由我设定的,我对内部设计,礼仪等知之甚少。
据我所熟知的数据库设计明智,
ID列,
允许NULL:否
输入:int
(身份):是的
shopcartid专栏,
允许NULL:否
类型:nvarchar(100)
还有一个聚集索引集
名称:PK_shopcart
栏目:ID(ASC),shopcartid(ASC)
独一无二:是的
类型:主键
网站(在php中)将在用户登录网站后创建购物车(INSERT INTO Shopcart shopcartid price user VALUES {new shopcartid} {price} {user}
),如果他们还没有分配购物车。什么是必须的是shopcartid不重复。 ID也是唯一的,它应该是自动递增(?)(不确定)。但是,目前,随着我们添加更多购物车,shopcartid继续复制。
网站创建shopcartid的方式最初是使用SELECT COUNT(*) AS value FROM Shopcart
,并将1添加到shopcartid,这绝对不起作用,并会创建重复项。
我建议通过ID获取最新添加的购物车来获取最后一个购物车,该购物车应该是唯一的,并添加1:
SELECT shopcartid
from Shopcart
where ID = (SELECT MAX(ID) FROM Shopcart)
但是,我的同事说它仍然有可能创建重复的shopcartid,因为许多并发用户访问该网站时,可能会获取相同的ID,因此同一个shopcartid,并创建了一个重复的新shopcartid。 / p>
所以这是我的问题,避免创建重复的shopcartid的最佳方法是什么,以及如何实现这一目标。
答案 0 :(得分:0)
只需使用Sequencer设置购物车的ID即可。每次用户想要创建新的购物车时,序列器都会提供一个新的唯一ID。
答案 1 :(得分:0)
使用事务来避免重复并在shopcartid上设置唯一键约束以确保在任何情况下都不插入重复项。