最近自己做了一个购物车
其中购物车表如下:
CREATE TABLE `cart` (
`id` INT NOT NULL AUTO_INCREMENT,
`cart_id` CHAR(32) NOT NULL,
`goods_id` INT NOT NULL,
`quantity` INT NOT NULL,
`added_on` DATETIME NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;由于考虑到确保主键id在无论何种情况下保持唯一值,所以写插入语句的时候,为id指定的值是UUID()
但是结果在测试的时候,动不动就报主键冲突的错误:
//Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY'
没有任何规律可循于是暂时不用UUID(),让id自增(不知道理论上有没有可能出现主键冲突,比如正巧都在这一瞬间同时加入购物车...理论上,有可能吗?)这是第一个问题.第二个问题:
加入购物车进行付款的时候,实际上是删除购物车里面的订单,并把订单加入到order表,cart表每天要做数不清的add update delete操作,那cart表的id不是越变越大,这个会有什么隐患吗?请大家帮忙解答一下,或者有成熟的做法,请指教谢谢!
其中购物车表如下:
CREATE TABLE `cart` (
`id` INT NOT NULL AUTO_INCREMENT,
`cart_id` CHAR(32) NOT NULL,
`goods_id` INT NOT NULL,
`quantity` INT NOT NULL,
`added_on` DATETIME NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;由于考虑到确保主键id在无论何种情况下保持唯一值,所以写插入语句的时候,为id指定的值是UUID()
但是结果在测试的时候,动不动就报主键冲突的错误:
//Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY'
没有任何规律可循于是暂时不用UUID(),让id自增(不知道理论上有没有可能出现主键冲突,比如正巧都在这一瞬间同时加入购物车...理论上,有可能吗?)这是第一个问题.第二个问题:
加入购物车进行付款的时候,实际上是删除购物车里面的订单,并把订单加入到order表,cart表每天要做数不清的add update delete操作,那cart表的id不是越变越大,这个会有什么隐患吗?请大家帮忙解答一下,或者有成熟的做法,请指教谢谢!
不存在你的这个担忧。因为只有主键才能自增,而主键就必须唯一。这也就是你 UUID() 插入失败的原因第二个问题
当 id 越来越大,直至超越 id 字段所能允许的范围时,将产生主键冲突的错误。
你需要定时重构 id 的初值