MySQL操作數(shù)據(jù)庫實(shí)戰(zhàn)指南
一.創(chuàng)建數(shù)據(jù)庫
1. 創(chuàng)建數(shù)據(jù)庫的方式
create database database1;

帶選項(xiàng)的創(chuàng)建
create database if not exists database1;
如果不存在(if not exists)才創(chuàng)建數(shù)據(jù)庫database1。

2. 創(chuàng)建數(shù)據(jù)庫時(shí)的編碼問題
與數(shù)據(jù)打交道的數(shù)據(jù)庫的創(chuàng)建一定與編碼有關(guān)系。創(chuàng)建數(shù)據(jù)庫的時(shí)候,有兩個(gè)編碼集:
- 數(shù)據(jù)庫編碼集:數(shù)據(jù)庫未來存儲(chǔ)數(shù)據(jù)的編碼集。
- 數(shù)據(jù)庫校驗(yàn)集:支持?jǐn)?shù)據(jù)庫,進(jìn)行字段比較使用的編碼,本質(zhì)也是一種讀取數(shù)據(jù)庫中數(shù)據(jù)的采用的編碼格式。
因此,數(shù)據(jù)庫無論對(duì)數(shù)據(jù)做任何操作,都需要保證數(shù)據(jù)庫的操作和編碼必須是編碼一致的。
查看系統(tǒng)默認(rèn)支持的字符集和校驗(yàn)集:
show variables like 'character_set_database';

show variables like 'collation_database';

查看connection、database、server的校驗(yàn)集:
show variables like 'collation_%';

大部分情況下,數(shù)據(jù)庫的連接,數(shù)據(jù)庫本身、數(shù)據(jù)庫的服務(wù)器都是utf8的。在最開始的my.cnf配置中,我們把默認(rèn)字符集全部配成了utf8進(jìn)行統(tǒng)一,如果不配置,可能就會(huì)因?yàn)榫幋a的不同導(dǎo)致無法正確解析數(shù)據(jù)。
查看數(shù)據(jù)庫全部的字符集
show charset;

查看對(duì)照表,數(shù)據(jù)庫選擇的就是其中的utf8的字符集。
查看數(shù)據(jù)庫支持的字符集校驗(yàn)規(guī)則
show collation;
3. 指定編碼創(chuàng)建數(shù)據(jù)庫
當(dāng)我們創(chuàng)建數(shù)據(jù)庫沒有指定字符集和校驗(yàn)規(guī)則時(shí),系統(tǒng)使用默認(rèn)字符集:utf8,校驗(yàn)規(guī)則是:utf8_general_ci。
兩種方式:
create database d2 charset=utf8; #指定編碼格式utf8

create database d3 set utf8; #指定編碼格式utf8

編碼集字符集同時(shí)設(shè)置:
create database d4 charset=utf8 collate utf8_general_ci; #既指明編碼,又指明校驗(yàn)規(guī)則
根據(jù)字符集表以及校驗(yàn)表創(chuàng)建不同編碼和校驗(yàn)規(guī)則的數(shù)據(jù)庫

4. 驗(yàn)證校驗(yàn)規(guī)則對(duì)數(shù)據(jù)庫的影響
不區(qū)分大小寫
創(chuàng)建一個(gè)數(shù)據(jù)庫,校驗(yàn)規(guī)則使用utf8_ general_ ci[不區(qū)分大小寫]
create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(20));

由于是不區(qū)分大小寫的,所以在指定查’a’的時(shí)候,utf8_ general_ ci校驗(yàn)規(guī)則會(huì)將’A’和’a’一并查出:

區(qū)分大小寫
創(chuàng)建一個(gè)數(shù)據(jù)庫,校驗(yàn)規(guī)則使用utf8_ bin[區(qū)分大小寫]
create database test2 collate utf8_bin;
use test2;
create table if not exists person(name varchar(20));

因此,校驗(yàn)規(guī)則的不同,我們查出的結(jié)果也有可能不同。
校驗(yàn)規(guī)則的不同,排序的順序也會(huì)不同:(從小到大)

故忽略大小寫時(shí),大小寫的排序不做區(qū)分。
二.數(shù)據(jù)庫與文件系統(tǒng)的關(guān)系
創(chuàng)建數(shù)據(jù)庫:create database db_name; 本質(zhì)就是在/var/lib/mysql創(chuàng)建一個(gè)目錄。
刪除數(shù)據(jù)庫:drop database db_name; 本質(zhì)就是在/var/lib/mysql刪除目錄。
因此,我們可以在/var/lib/mysql上創(chuàng)建目錄,那么數(shù)據(jù)庫層面也一定會(huì)產(chǎn)生相應(yīng)的數(shù)據(jù)庫。

