mysql insert語句限制插入兩條一樣的數據,可控制並發插入相同的數據


 

 

傳入sql語句的變量{$_uid}, {$_type},{$_info}, {_extfield0}
INSERT INTO log(uid, `type`, info, extfield0) SELECT {$_uid}, {$_type},{$_info}, {_extfield0} FROM DUAL WHERE NOT EXISTS(SELECT 1 FROM log WHERE uid={$_uid} AND type = {$_type} AND info={$_info} AND extfield0 = {$_extfield0});

 

原理:在insert的時候查詢該數據表中是否存在含有滿足條件的記錄,如果存在則不執行,執行成功影響行數+1,否則影響行數為0

如果需要獲取該語句影響的行數,可以使用ROW_COUNT()來判斷是否有插入數據,下面給出一個存儲過程的例子供參考

.

DELIMITER $$

DROP PROCEDURE IF EXISTS `test`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `test`(IN $_uid INT,IN $_type INT,IN $_info VARCHAR(255),IN $_extfield0 VARCHAR(255))
BEGIN
    INSERT INTO log(uid, `type`, info, extfield0) SELECT $_uid, $_type,$_info, $_extfield0 FROM DUAL 
    WHERE NOT EXISTS(SELECT 1 FROM log WHERE uid=$_uid AND type = $_type AND info=$_info AND extfield0 = $_extfield0);
    IF ROW_COUNT() = 1 THEN 
        # 插入唯一記錄成功 執行后續操作
        SELECT "插入唯一數據成功";
    ELSE
        SELECT "插入唯一數據失敗";
    END IF;
END$$

DELIMITER ;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM