MySQL insert or update SQL 示例

建表 

  • 建立一個合適的表,表中必須有惟一索引,由於更新的時候就依據惟一索引更新的
  • CREATE TABLE `biz_fund_split` (
    	`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
    	`security_id` VARCHAR(40) NOT NULL COMMENT '基金ID',
    	`security_code` VARCHAR(40) NOT NULL COMMENT '基金代碼',
    	`the_date` DATE NOT NULL COMMENT '生效日期',
    	`split_date` DATE NOT NULL COMMENT '拆分日期',
    	`split_object` VARCHAR(200) NULL DEFAULT NULL COMMENT '拆分對象',
    	`split_mode` VARCHAR(100) NULL DEFAULT NULL COMMENT '拆分類型',
    	`split_rate` DECIMAL(20,4) NULL DEFAULT NULL COMMENT '拆分比例',
    	`split_before_value` DECIMAL(20,4) NULL DEFAULT NULL COMMENT '拆分前淨值',
    	`split_before_share` DECIMAL(20,4) NULL DEFAULT NULL COMMENT '拆分前份額',
    	`split_after_share` DECIMAL(20,4) NULL DEFAULT NULL COMMENT '拆分後份額',
    	`remark` VARCHAR(200) NULL DEFAULT NULL COMMENT '備註',
    	`last_modified_dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '記錄時間戳',
    	PRIMARY KEY (`id`),
    	UNIQUE INDEX `idx_security_code_the_date` (`security_code`, `the_date`)
    )
    COMMENT='基金拆分與折算表'
    COLLATE='utf8_general_ci'
    ENGINE=MyISAM
    AUTO_INCREMENT=23;

     

  • 編寫sql測試

  • insert into biz_fund_split (security_id, security_code, the_date, 
    split_date, split_object, split_mode, 
    split_rate, split_before_value, split_before_share, 
    split_after_share, remark) 
    values (?,?,?,?,?,?,?,?,?,?,?) 
    ON DUPLICATE KEY UPDATE 
    security_id=VALUES(security_id),  split_date=VALUES(split_date), split_object=VALUES(split_object), 
    split_mode=VALUES(split_mode), split_rate=VALUES(split_rate), split_before_value=VALUES(split_before_value), 
    split_before_share=VALUES(split_before_share), split_after_share=VALUES(split_after_share), remark=VALUES(remark)

     結合兩個sql能夠得出結論:ON DUPLICATE KEY UPDATE以後的字段少了UNIQUE INDEX中涉及的兩個字段,判斷insert仍是update,是以這兩個是否存在爲標準,若是存在,即以這兩個字段爲update條件,更新其餘的字段;若是不存在則直接插入。MySQL數據庫爲咱們作了一層是否存在的判斷,因此咱們就不用先判斷是否存在再更新仍是插入。使用驅動包中特有的操做接口,傳入對應的參數便可。sql

  • 注意:這個寫法有個問題,若是是批量提交插入或更新數據,那麼自增的id字段會提早預留出批量數量大小的id區段,會致使自增id值不連續增長,因此使用這種方式時,最好是單條提交,防止id自增斷斷續續。數據庫

over! 測試

相關文章
相關標籤/搜索