同理,在mysql目錄中刪掉一個(gè)目錄,數(shù)據(jù)庫層面的對(duì)應(yīng)數(shù)據(jù)庫也會(huì)被刪掉。
當(dāng)然,絕對(duì)不應(yīng)該在文件系統(tǒng)層面創(chuàng)建目錄從而生成對(duì)應(yīng)數(shù)據(jù)庫,這樣是不合理的。因此mysql8.0就禁掉了這個(gè)功能,而mysql5.6支持。
三.操縱數(shù)據(jù)庫
1. 查看數(shù)據(jù)庫
show databases;

如果想要確定是在哪個(gè)數(shù)據(jù)庫里,可以執(zhí)行:
select database();

2. 刪除數(shù)據(jù)庫
drop database db_name;
執(zhí)行刪除之后的結(jié)果:
- 數(shù)據(jù)庫內(nèi)部看不到對(duì)應(yīng)的數(shù)據(jù)庫
- 對(duì)應(yīng)的數(shù)據(jù)庫文件夾被刪除,級(jí)聯(lián)刪除,里面的數(shù)據(jù)表全部被刪
注意:不要隨意刪除數(shù)據(jù)庫
3. 修改數(shù)據(jù)庫
對(duì)數(shù)據(jù)庫的修改主要指的是修改數(shù)據(jù)庫的字符集,校驗(yàn)規(guī)則
alter database test2 charset=gbk collate gbk_Chinese_ci;

四.數(shù)據(jù)庫的備份和恢復(fù)
1.數(shù)據(jù)庫的備份
mysqldump -P3306 -u root -p 密碼 -B 數(shù)據(jù)庫名 > 數(shù)據(jù)庫備份存儲(chǔ)的文件路徑
-B:代表選擇數(shù)據(jù)庫的選項(xiàng)。

test1.sql中存儲(chǔ)的不僅僅是test1數(shù)據(jù)庫中的數(shù)據(jù),還有歷史上創(chuàng)建過的命令:

至此就完成了對(duì)數(shù)據(jù)庫test1的備份操作。
2.數(shù)據(jù)庫的恢復(fù)
現(xiàn)在,將test1數(shù)據(jù)庫刪掉:

這樣,在/var/lib/mysql的路徑下,一定也不存在test1目錄。
通過pwd命令,我們知道test1.sql所在的路徑:

然后,通過以下恢復(fù)命令:
mysql> source /root/MySQL/test1.sql;

此時(shí),就可以查看到對(duì)應(yīng)test1的數(shù)據(jù)庫及其內(nèi)容:

注意事項(xiàng)
如果備份的不是整個(gè)數(shù)據(jù)庫,而是其中的一張表,怎么做?
mysqldump -u root -p 數(shù)據(jù)庫名 表名1 表名2 > 路徑/mytest.sql
同時(shí)備份多個(gè)數(shù)據(jù)庫
mysqldump -u root -p -B 數(shù)據(jù)庫名1 數(shù)據(jù)庫名2 ... > 數(shù)據(jù)庫存放路徑
如果備份一個(gè)數(shù)據(jù)庫時(shí),沒有帶上-B參數(shù), 在恢復(fù)數(shù)據(jù)庫時(shí),需要先創(chuàng)建空數(shù)據(jù)庫,然后使用數(shù)據(jù)庫,再使用source來還原。
五.查看連接情況
如果在使用數(shù)據(jù)庫時(shí),出現(xiàn)卡頓,那么有可能訪問數(shù)據(jù)庫的不止你一個(gè),所以,通過如下命令,我們可以看到User的數(shù)量及名稱Id。
show processlist;

這可以告訴我們當(dāng)前有哪些用戶連接到我們的MySQL,如果查出某個(gè)用戶不是你正常登陸的,很有可能你的數(shù)據(jù)庫被人入侵了。
總結(jié)
到此這篇關(guān)于MySQL操作庫的文章就介紹到這了,更多相關(guān)MySQL操作庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
逐步講解MySQL中定時(shí)事件計(jì)劃的創(chuàng)建
這篇文章主要介紹了MySQL中定時(shí)事件計(jì)劃的創(chuàng)建,包括對(duì)于MySQL定時(shí)器的用戶事件權(quán)限作出了解釋說明,需要的朋友可以參考下2016-05-05
mysql中關(guān)于Myisam_recover自動(dòng)修復(fù)的使用方法
這篇文章主要介紹了mysql中關(guān)于Myisam_recover自動(dòng)修復(fù)的使用方法,需要的朋友可以參考下2016-05-05
MySQL文本文件導(dǎo)入及批處理模式應(yīng)用說明
MySQL文本文件導(dǎo)入及批處理模式應(yīng)用說明,需要的朋友可以參考下。2011-09-09
MySQL中列轉(zhuǎn)行和行轉(zhuǎn)列總結(jié)解決思路
最近工作中用到了好幾次列轉(zhuǎn)行,索性做個(gè)小總結(jié),下面這篇文章主要給大家介紹了關(guān)于MYSQL如何列轉(zhuǎn)行的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01

