2018-03-26

MYSQL面試題

MYSQL:(三種創(chuàng)建,四條語句,五種約束)

三種方法:MySQL創(chuàng)建用戶的方法分成三種:INSERT USER表的方法、CREATE USER的方法、GRANT的方法
一、賬號名稱的構(gòu)成方式

賬號的組成方式:用戶名+主機(所以可以出現(xiàn)重復(fù)的用戶名,跟其他的[數(shù)據(jù)庫](http://lib.csdn.net/base/mysql "MySQL知識庫")不一樣)

用戶名:16字符以內(nèi).

主機名:可以用主機名和IP地址,也可以用通配符

通配符說明:172.18.10.%(IP地址為172.18.10段的所有IP地址都可以訪問)

二、通過CREATE USER命令進行創(chuàng)建用戶

腳本:CREATE USER 'username@host' [IDENTIFIED BY 'PASSWORD'] 其中密碼是可選項;

例子:CREATE USER 'john@192.168.189.71' IDENTIFIED BY "123";

CREATE USER 'john@192.168.189.%' IDENTIFIED BY "123";

CREATE USER 'john@' ;

說明:該方法創(chuàng)建出來的用戶只有連接數(shù)據(jù)庫的權(quán)限,需要后續(xù)繼續(xù)授權(quán);

注意:用戶與@后主機地址是一體的,用一個分號連接,否則會報錯,ERROR 1396 (HY000): Operation CREATE USER failed for 'remote'@'%'

三、通過GRANT命令創(chuàng)建用戶

當(dāng)數(shù)據(jù)庫存在用戶的時候GRANT會對用戶進行授權(quán),但當(dāng)數(shù)據(jù)庫不存在該用戶的時候,就會創(chuàng)建相應(yīng)的用戶并進行授權(quán)。(說明上面那步是多余的)

腳本:

GRANT <ALL|priv1,priv2,.....privn> ON

[object] [IDENTIFIED BY 'password']

[WITH GRANT OPTION];

MAX_QUERIES_PER_HOUR count

MAX_UPDATES_PER_HOUR count

MAX_CONNECTIONS_PER_HOUR count

MAX_USER_CONNECTIONS count

說明:priv代表權(quán)限select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14個權(quán)限

例子:mysql>grant select,insert,update,delete,create,drop on test.hr to john@192.168.10.1 identified by '123';

說明:給主機為192.168.10.1的用戶john分配可對數(shù)據(jù)庫test的hr表進行select,insert,update,delete,create,drop等操作的權(quán)限,并設(shè)定口令為123。

mysql>grant all privileges on test.* to joe@192.168.10.1 identified by '123';

說明:給主機為192.168.10.1的用戶john分配可對數(shù)據(jù)庫test所有表進行所有操作的權(quán)限,并設(shè)定口令為123。

mysql>grant all privileges on *.* to john@192.168.10.1 identified by '123';

說明:給主機為192.168.10.1的用戶john分配可對所有數(shù)據(jù)庫的所有表進行所有操作的權(quán)限,并設(shè)定口令為123。

mysql>grant all privileges on *.* to john@localhost identified by '123';

說明:用戶john分配可對所有數(shù)據(jù)庫的所有表進行所有操作的權(quán)限,并設(shè)定口令為123。

四條語句:增刪改查
insert,delete,update,select
詳細(xì)內(nèi)容請看MYSQL基本操作語句

五種約束:

#五種完整性約束:  
  
#NOT NULL :非空約束,指定某列不能為空;  
  
#UNIQUE : 唯一約束,指定某列或者幾列組合不能重復(fù)  
  
#PRIMARY KEY :主鍵,指定該列的值可以唯一地標(biāo)識該列記錄  
  
#FOREIGN KEY :外鍵,指定該行記錄從屬于主表中的一條記錄,主要用于參照完整性  
  
#CHECK :檢查,指定一個布爾表達式,用于指定對應(yīng)的值必須滿足該表達式(mysql不支持check約束) 

1、mysql有哪些常見的引擎,他們有什么區(qū)別?

ISAM MyISAM HEAP InnoDB 4種
a. ISAM:最老的引擎, 執(zhí)行讀取操作的速度很快,而且不占用大量的內(nèi)存和存儲資源。不足,它不支持事務(wù)處理,也不能夠容錯。
b. MyISAM:ISAM的mysql擴張, 繼承了ISAM的優(yōu)點,還增加了一些功能,如 索引,字段管理功能,表格鎖定的機制等。并強調(diào)了快速讀取操作,所以web開發(fā)大多數(shù)用此引擎。缺點和ISAM一樣。而且為了優(yōu)化多個并發(fā)的讀寫操作和鎖定的機制,它必須經(jīng)常運行OPTIMIZE TABLE命令,來恢復(fù)被更新機制所浪費的空間。
c. HEAP: 它允許只駐留在內(nèi)存里的臨時表格,駐留在內(nèi)存里讓HEAP要比ISAM和MYISAM都快,但是,它的表格存儲在內(nèi)存里,所以不及時保存的話,會造成數(shù)據(jù)丟失。
d. InnoDB, 支持事務(wù)處理(transaction process)和外來鍵。但是速度比前者慢,一般用于處理巨大數(shù)據(jù)量時的最大性能設(shè)計。


2、聽說過mysql的鎖嗎?

鎖(行鎖、表鎖、頁鎖、樂觀鎖、悲觀鎖等)
行鎖 表鎖 頁鎖
MyISAM V
BDB V V
InnoDB V V

開銷、加鎖速度、死鎖、粒度、并發(fā)性能

表鎖:
開銷小,加鎖快;不會出現(xiàn)死鎖;鎖定力度大,發(fā)生鎖沖突概率高,并發(fā)度最低
行鎖:
開銷大,加鎖慢;會出現(xiàn)死鎖;鎖定粒度小,發(fā)生鎖沖突的概率低,并發(fā)度高
頁鎖:
開銷和加鎖速度介于表鎖和行鎖之間;會出現(xiàn)死鎖;鎖定粒度介于表鎖和行鎖之間,并發(fā)度一般

悲觀鎖:在讀取數(shù)據(jù)時鎖住那幾行,其他對這幾行的更新需要等到悲觀鎖結(jié)束時才能繼續(xù)
樂觀鎖:讀取數(shù)據(jù)時不鎖,更新時檢查是否數(shù)據(jù)已經(jīng)被更新過,如果是則取消當(dāng)前更新
一般在悲觀鎖的等待時間過長而不能接受時我們才會選擇樂觀鎖
從數(shù)據(jù)庫sql語句角度看,悲觀鎖一般使用select * from table where condition for update,這個是進行一個強制鎖記錄的操作。而樂觀鎖一般是使用update table set xxx=xxx where condition and version=${version},一般通過版本號來限制需要更新的記錄版本。
之前一直以為select ... for update的效率不高,其實這個和update是一樣的,都會對符合where條件的記錄加鎖。mysql的鎖分為三種,行級鎖、區(qū)間鎖、next-key鎖,具體可以參考:http://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html

所以可以知道,樂觀鎖的性能之所以比悲觀鎖好,原因不是因為sql語句的不同,而是因為加鎖時間的不同。悲觀鎖認(rèn)為記錄被修改的沖突概率較大,所以在對記錄操作前就將記錄鎖定,然后更新記錄,最后提交,所以提交的成功率很高,但是造成的并發(fā)能力較低。而樂觀鎖認(rèn)為修改記錄的沖突概率很小,所以在更新記錄之前不會鎖記錄,而是在最后提交的時候提交鎖,這樣鎖定記錄的時間較短,并發(fā)能力較高,但是沖突概率就提高了。樂觀鎖一般會使用一個版本號概念,目的是記錄當(dāng)前記錄的版本,如果當(dāng)前記錄沒有被修改,那么相應(yīng)的版本就不會改變。在更新記錄的時候通過版本號來限定更新記錄的版本,起到防止并發(fā)更新的問題。

數(shù)據(jù)庫中有記錄,可以通過樂觀鎖或者悲觀鎖進行鎖定記錄。
樂觀鎖:update tablename set version=version+1 where key=${key} and version=${version},判斷update結(jié)果影響的行數(shù)。將樂觀鎖放在一個事務(wù)中,通過行級鎖進行控制。一個事務(wù)占用了行級鎖,另一個事務(wù)無法獲得鎖,會產(chǎn)生兩種情況,一種是等待鎖超時,一種是版本變更,update失敗。

如果沒有記錄,可以通過insert + 唯一索引的機制進行鎖定,比較暴力,通過鎖表


聽說過事物嗎?事物有哪些特性ACLD

一.什么是事務(wù)
事務(wù)是應(yīng)用程序中一系列嚴(yán)密的操作,所有操作必須成功完成,否則在每個操作中所作的所有更改都會被撤消。也就是事務(wù)具有原子性,一個事務(wù)中的一系列的操作要么全部成功,要么一個都不做。
事務(wù)的結(jié)束有兩種,當(dāng)事務(wù)中的所以步驟全部成功執(zhí)行時,事務(wù)提交。如果其中一個步驟失敗,將發(fā)生回滾操作,撤消撤消之前到事務(wù)開始時的所以操作。
二.事務(wù)的 ACID
事務(wù)具有四個特征:原子性( Atomicity )、一致性( Consistency )、隔離性( Isolation )和持續(xù)性( Durability )。這四個特性簡稱為 ACID 特性。
1 、原子性
事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包含的各操作要么都做,要么都不做
2 、一致性
事 務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。因此當(dāng)數(shù)據(jù)庫只包含成功事務(wù)提交的結(jié)果時,就說數(shù)據(jù)庫處于一致性狀態(tài)。如果數(shù)據(jù)庫系統(tǒng) 運行中發(fā)生故障,有些事務(wù)尚未完成就被迫中斷,這些未完成事務(wù)對數(shù)據(jù)庫所做的修改有一部分已寫入物理數(shù)據(jù)庫,這時數(shù)據(jù)庫就處于一種不正確的狀態(tài),或者說是 不一致的狀態(tài)。
3 、隔離性
一個事務(wù)的執(zhí)行不能其它事務(wù)干擾。即一個事務(wù)內(nèi)部的操作及使用的數(shù)據(jù)對其它并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間不能互相干擾。
4 、持續(xù)性
也稱永久性,指一個事務(wù)一旦提交,它對數(shù)據(jù)庫中的數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來的其它操作或故障不應(yīng)該對其執(zhí)行結(jié)果有任何影響。

數(shù)據(jù)庫系統(tǒng)必須維護事務(wù)的以下特性 ( 簡稱 ACID) :

原子性 (Atomicity)

一致性 (Consistency)

隔離性 (Isolation)

持久性 (Durability)

原子性 (Atomicity)

事務(wù)中的所有操作要么全部執(zhí)行,要么都不執(zhí)行;

如果事務(wù)沒有原子性的保證,那么在發(fā)生系統(tǒng)

故障的情況下,數(shù)據(jù)庫就有可能處于不一致狀

態(tài)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,892評論 2 372

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

  • MySQL技術(shù)內(nèi)幕:InnoDB存儲引擎(第2版) 姜承堯 第1章 MySQL體系結(jié)構(gòu)和存儲引擎 >> 在上述例子...
    沉默劍士閱讀 7,447評論 0 16
  • --- layout: post title: "如果有人問你關(guān)系型數(shù)據(jù)庫的原理,叫他看這篇文章(轉(zhuǎn))" date...
    藍(lán)墜星閱讀 799評論 0 3
  • 最近碰到幾個業(yè)務(wù)場景,會遇到并發(fā)的問題。在單實例情況下,我們會通過java.util.concurrent包...
    菜鳥小玄閱讀 2,264評論 0 5
  • 面對自己的過程是一個讓自己越來越通透的過程,今天是真實的體驗了一把。以前一直認(rèn)為被卡住了就得去課室,只有課...
    落子無悔ss閱讀 143評論 0 0
  • 文/雒宏軍 案例 督導(dǎo)室對某中學(xué)督導(dǎo)以后,對學(xué)校的教學(xué)管理提出了改進意見。針對督導(dǎo)意見,學(xué)校經(jīng)過分析研究,決定以課...
    雒宏軍的菜園子閱讀 213評論 0 1