SQL避免插入重复的新购物车ID

时间:2018-01-09 07:49:21

标签: php sql sql-server database sql-insert

(首先,对不起我的英语不好,这不是我的第一语言。)

我有一个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的最佳方法是什么,以及如何实现这一目标。

2 个答案:

答案 0 :(得分:0)

只需使用Sequencer设置购物车的ID即可。每次用户想要创建新的购物车时,序列器都会提供一个新的唯一ID。

答案 1 :(得分:0)

使用事务来避免重复并在shopcartid上设置唯一键约束以确保在任何情况下都不插入重复项。