mysql&mybatis匾鸥,在開發(fā)中遇到的坑

Mybatis
? 動態(tài)拼接
? 數(shù)據(jù)更新,replace/insert
? mybatis批量插入
? 插入的內(nèi)容含英文單引號
Mysql
? 常見錯誤
? 分區(qū)表

mysql作為開源的數(shù)據(jù)庫軟件智润,好用免費慧耍,是關(guān)系型數(shù)據(jù)庫的首選诬像。我在使用的過程中跪腹,遇到的一些問題昌腰,進行匯總开伏,不定期更新。作為記錄遭商,下次也有一個查詢的地方固灵。

Mybatis

動態(tài)拼接,實現(xiàn)有條件的數(shù)據(jù)更新或者插入
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.datacenter.manage.rmdbrecord.dao.OperaDataLoadMapper">

    <select id="list" parameterType="***Dto" resultType="***Dto">
        select
              id
              ***
             ,jdbc_name AS  jdbcName
        from operational_data_source_mysql
        where 1=1 and table_schema not in ('mysql','performance_schema','sys')
        <trim>
            <if test="jdbcName != null">
                and jdbc_name like '%${jdbcName}%'
            </if>
            <if test="tableSchema != null">
                and table_schema like '%${tableSchema}%'
            </if>
        </trim>
    </select>

? 通過if判斷劫流,來檢查test條件是否滿足巫玻。如果滿足則執(zhí)行,不滿足則跳過祠汇。而trim另外的三個參數(shù)仍秤。prefix為拼接sql的前綴,suffix這個是動態(tài)sql的后綴可很,suffixOverrides去掉最后多出來的符號诗力。如:insert數(shù)據(jù)時,在對象沒有數(shù)據(jù)時實現(xiàn)不插入的動態(tài)拼接我抠。

數(shù)據(jù)更新(insert into...on duplicate key update 與replace into)

? insert into ... on duplicate key update在primary key或者unique key沖突的時候才會執(zhí)行update之后的語句(一個有意義的index是否重要)姜骡。如:

<insert id="insert" param.....>
insert into tb1 (id,name,age) select id,name,age from tb2 
on duplicate key update name=#{name},age={age}
</insert>

? replace into在唯一性沖突時(同上,primary key/unique key),將覆蓋原有的數(shù)據(jù)(先刪除屿良,再插入)圈澈。這樣的代價就是: 歷史數(shù)據(jù)無保存、無痕跡尘惧,新數(shù)據(jù)插入(部分字段無內(nèi)容康栈,則以默認值取代。以及create_time/modify_time都是最新的。)

<insert id="insert" param...>
    replace into tb1 (id,name,age)
    select id,name,age 
    from tb2
</insert>
mybatis批量插入

對于List類型來說啥么,我們需要批量的進行數(shù)據(jù)插入登舞。在mysql中也類似于動態(tài)拼接sql的過程。mybatis提供了for-each方法悬荣,如:

