根據id查詢SuccessKilled并攜帶秒殺產品對象實體必須修改成[[根據id和userPhone查詢SuccessKilled并攜帶秒殺產品對象實體]]
關于數據庫兩張表設計上的問題和不足,希望各位仁人志士能給出解決方案.
現在情況是:同一個商品id,不同的手機號,去執行秒殺,在插入秒殺記錄表時候報錯:Expected one result (or null) to be returned by selectOne(), but found: 2
首先說下:老師表示這么設計的seckill商品表有唯一主鍵seckill_id,success_killed秒殺記錄里面有seckill_id和user_phone兩個聯合主鍵.
聯合主鍵設計的愿望實現了:當同一個手機號不能同時一個商品多次,解決了重復秒殺的問題,但是,可有想過這個問題.不同手機號能秒殺多個商品?
這條sql(
queryByIdWithSeckill
)就有問題了,要改成:
/** ?*?根據id和userPhone查詢SuccessKilled并攜帶秒殺產品對象實體 ?* ?*?@param?seckillId ?*?@return ?*/ SuccessKilled?queryByIdWithSeckill(long?seckillId,?long?userPhone);
SELECT
? sk.seckill_id,
? sk.user_phone,
? sk.create_time,
? sk.state,
? s.seckill_id ?AS "seckill.seckill_id",
? s.name ? ? ? ?AS "seckill.name",
? s.number ? ? ?AS "seckill.number",
? s.start_time ?AS "seckill.start_time",
? s.end_time ? ?AS "seckill.end_time",
? s.create_time AS "seckill.create_time"
FROM success_killed sk RIGHT JOIN seckill s ON sk.seckill_id = s.seckill_id
WHERE sk.seckill_id = 5?
and sk.user_phone = 18617151927