mysql 先删后增 更新_MySQL 高级操作——新增数据、更新数据、删除数据、查询数据...
新增數(shù)據(jù)
多數(shù)據(jù)插入
只要寫一次insert指令,但是可以插入多條記錄
語(yǔ)法:insert into?表名 [(字段列表)] values (值列表1),(值列表2),(值列表3);
主鍵沖突
主鍵沖突,在有的表中,使用的是業(yè)務(wù)主鍵(字段有業(yè)務(wù)含義),但是往往在進(jìn)行數(shù)據(jù)插入的時(shí)候,又不確定數(shù)據(jù)表中是否已經(jīng)存在對(duì)應(yīng)的主鍵
解決方案:
1、主鍵沖突更新
類似插入語(yǔ)法,如果插入過(guò)程中主鍵沖突,那么采用更新方法分
insert into?表名 [(字段列表)]?values (值列表) on duplicate key?update?字段 =?新值;
2、主鍵沖突替換
當(dāng)主鍵沖突之后,干掉原來(lái)的數(shù)據(jù),重新插入進(jìn)去
replace into [(字段列表)] values (值列表);
蠕蟲復(fù)制
一分為二,成倍增加。從已有的數(shù)據(jù)中獲取數(shù)據(jù),并且將獲取到的數(shù)據(jù)插入到數(shù)據(jù)表中。
語(yǔ)法:insert into 表名 [(字段列表)] select? */字段列表 from?表;
1、蠕蟲復(fù)制的確通常是復(fù)制數(shù)據(jù),沒(méi)有太大業(yè)務(wù)數(shù)據(jù):可以在短期內(nèi)快速增加表的數(shù)據(jù)量,從而測(cè)試表的壓力,還可以通過(guò)大量數(shù)據(jù)來(lái)測(cè)試表的效率(索引)
2、蠕蟲復(fù)制,要注意主鍵沖突。
更新數(shù)據(jù)
1、在更新數(shù)據(jù)的時(shí)候,要注意通常一定是跟隨條件更新
update?表名 set?字段名 =?新值 where?判斷條件l
2、如果沒(méi)有條件,是全表更新數(shù)據(jù),但是可以使用limit來(lái)限制更新的數(shù)量
update?表名 set?字段名 =?新值 [where?判斷條件] limit?數(shù)量;
刪除數(shù)據(jù)
1、刪除數(shù)據(jù)的時(shí)候,盡量不要全部刪除,應(yīng)該使用where進(jìn)行判定
2、刪除數(shù)據(jù)的時(shí)候可以使用limit來(lái)限制要?jiǎng)h除的具體數(shù)量
delete?刪除數(shù)據(jù)的時(shí)候,無(wú)法重置auto_increment
重置語(yǔ)法:trunacate?表名
查詢數(shù)據(jù)
完整的查詢指令:
select select選項(xiàng)?字段列表?from?數(shù)據(jù)源 where?條件 group by?分組 having?條件 order by?排序?limit?數(shù)量限制;
select選項(xiàng):系統(tǒng)該如何對(duì)待查詢得到的數(shù)據(jù)
all:默認(rèn)的,表示保存所有的記錄
distinct:去重,去除重復(fù)的記錄,只保留一條(滿足重復(fù):所有的值都相同)
字段列表:
有的時(shí)候需要從多張表獲取數(shù)據(jù),在獲取數(shù)據(jù)的時(shí)候,可能存在不同表中有同名字段,需要將同名的字段命名成不同名的,
基本語(yǔ)法:?字段名 [as]?別名
from數(shù)據(jù)源
from是為前面的查詢提供數(shù)據(jù):數(shù)據(jù)源只要是一個(gè)符合二維表結(jié)構(gòu)的數(shù)據(jù)即可
單表數(shù)據(jù):from?表名
多表數(shù)據(jù):from?表名1 , 表名2
結(jié)果是兩張表的記錄數(shù)相乘,字段數(shù)拼接。得到的結(jié)果在數(shù)學(xué)上叫”笛卡爾積“,這個(gè)結(jié)果除了給數(shù)據(jù)庫(kù)造成壓力,沒(méi)有其他意義,應(yīng)該盡量避免出現(xiàn)笛卡爾積。
動(dòng)態(tài)數(shù)據(jù):from (select?字段列表 from?表) [as] 別名
from后面跟的數(shù)據(jù)不是一個(gè)實(shí)體表,而是一個(gè)從表中查詢出來(lái)得到的二維結(jié)果表
where子句
用來(lái)從數(shù)據(jù)表獲取的時(shí)候,進(jìn)行條件篩選,使用過(guò)運(yùn)算符進(jìn)行結(jié)果比較來(lái)判斷數(shù)據(jù)。
數(shù)據(jù)獲取原理:針對(duì)表去對(duì)應(yīng)的磁盤處獲取所有的記錄(一條條),where的作用是在拿到一條結(jié)果之后就開始進(jìn)行判斷,判斷是否符合條件,如果符合就保存,不符合就舍棄(不放在內(nèi)存中)
group?by子句
分組的恨意:根據(jù)指定的字段,將數(shù)據(jù)進(jìn)行分組:分組的目標(biāo)是為了統(tǒng)計(jì)(如根據(jù)性別將男女分組)
分組統(tǒng)計(jì):group?by?字段名;
group?by?只能幫助數(shù)據(jù)分組統(tǒng)計(jì),并不能將分組情況展示,在分組之后只會(huì)保留每組的第一條記錄
利用一些統(tǒng)計(jì)函數(shù):(聚合函數(shù))
count():統(tǒng)計(jì)每組中的數(shù)量,如果統(tǒng)計(jì)目標(biāo)是字段,那么不統(tǒng)計(jì)為空NULL字段
avg():求平均值
sum():求和
max():求最大值
min():求最小值
多分組:
將數(shù)據(jù)按照某個(gè)字段進(jìn)行分組后,對(duì)已經(jīng)分組的數(shù)據(jù)進(jìn)行再次分組
基本語(yǔ)法:group by?字段1,字段2;? //先按照字段1進(jìn)行分組,結(jié)果再 按照字段2分組
分組排序:
MySQL中分組默認(rèn)有排序的功能:按照分組字段進(jìn)行排序:默認(rèn)為升序
語(yǔ)法:group by?字段1 [asc|desc] , [字段2[asc|desc]] ;(asc為升序,desc為降序)
回溯統(tǒng)計(jì):
當(dāng)分組進(jìn)行多分組之后,往上統(tǒng)計(jì)的過(guò)程中,需要進(jìn)行層層上報(bào),將層層上報(bào)統(tǒng)計(jì)的過(guò)程稱之為回溯統(tǒng)計(jì):每一次分組向上統(tǒng)計(jì)的過(guò)程都會(huì)產(chǎn)生一次新的統(tǒng)計(jì)數(shù)據(jù),而且當(dāng)前數(shù)據(jù)對(duì)應(yīng)的分組字段為NULL
語(yǔ)法:group by?字段 [asc|desc] with rollup;
having子句
本質(zhì)和where一樣,用來(lái)進(jìn)行數(shù)據(jù)條件篩選。
1、having實(shí)在group子句之后,可以針對(duì)分組數(shù)據(jù)進(jìn)行統(tǒng)計(jì)篩選,但是where不行,where不能使用聚合函數(shù)
2、having在group?by?分組之后,可以使用聚合函數(shù)或者字段別名(where是從表中取出數(shù)據(jù),別名是在數(shù)據(jù)進(jìn)入到內(nèi)存之后才有的)
order by子句
排序,根據(jù)校對(duì)規(guī)則對(duì)數(shù)據(jù)進(jìn)行排序
基本語(yǔ)法:order by?字段 [asc|desc] ;
也可以像group?一樣進(jìn)行多字段排序:先按照第一個(gè)字段進(jìn)行排序,再按照第二個(gè)字段進(jìn)行排序
語(yǔ)法:order by?字段1 [asc|desc] ,?字段2[asc|desc]?;
limit子句
limit限制子句:主要是用來(lái)限制記錄數(shù)量獲取
記錄數(shù)限制:
純粹的限制獲取的數(shù)量:從第一條到指定的數(shù)量
語(yǔ)法:limit?數(shù)量;
limit通常在查詢的時(shí)候如果限定為一條記錄的時(shí)候,使用的比較多,有時(shí)候獲取多條記錄并不能解決業(yè)務(wù)問(wèn)題,但是會(huì)增加服務(wù)器的壓力
分頁(yè):(減輕服務(wù)器壓力,減少用戶端響應(yīng)時(shí)間)
利用limit限制獲取指定區(qū)間的數(shù)據(jù)
語(yǔ)法:limit offset , length;? ? ? ? ? ? //offset:偏移量,從哪開始? ? ?length:最多獲取多少條記錄,但是如果數(shù)量不夠,系統(tǒng)不會(huì)強(qiáng)求
MySQL中記錄的數(shù)量從0開始
五種子句都不是必要存在,但是存在的子句需要按照順序書寫
總結(jié)
以上是生活随笔為你收集整理的mysql 先删后增 更新_MySQL 高级操作——新增数据、更新数据、删除数据、查询数据...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言和C++的区别整理详解!
- 下一篇: 树莓派 php mysql 中文_使用树