<insert id="insertMap" parameterType="java.util.List">
        <foreach collection="list" item="item" index="index" separator=";">
            insert into param_map ( file_path,type, `key`, content_line, parse_result)
            values
            (
            substring(#{item.filePath},1,1000)
            ,substring((#{item.key},1,1000)
            ,substring(#{item.contentLine},1,1000)
            ,substring(#{item.parseResult},1,1000)
            ) on duplicate key update content_line=substring(#{item.contentLine},1,1000) ,parse_result=substring(replace(replace(#{item.parseResult},1,1000) ,mtime=now()
        </foreach>
    </insert>
mybatis中插入的內(nèi)容中帶有英文單引號

mybatis對于參數(shù)的傳遞有兩種模式菠秒。一種是#{},一種{}氯迂。#{}會自動添加''践叠,而{}則為直接傳遞數(shù)據(jù)。

我在遇到這個問題的時候嚼蚀,我是將原始的數(shù)據(jù)中''給替換掉禁灼。

mysql上的操作

腳本執(zhí)行報錯
  • Exception: Data too long for column

    字段長度問題,可以通過將長度設(shè)置的更長轿曙,如varchar(1000)弄捕,如果字段內(nèi)容更長,則可以考慮設(shè)置為: mediumtext

  • Exception: Row ** was cut by GROUP_CONCAT()

    處理行轉(zhuǎn)列的數(shù)據(jù)處理時需呀用到group_concat函數(shù)导帝,如果需要合并的行太多守谓,就會報這樣的錯誤∧ィ可以設(shè)置相關(guān)參數(shù)

    //會話級
    SET SESSION group_concat_max_len = 102400;
    //全局
    SET GLOBAL group_concat_max_len=102400;
    
分區(qū)表
  • 分區(qū)類型

    序號 分區(qū)類型 說明 使用頻率
    1 RANGE分區(qū) 給定一個連續(xù)區(qū)間的列值(非離散)分飞,將多行數(shù)據(jù)分配給對應(yīng)分區(qū) 較多
    2 HASH分區(qū) 對給定的列/值算出對應(yīng)的hash值,作為對應(yīng)行的分區(qū) 較多
    3 LIST分區(qū) 對行記錄睹限,匹配List(離散列表)值譬猫,放入指定分區(qū) 一般
    4 KEY分區(qū) 類似于分桶,指定分桶數(shù)和分桶字段羡疗。有mysql內(nèi)部分區(qū) 一般
  • 創(chuàng)建

create table test.user_test(
  id int comment '自增id',
  phone varchar(255) comment '送檢的手機號',
  p_dt DATE comment '分區(qū)字段(yyyy-mm-dd)',
  PRIMARY key(id,p_dt)
) ENGINE=InnoDB  COMMENT='用戶風(fēng)險等級 - 依賴于騰訊天御接口'
PARTITION by range(TO_DAYS(p_dt))
(
PARTITION p1 VALUES LESS THAN (to_days('2019-08-12')) ENGINE = InnoDB,
PARTITION p2 VALUES LESS THAN (to_days('2019-08-13')) ENGINE = InnoDB,
PARTITION p3 VALUES LESS THAN (to_days('2019-08-14')) ENGINE = InnoDB,
PARTITION p4 VALUES LESS THAN (to_days('2019-08-15')) ENGINE = InnoDB
)
;
  • 查詢分區(qū)
select table_catalog,table_schema,table_name,partition_name,partition_ordinal_position,partition_method,partition_expression,table_rows,create_time,nodegroup
from information_schema.partitions  
where table_schema = schema()  
and table_name='user_test';
  • 操作分區(qū)
-- 新增分區(qū)
alter table xqlm_base.user_test add partition (partition p4 values less than (to_days('2019-08-16')))
-- 修改分區(qū)
alter table xqlm_base.user_test PARTITION by range(TO_DAYS(p_dt)) (partition p4 values less than (to_days('2019-08-16')))
-- 重建分區(qū)
ALTER TABLE xqlm_base.user_test rebuild partitionp1,p2; 
-- 優(yōu)化分區(qū)
ALTER TABLE xqlm_base.user_test optimize partition p1,p2;
  • 分區(qū)問題
-- 需求場景1:創(chuàng)建分區(qū)染服,類似實現(xiàn)create ... if exists 功能
儲存過程,調(diào)度叨恨,判斷
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末柳刮,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子痒钝,更是在濱河造成了極大的恐慌秉颗,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件送矩,死亡現(xiàn)場離奇詭異蚕甥,居然都是意外死亡,警方通過查閱死者的電腦和手機栋荸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門菇怀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凭舶,“玉大人,你說我怎么就攤上這事爱沟∷” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵呼伸,是天一觀的道長身冀。 經(jīng)常有香客問我,道長括享,這世上最難降的妖魔是什么搂根? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮奶浦,結(jié)果婚禮上兄墅,老公的妹妹穿的比我還像新娘踢星。我一直安慰自己澳叉,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布沐悦。 她就那樣靜靜地躺著成洗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪藏否。 梳的紋絲不亂的頭發(fā)上瓶殃,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機與錄音副签,去河邊找鬼遥椿。 笑死,一個胖子當著我的面吹牛淆储,可吹牛的內(nèi)容都是我干的冠场。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼本砰,長吁一口氣:“原來是場噩夢啊……” “哼碴裙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起点额,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤舔株,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后还棱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體载慈,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年珍手,在試婚紗的時候發(fā)現(xiàn)自己被綠了娃肿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咕缎。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖料扰,靈堂內(nèi)的尸體忽然破棺而出凭豪,到底是詐尸還是另有隱情,我是刑警寧澤晒杈,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布嫂伞,位于F島的核電站,受9級特大地震影響拯钻,放射性物質(zhì)發(fā)生泄漏帖努。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一粪般、第九天 我趴在偏房一處隱蔽的房頂上張望拼余。 院中可真熱鬧,春花似錦亩歹、人聲如沸匙监。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亭姥。三九已至,卻和暖如春顾稀,著一層夾襖步出監(jiān)牢的瞬間达罗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工静秆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粮揉,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓抚笔,卻偏偏與公主長得像扶认,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子塔沃,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容