一弥雹、MySQL事物的基本要素?
? 原子性??? 一致性??? 隔離性??? 持久性
二、MySQL事物的并發(fā)問題?
https://www.cnblogs.com/kangshuai/p/5735374.html
???? 1)臟讀:事務(wù)A讀取了事務(wù)B更新的數(shù)據(jù)蹬叭,然后事務(wù)B回滾,那么事務(wù)A讀取到的數(shù)據(jù)就是臟數(shù)據(jù)
2)不可重復(fù)讀:事務(wù)A多次讀取同一數(shù)據(jù)状知,事務(wù)B在事務(wù)A多次讀取的過程中對(duì)數(shù)據(jù)做了更新并提交秽五,導(dǎo)致事務(wù)A多次讀取同一數(shù)據(jù)的結(jié)果不一致,側(cè)重于修改
3)幻讀: 系統(tǒng)管理員A將數(shù)據(jù)庫(kù)中所有的學(xué)生的成績(jī)從具體分?jǐn)?shù)改為ABCD等級(jí)饥悴,同時(shí)系統(tǒng)管理員B插入了或刪除了一條具體分?jǐn)?shù)的記錄坦喘,導(dǎo)致A發(fā)現(xiàn)結(jié)束后還有一條數(shù)據(jù)沒有改過來或是丟失了,就好像出現(xiàn)了幻覺一樣
注意:
???? 1西设、事務(wù)隔離級(jí)別為讀提交時(shí)瓣铣,寫數(shù)據(jù)只會(huì)鎖住相應(yīng)的行
2、事務(wù)隔離級(jí)別為可重復(fù)讀時(shí)济榨,如果檢索條件有索引(包括主鍵索引)的時(shí)候坯沪,默認(rèn)加鎖方式是next-key 鎖绿映;如果檢索條件沒有索引擒滑,更新數(shù)據(jù)時(shí)會(huì)鎖住整張表。一個(gè)間隙被事務(wù)加了鎖叉弦,其他事務(wù)是不能在這個(gè)間隙插入記錄的丐一,這樣可以防止幻讀。
3淹冰、事務(wù)隔離級(jí)別為串行化時(shí)库车,讀寫數(shù)據(jù)都會(huì)鎖住整張表
4、隔離級(jí)別越高樱拴,越能保證數(shù)據(jù)的完整性和一致性柠衍,但是對(duì)并發(fā)性能的影響也越大。
四晶乔、mysql中between...and..的使用珍坊,及時(shí)間范圍的查詢?
https://www.cnblogs.com/zjdxr-up/p/8383693.html
五正罢、MySQL主從復(fù)制與讀寫分離原理阵漏?
https://www.cnblogs.com/KTblog/p/5122825.html
六、Mysql 主從同步延遲原理及解決方案?
https://www.cnblogs.com/cnmenglang/p/6393769.html
七履怯、MySQL的join與left join有什么區(qū)別回还?
join相當(dāng)于我們平時(shí)用的where,就是把兩張表中同時(shí)滿足a.id=b.id的數(shù)據(jù)找出來叹洲。
無區(qū)別
八柠硕、MySQL的in與between and 有什么區(qū)別?
Between ...? and...
between是指屬性值在min和max之間运提,包括min和max仅叫,In
IN
in則是將括號(hào)內(nèi)的數(shù)當(dāng)做數(shù)組處理,只有當(dāng)記錄的屬性值等于括號(hào)內(nèi)的數(shù)值之一時(shí)糙捺,該記錄才會(huì)被選中
九诫咱、MySQL中EXPLAIN的作用?
??????????? 模擬Mysql優(yōu)化器是如何執(zhí)行SQL查詢語(yǔ)句的洪灯,從而知道Mysql是如何處理你的SQL語(yǔ)句的坎缭。分析你的查詢語(yǔ)句或是表結(jié)構(gòu)的性能瓶頸。
十签钩、MySQL有哪些索引掏呼?
普通索引:僅加速查詢
唯一索引:加速查詢 + 列值唯一(可以有null)
主鍵索引:加速查詢 + 列值唯一(不可以有null)+ 表中只有一個(gè)
組合索引:多列值組成一個(gè)索引,專門用于組合搜索铅檩,其效率大于索引合并
全文索引:對(duì)文本的內(nèi)容進(jìn)行分詞憎夷,進(jìn)行搜索
十一、什么是復(fù)合索引昧旨?
用戶可以在多個(gè)列上建立索引,這種索引叫做復(fù)合索引(組合索引); 復(fù)合索引在數(shù)據(jù)庫(kù)操作期間所需的開銷更小,可以代替多個(gè)單一索引; 同時(shí)有兩個(gè)概念叫做窄索引和寬索引,窄索引是指索引列為1-2列的索引,寬索引也就是索引列超過2列的索引; 設(shè)計(jì)索引的一個(gè)重要原則就是能用窄索引不用寬索引,因?yàn)檎饕冉M合索引更有效;
十二拾给、對(duì)于普通索引而言 在使用like進(jìn)行通配符模糊查詢時(shí),如果首尾之間都使用了通配符,索引會(huì)怎么樣兔沃?
索引是無效的
假設(shè)查詢內(nèi)容的關(guān)鍵詞為'abc'
SELECT * FROM tab_name WHERE index_column LIKE
?'abc%'; ?#索引是有效的
SELECT * FROM tab_name WHERE index_column LIKE
?'%abc'; ?#索引是無效的
SELECT * FROM tab_name WHERE index_column LIKE
?'%cba'; ?#索引是有效的
SELECT * FROM tab_name WHERE index_column LIKE
?'%abc%'; ?#索引是無效的
十三蒋得、怎樣刪除索引?
??????? dropindex<索引名>;
十四乒疏、UNION的作用是什么额衙?
UNION 操作符用于合并兩個(gè)或多個(gè) SELECT 語(yǔ)句的結(jié)果集。
請(qǐng)注意怕吴,UNION 內(nèi)部的 SELECT 語(yǔ)句必須擁有相同數(shù)量的列窍侧。列也必須擁有相似的數(shù)據(jù)類型。同時(shí)转绷,每條 SELECT 語(yǔ)句中的列的順序必須相同
十五伟件、ORDER BY怎樣使用?
order by是用來寫在where之后暇咆,給多個(gè)字段來排序的一個(gè)DQL查詢語(yǔ)句锋爪。
select 字段列表/* from 表名 where 條件 order by 字段名1 asc/desc
十六丙曙、MySQL中GROUP BY的作用?
“Group By”從字面意義上理解就是根據(jù)“By”指定的規(guī)則對(duì)數(shù)據(jù)進(jìn)行分組其骄,所謂的分組就是將一個(gè)“數(shù)據(jù)集”劃分成若干個(gè)“小區(qū)域”亏镰,然后針對(duì)若干個(gè)“小區(qū)域”進(jìn)行數(shù)據(jù)處理样傍。
十七医寿、MySQL中數(shù)學(xué)函數(shù)有哪些?
rand()??顧名思義胚泌,是用來生成隨機(jī)數(shù)用的
format(x,y)??函數(shù)毯炮,功能是將一個(gè)數(shù)字x逼肯,保留y位小數(shù),并且整數(shù)部分用逗號(hào)分隔千分位桃煎,小數(shù)部分進(jìn)行四舍五入
abs();??求一個(gè)數(shù)的絕對(duì)值篮幢;absolute
sqrt();?求一個(gè)數(shù)的平方根。sqrt是sqruar(平方为迈,矩形) 三椿,root(根)的縮寫。
mod(x,y)??x除數(shù)葫辐,y被除數(shù)搜锰。結(jié)束是余數(shù)。
ceil()??進(jìn)一取整耿战。
floor()舍一取整
format?會(huì)自動(dòng)進(jìn)行千分位蛋叼,下面我們來看看round函數(shù),進(jìn)行四舍五入剂陡。
?truncate(x,y)??比較霸道狈涮,不管四舍五入,直接把x鹏倘,的y位小數(shù)直接干掉薯嗤。
sign()?返回當(dāng)前結(jié)果得符號(hào),如果是負(fù)數(shù)返回-1纤泵,如果是0 返回0 如果是正數(shù),返回1
power()??冪運(yùn)算
十八镜粤、MySQL中 ALTER的作用是捏题?
當(dāng)我們需要修改數(shù)據(jù)表名或者修改數(shù)據(jù)表字段時(shí),就需要使用到MySQL ALTER命令
十九肉渴、MySQL中獲取時(shí)間的函數(shù)公荧?
?獲得當(dāng)前日期+時(shí)間(date
+ time)函數(shù):now()
獲得當(dāng)前日期+時(shí)間(date + time)函數(shù):sysdate()
獲得當(dāng)前日期(date)函數(shù):curdate() 等同于:current_date(),current_date
獲得當(dāng)前時(shí)間(time)函數(shù):curtime() 等同于:current_time(),current_time
獲得當(dāng)前 UTC 日期時(shí)間函數(shù):utc_date(),utc_time(), utc_timestamp()
二十、Mysql分表和分區(qū)的區(qū)別同规、分庫(kù)分表介紹與區(qū)別循狰?
http://www.cnblogs.com/langtianya/p/4997768.html
二十一窟社、MySQL的緩存池?
緩沖池概念:緩沖池簡(jiǎn)單來說就是一塊內(nèi)存區(qū)域绪钥,通過內(nèi)存的速度來彌補(bǔ)磁盤速度較慢對(duì)數(shù)據(jù)庫(kù)性能的影響灿里。在數(shù)據(jù)庫(kù)當(dāng)中讀取頁(yè)的操作,首先將從磁盤讀到的頁(yè)存放在緩存池中程腹,這個(gè)過程稱為將頁(yè)“FIX”在緩沖池中匣吊。下一次再讀相同的頁(yè)時(shí),首先判斷該頁(yè)是不是在緩沖池中寸潦。若在色鸳,直接讀取。否則见转,讀取磁盤上的頁(yè)命雀。
二十二、varchar與char的區(qū)別斩箫?
https://www.cnblogs.com/webph/p/6679815.html
二十三咏雌、select
into與create table的區(qū)別?
nsert? into? table1(columns1,columns2) select?columns1,columns2? from? table2;?
從table2中查詢的結(jié)果插入到table1中校焦,前提是table1和table2已經(jīng)存在;?
oracle中不支持select columns1? into? table2??from?? table1;?
其語(yǔ)法為 create.? as..select,有以下三種方式赊抖;?
1. create table table1 as select? * from table2? where1=2;?
創(chuàng)建一個(gè)表結(jié)構(gòu)與table2一模一樣的表,只復(fù)制結(jié)構(gòu)不復(fù)制數(shù)據(jù)寨典;?
2.create? table table1? as? select *?? from table2? ;?
? 創(chuàng)建一個(gè)表結(jié)構(gòu)與table2一模一樣的表,復(fù)制結(jié)構(gòu)同時(shí)也復(fù)制數(shù)據(jù)氛雪;?
3.create? table table1(columns1,columns2) as select?columns1,columns2? from table2;??
創(chuàng)建一個(gè)表結(jié)構(gòu)與table2一模一樣的表,復(fù)制結(jié)構(gòu)同時(shí)也復(fù)制數(shù)據(jù),但是指定新表的列名;
二十四耸成、mysql的主從復(fù)制是怎么實(shí)現(xiàn)的报亩,數(shù)據(jù)同步的整體流程是怎么樣的?
mysql的主從復(fù)制
1. Salve的IO線程會(huì)讀取mastr.info文件中配置好的主庫(kù)信息井氢,比如說存放的有:Master數(shù)據(jù)庫(kù)的用戶名弦追、密碼、端口花竞、還有Master的binlog索引位置劲件;
2. 拿到信息之后就帶著信息去鏈接Master的主庫(kù)IO線程
3. 當(dāng)主庫(kù)的IO線程先檢查SLave傳過來的配置信息是否正確,如果正確约急,就拿著Slave傳過來的binlog索引位置和Master庫(kù)的binlog文件中最后一個(gè)索引位置進(jìn)行對(duì)比零远,如果一致就陷入等待狀態(tài)厌蔽,等待Master的binlog索引位置更新牵辣;
4. 如果不一致就把Slave傳過來的binlog索引位置往后的所有SQL語(yǔ)句包括最后一條SQL語(yǔ)句的索引位置發(fā)送個(gè)給Slave的IO線程攒磨;
5. Slave的IO線程拿到信息之后谒府,先把Master傳過來的binlog索引在Slave的master.info文件中進(jìn)行更新拼坎;
6. 然后再把Master傳過來的SQL語(yǔ)句寫入到relay文件中,然后繼續(xù)循環(huán)執(zhí)行第二個(gè)步驟完疫;
7. Slave的SQL線程會(huì)一直持續(xù)的觀察relay日志文件中是否有改動(dòng)泰鸡,如果沒有就繼續(xù)監(jiān)聽;
8. 如果發(fā)現(xiàn)relay中有變動(dòng)壳鹤,那么就獲取變動(dòng)的內(nèi)容轉(zhuǎn)換為SQL語(yǔ)句盛龄,并且把SQL語(yǔ)句在Salve的數(shù)據(jù)庫(kù)中進(jìn)行執(zhí)行
?數(shù)據(jù)同步的整體流程
二十五、mysql的常見的存儲(chǔ)引擎有哪些芳誓?
??? ?InnoDB存儲(chǔ)引擎? MyISAM存儲(chǔ)引擎?? MEMORY存儲(chǔ)引擎
二十六余舶、各個(gè)存儲(chǔ)引擎的優(yōu)缺點(diǎn)是什么?
Innodb? 優(yōu)點(diǎn)
災(zāi)難恢復(fù)性好
支持事務(wù)
使用行級(jí)鎖
支持外鍵關(guān)聯(lián)
支持熱備份
對(duì)于InnoDB引擎中的表锹淌,其數(shù)據(jù)的物理組織形式是簇表(Cluster
Table)匿值,主鍵索引和數(shù)據(jù)是在一起的,數(shù)據(jù)按主鍵的順序物理分布
實(shí)現(xiàn)了緩沖管理赂摆,不僅能緩沖索引也能緩沖數(shù)據(jù)挟憔,并且會(huì)自動(dòng)創(chuàng)建散列索引以加快數(shù)據(jù)的獲取
支持熱備份
MEMORY 存儲(chǔ)引擎
缺點(diǎn)如下:
使用表級(jí)鎖,雖然內(nèi)存訪問快库正,但如果頻繁的讀寫曲楚,表級(jí)鎖會(huì)成為瓶頸
只支持固定大小的行。Varchar類型的字段會(huì)存儲(chǔ)為固定長(zhǎng)度的Char類型褥符,浪費(fèi)空間
不支持TEXT、BLOB字段抚垃。當(dāng)有些查詢需要使用到臨時(shí)表(使用的也是MEMORY存儲(chǔ)引擎)時(shí)喷楣,如果表中有TEXT趟大、BLOB字段,那么會(huì)轉(zhuǎn)換為基于磁盤的MyISAM表铣焊,嚴(yán)重降低性能
由于內(nèi)存資源成本昂貴逊朽,一般不建議設(shè)置過大的內(nèi)存表,如果內(nèi)存表滿了曲伊,可通過清除數(shù)據(jù)或調(diào)整內(nèi)存表參數(shù)來避免報(bào)錯(cuò)
服務(wù)器重啟后數(shù)據(jù)會(huì)丟失叽讳,復(fù)制維護(hù)時(shí)需要小心
MyISAM引擎
特性如下:
不支持事務(wù)
使用表級(jí)鎖,并發(fā)性差
主機(jī)宕機(jī)后坟募,MyISAM表易損壞岛蚤,災(zāi)難恢復(fù)性不佳
可以配合鎖,實(shí)現(xiàn)操作系統(tǒng)下的復(fù)制備份懈糯、遷移
只緩存索引涤妒,數(shù)據(jù)的緩存是利用操作系統(tǒng)緩沖區(qū)來實(shí)現(xiàn)的∽可能引發(fā)過多的系統(tǒng)調(diào)用且效率不佳
數(shù)據(jù)緊湊存儲(chǔ)她紫,因此可獲得更小的索引和更快的全表掃描性能
二十七、怎么修改mysql中的表結(jié)構(gòu)(關(guān)鍵詞)
一屿储、字段
1贿讹、添加字段:
alter table `product` add `inventory` int(11) NOT NULL
COMMENT '庫(kù)存'
添加多個(gè)字段:加括號(hào),逗號(hào)分隔
alter table `category` add (
`company` tinyint(4) NOT NULL COMMENT '公司',
`date` varchar(40) NOT NULL COMMENT '日期',
`number` varchar(200) NOT NULL COMMENT '數(shù)量'
)
2够掠、刪除字段:
alter table `category` drop column `date`1
刪除多個(gè)字段:逗號(hào)分隔
alter table `category` drop column `date`,drop column`number`1
3民褂、修改字段屬性:
示例:將 award 表的 count 字段,名稱修改為 company祖屏,并設(shè)置相關(guān)屬性
alter table `award` change `count` `company`
varchar(200) not null comment '公司'
二助赞、索引
1、 添加索引字段
主鍵索引:primary key
alter table `award` add primary key (`id`);
普通索引:index
alter table `award` add index `key_a_c`(`award`,`count`);
全文索引:fulltext
alter table `award` add fulltext `key_a_c`(`award`,`count`);
唯一索引:unique
alter table `award` add unique `key_a_c`(`award`,`count`);
2袁勺、刪除索引:
alter table `award` drop primary key `id`
alter table `award` drop index `key_a_c`
alter table `award` drop fulltext `key_a_c`
alter table `award` drop unique `key_a_c`
3雹食、顯示所有索引
show index from `award`;
二十八、mysql的存儲(chǔ)程序是什么
https://blog.csdn.net/zhou520yue520/article/details/81072324
二十九期丰、mysql的存儲(chǔ)過程是什么
https://www.cnblogs.com/chenpi/p/5136483.html
三十群叶、MySQL中%是什么?怎么使用钝荡?
SQL 中的 % 標(biāo)示通配符, 匹配任何字符, 例如:
select * from TableName where name like 'a%'; // 可匹配 a開頭的任何字符串
是正則中的 * 因?yàn)檎齽t里 + 是至少1個(gè). * 可以0個(gè)
三十一街立、MySQL中l(wèi)ike的用法?
https://blog.csdn.net/qq_27563511/article/details/80879881