mysql 是一門關(guān)系型數(shù)據(jù)庫, 不同于mongoDB 來說. mysql 需要給不同的表之間建立相互聯(lián)系,以便確定完整性約束. 這里我們看看Mysql基礎(chǔ)知識
mysql常用術(shù)語
冗余: 用來表示存儲兩倍的數(shù)據(jù), 但會使數(shù)據(jù)訪問更快. 相當(dāng)于redis
主鍵: 用來執(zhí)行每個(gè)表的關(guān)鍵性數(shù)據(jù), 并且,每個(gè)表中只有一個(gè)主鍵.
外鍵: 這應(yīng)該是mysql的關(guān)鍵, 使用外鍵來關(guān)聯(lián)不同表.
復(fù)合鍵: 將多個(gè)鍵組合一起來作為索引值. 一般用于復(fù)合索引
索引:借用一組值, 來對表進(jìn)行排序. 可以比作書的目錄.
參照完整性: 參照的完整性要求關(guān)系中不允許引用不存在的實(shí)體
mysql之初命令
在MAC 上下載mysql 很簡單. 直接使用homebrew 即可. 他會幫你把mysql的所有其他東西都完全的安裝好. 然后, 就是簡單的開關(guān)操作.
開啟mysql: mysql.server start
關(guān)閉mysql: mysql.server stop
打開交互命令: mysql
OK, 這樣就已經(jīng)滿足前期你對mysql的基本要求
如果你想,將你的mysql上鎖, 即, 添加登錄密碼的話, 就可以使用:
1 |
mysqladmin -u root password "new_password"; |
如果你想設(shè)置為開啟自啟的話,可以使用:
1 2 |
// MAC ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents |
其他的自行google把.
連接mysql
上述已經(jīng)提到了, 使用mysql即可連接到數(shù)據(jù)庫.
當(dāng)你使用mysql進(jìn)行連接的時(shí)候, 這并不是完整意義上的連接, 因?yàn)楫?dāng)多人協(xié)作的時(shí)候,往往一個(gè)數(shù)據(jù)庫, 會有很多users進(jìn)行連接, 而這mysql只是數(shù)據(jù)庫給的一個(gè)匿名用戶, 如果是單機(jī)版的Mysql這樣使用當(dāng)然是最方便的。
另外, 你還可以使用
1 2 |
mysql -h host -u user -p // 接著輸入你的密碼 |
這里就是比較高級的。 在指定的hostname上使用指定的user進(jìn)行連接.
有童鞋可能會問了, host和user到底是什么呢?
e… 你可以輸入echo $HOST和echo $USER來查看.
當(dāng)然, 這種方式是最高級的, 也最有可能會遇到這樣的problem
1 |
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) |
這句話的意思就是, 親, 你的mysql還沒運(yùn)行呢~
接著, 我們來看一下稍微簡單的調(diào)用.你的HOST實(shí)際是可以忽略的, 如果你不是遠(yuǎn)程登錄的話. 接著就可以使用一下的命令:
1 |
<span class="hljs-title">mysql</span> -u user -p |
其實(shí)俺最常用的就是mysql 方便干脆, 不過有時(shí)候需要user的時(shí)候,還會使用一下mysql -u user -p這樣的參數(shù). 如果你想查看你Mysql中,有多少USER的話, 就可以使用, SELECT USER();進(jìn)行查看.
如果你在電腦里面有其他的用戶需要添加時(shí), 這就需要你進(jìn)行手動添加用戶.
添加用戶
在Mysql中添加用戶,其實(shí)也非常簡單, 只需要使用CREATE USER 和 GRANT就可以了。
我們這里創(chuàng)建一個(gè)普通用戶-jimmy. 然后賦予它一下簡單的權(quán)限
1 2 3 4 5 6 7 |
<span class="hljs-constant">CREATE</span> <span class="hljs-constant">USER</span> <span class="hljs-string">'jimmy'</span>@<span class="hljs-string">'localhost'</span> <span class="hljs-constant">IDENTIFIED</span> <span class="hljs-constant">BY</span> <span class="hljs-string">'your_password'</span>; <span class="hljs-regexp">//</span> 創(chuàng)建一個(gè)jimmy的用戶, 并且, 他的密碼為,your_password > <span class="hljs-constant">GRANT</span> <span class="hljs-constant">SELECT</span>,<span class="hljs-constant">INSERT</span>,<span class="hljs-constant">UPDATE</span>,<span class="hljs-constant">DELETE</span>,<span class="hljs-constant">CREATE</span>,<span class="hljs-constant">DROP</span> -> <span class="hljs-constant">ON</span> *.* -> <span class="hljs-constant">TO</span> <span class="hljs-string">'jimmy'</span>@<span class="hljs-string">'localhost'</span>;
<span class="hljs-regexp">//</span> 賦予jimmy 一些基本的權(quán)限, 讓他去訪問某些執(zhí)行的數(shù)據(jù)庫, 上文中的<span class="hljs-string">`*.*`</span>(注意這不是顏文字, 這表示所有的數(shù)據(jù)庫) 就可以寫為你允許該用戶訪問的數(shù)據(jù)庫的name, 比如, 你可以改為<span class="hljs-string">`bank`</span>,<span class="hljs-string">`tencent`</span>... 等等 |
這樣, 你就可以使用mysql -u xxx -p 進(jìn)行指定用戶的登錄了.
如果,你想創(chuàng)建一個(gè)管理員賬戶的話, 代碼就更簡單了。
1 2 3 4 5 |
<span class="hljs-operator"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">USER</span> <span class="hljs-string">'admin'</span>@<span class="hljs-string">'localhost'</span> <span class="hljs-keyword">IDENTIFIED</span> <span class="hljs-keyword">BY</span> <span class="hljs-string">'your_ps'</span>;</span> // 創(chuàng)建一個(gè)管理員賬戶
<span class="hljs-operator"><span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">ALL</span> <span class="hljs-keyword">PRIVILEGES</span> <span class="hljs-keyword">ON</span> *.* <span class="hljs-keyword">TO</span> <span class="hljs-string">'admin'</span>@<span class="hljs-string">'localhost'</span> <span class="hljs-keyword">WITH</span> <span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">OPTION</span>;</span> // ok |
如果你想檢查, 你創(chuàng)建的用戶的權(quán)限對不對時(shí), 可以使用.
1 |
<span class="hljs-operator"><span class="hljs-keyword">SHOW</span> <span class="hljs-keyword">GRANTS</span> <span class="hljs-keyword">FOR</span> <span class="hljs-string">'admin'</span>@<span class="hljs-string">'localhost'</span>;</span> |
進(jìn)行查看.
接下來, 假設(shè)出現(xiàn)很多bugs. md… 密碼寫錯(cuò)了,怎么辦? 用戶創(chuàng)建錯(cuò)了,怎么辦?
這些,mysql 都已經(jīng)提供了一些相關(guān)的辦法.
修改密碼
這里有很多種方法, 簡單介紹兩種. 一種是使用SET,一種是使用ALERT(v5.7.6).
SET 修改密碼應(yīng)該算是比較常用的. 使用SET直接修改密碼即可.
格式為:
1 |
<span class="hljs-operator"><span class="hljs-keyword">SET</span> <span class="hljs-keyword">PASSWORD</span> <span class="hljs-keyword">FOR</span> <span class="hljs-string">'jimmy'</span>@<span class="hljs-string">'localhost'</span> = <span class="hljs-keyword">PASSWORD</span>(<span class="hljs-string">'your_ps'</span>);</span> |
上面那種方法,適用于root的用戶進(jìn)行修改, 如果你想修改自己的密碼的話,就更簡單了. 直接使用.
1 |
<span class="hljs-operator"><span class="hljs-keyword">SET</span> <span class="hljs-keyword">PASSWORD</span> = <span class="hljs-keyword">PASSWORD</span>(<span class="hljs-string">'your_ps'</span>);</span> |
來看一下ALERT的相關(guān)語法吧.
1 |
<span class="hljs-title">ALERT</span> USER <span class="hljs-string">'jimmy'</span>@<span class="hljs-string">'localhost'</span> IDENTIFIED BY <span class="hljs-string">'your_ps'</span>; |
如果你不想輸,'jimmy'@'localhost 這一串的話, 可以直接使用USER()進(jìn)行代替.
1 |
<span class="hljs-title">ALERT</span> USER USER() IDENTIFIED BY <span class="hljs-string">'your_ps'</span>; |
另外, 如果你只想在shell 中直接修改的話,可以直接使用
1 |
<span class="hljs-title">mysqladmin</span> -u user_name -h host_name password <span class="hljs-string">"new_password"</span> |
直接修改即可.
如果你連用戶都創(chuàng)建錯(cuò)了。 那該怎么辦呢?
刪唄.
刪除用戶
在刪之前,你可以看看,mysql中,有多少其他的用戶. 一般,mysql創(chuàng)建新用戶后, 都會把用戶信息放到mysql.user中去.我們來檢查一下吧.
1 |
`<span class="hljs-operator"><span class="hljs-keyword">SELECT</span> <span class="hljs-keyword">User</span> <span class="hljs-keyword">FROM</span> mysql.<span class="hljs-keyword">user</span></span> |
選擇你想要刪除的用戶名.直接drop就行了.
1 |
<span class="hljs-operator"><span class="hljs-keyword">DROP</span> <span class="hljs-keyword">USER</span> <span class="hljs-string">'jimmy'</span>@<span class="hljs-string">'localhost'</span>;</span> |
語句格式
在sql中, 每條語句都是以;(semicolon)結(jié)尾。這里簡單演示一下, 如果你想查看mysql的版本號, 或者日期時(shí)間的話,可以使用.
1 2 3 4 5 6 7 8 |
<span class="hljs-operator"><span class="hljs-keyword">SELECT</span> <span class="hljs-keyword">VERSION</span>(),<span class="hljs-keyword">CURRENT_DATE</span>;</span> // 返回?cái)?shù)據(jù) +<span class="hljs-comment">-----------+--------------+</span> | version() | current_date | +<span class="hljs-comment">-----------+--------------+</span> | 5.7.11 | 2016-07-02 | +<span class="hljs-comment">-----------+--------------+</span> 1 row in <span class="hljs-operator"><span class="hljs-keyword">set</span> (<span class="hljs-number">0.00</span> sec)</span> |
另外, 在mysql中, 大小寫是不區(qū)分的. 如果你更熟悉小寫的話,就可以使用。
1 |
<span class="hljs-operator"><span class="hljs-keyword">select</span> <span class="hljs-keyword">version</span>(),<span class="hljs-keyword">current_date</span>;</span> |
這完全沒有太大的影響。
另外,sql語句可以在一行中書寫, 例如:
1 |
<span class="hljs-operator"><span class="hljs-keyword">select</span> <span class="hljs-keyword">version</span>();</span> <span class="hljs-operator"><span class="hljs-keyword">select</span> <span class="hljs-keyword">now</span>();</span> <span class="hljs-operator"><span class="hljs-keyword">select</span> <span class="hljs-keyword">current_date</span>;</span> |
這3條語句都會執(zhí)行一次。
由于,mysql是根據(jù)semicolon來決定語句的結(jié)束, 所以, 你書寫語句的方式, 可以這樣寫.
1 2 3 |
> select -> , <span class="hljs-function">-></span> current_date; |
如果你換行之后發(fā)現(xiàn)自己打錯(cuò)了, 那該怎么辦呢?
簡單,輸入/c即可.
數(shù)據(jù)庫之初操作
進(jìn)入數(shù)據(jù)庫后, 第一件事, 應(yīng)該看看, 這里面有哪些已經(jīng)創(chuàng)建好的用戶.
1 2 3 4 5 6 7 8 9 |
<span class="hljs-operator"><span class="hljs-keyword">show</span> <span class="hljs-keyword">databases</span>;</span> // 你有可能會發(fā)現(xiàn)有如下的信息; +<span class="hljs-comment">----------+</span> | Database | +<span class="hljs-comment">----------+</span> | mysql | | test | | tmp | +<span class="hljs-comment">----------+</span> |
然后, 你可以選擇其一并進(jìn)行相關(guān)操作.
1 |
<span class="hljs-operator"><span class="hljs-keyword">USE</span> test</span> |
當(dāng)你已經(jīng)進(jìn)入數(shù)據(jù)庫, 但突然忘記了,自己是哪個(gè)用戶,哪個(gè)數(shù)據(jù)庫. so how to do?
上面已經(jīng)介紹了,查找用戶, 可以直接使用SELECT USER();
那查找數(shù)據(jù)庫同理就應(yīng)該為.
1 |
<span class="hljs-operator"><span class="hljs-keyword">SELECT</span> <span class="hljs-keyword">DATABASE</span>();</span> |
如果, 你沒有相關(guān)的db的話, 那就需要你手動進(jìn)行創(chuàng)建了.
創(chuàng)建數(shù)據(jù)庫
使用方法很簡單:
1 2 |
<span class="hljs-operator"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">DATABASE</span> db_name;</span> // 這里的db_name 是大小寫敏感的,需要注意一下. |
之后, 你就需要手動進(jìn)行選擇你需要的數(shù)據(jù)庫.
還是上面那個(gè)命令. USE db_name;
當(dāng)然, 如果你嫌登錄之后再USE 有點(diǎn)麻煩, 你可以直接使用.
1 |
<span class="hljs-title">mysql</span> -u user -p db_name |
進(jìn)行相關(guān)登錄.
ok, 之后,就是數(shù)據(jù)表里的事了.
數(shù)據(jù)表相關(guān)
Table和Database的初階段準(zhǔn)備其實(shí)沒太大的差別。 同樣就是, 創(chuàng)建,進(jìn)入,over.
你可以先檢查一下,你的數(shù)據(jù)庫中有沒有已經(jīng)建好的表.
1 |
<span class="hljs-operator"><span class="hljs-keyword">SHOW</span> <span class="hljs-keyword">TABLES</span>;</span> |
如果沒有的話, 你可以隨便建一個(gè)表. 比如, 你現(xiàn)在創(chuàng)建一個(gè)person的表, 里面的字段有name,birth.
1 |
<span class="hljs-operator"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> person(name <span class="hljs-built_in">VARCHAR</span>(<span class="hljs-number">20</span>),birth <span class="hljs-built_in">DATE</span>);</span> |
這樣你就成功的創(chuàng)建了一個(gè)表,接著, 你可以看看關(guān)于你的表的相關(guān)描述.
1 |
<span class="hljs-operator"><span class="hljs-keyword">DESCRIBE</span> person;</span> |
ok, 入門mysql的相關(guān)配置就到這吧.
原文來自:數(shù)盟