0
我正在調用存儲過程以使用PHP頁面向數據庫中插入少量詳細信息。只有在表中沒有類似的數據輸入的情況下,才應該輸入數據。我試圖通過一起提出100個請求來測試它(使用測試工具)。但執行後有4倍同一行。防止存儲過程中的表中存在多個條目的問題
這裏是存儲過程我使用:
DELIMITER $$
USE `mydb`$$
DROP PROCEDURE IF EXISTS `AddCreditCard`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `AddCreditCard`(IN scardname VARCHAR(200),scardnumber VARCHAR(200),scardedate VARCHAR(200),scardcvv VARCHAR(200),scountry VARCHAR(200),sdeviceid TEXT,scard_type VARCHAR(200),OUT rflag INT)
BEGIN
DECLARE user_id INT DEFAULT -1;
DECLARE card_count INT DEFAULT -1;
START TRANSACTION;
SET rflag=0;
SELECT udd_user_id_fk INTO user_id FROM user_device_details WHERE udd_device_id=sdeviceid;
IF user_id<>0 THEN
SELECT COUNT(uccd_entry_id) INTO card_count FROM user_credit_card_details WHERE uccd_card_number=scardnumber AND uccd_user_id_fk=user_id;
IF card_count=0 THEN
INSERT INTO user_credit_card_details(uccd_user_id_fk,uccd_card_name,uccd_card_number,uccd_card_expiry_date,uccd_card_cvv,uccd_country,uccd_card_type)VALUES(user_id,scardname,scardnumber,scardedate,scardcvv,scountry,scard_type);
SET rflag=1;
ELSE
SET rflag=414;
END IF;
ELSE
SET rflag=0;
END IF;
COMMIT;
END$$
DELIMITER ;
我期待的結果是,首先它應該返回「1」,並且,對於它應該返回「414」之後的所有請求。請向我建議這個問題的解決方案。
使用存儲過程來實現這一點絕對有必要嗎?在我看來,這可以使用(uccd_card_number,uccd_user_id)和外鍵約束上的唯一索引輕鬆解決,以確保用戶行存在。 – Pudge601 2013-04-26 13:36:16