MySQL操作數(shù)據(jù)庫(kù)實(shí)戰(zhàn)指南
一.創(chuàng)建數(shù)據(jù)庫(kù)
1. 創(chuàng)建數(shù)據(jù)庫(kù)的方式
create database database1;
帶選項(xiàng)的創(chuàng)建
create database if not exists database1;
如果不存在(if not exists)才創(chuàng)建數(shù)據(jù)庫(kù)database1。
2. 創(chuàng)建數(shù)據(jù)庫(kù)時(shí)的編碼問(wèn)題
與數(shù)據(jù)打交道的數(shù)據(jù)庫(kù)的創(chuàng)建一定與編碼有關(guān)系。創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候,有兩個(gè)編碼集:
- 數(shù)據(jù)庫(kù)編碼集:數(shù)據(jù)庫(kù)未來(lái)存儲(chǔ)數(shù)據(jù)的編碼集。
- 數(shù)據(jù)庫(kù)校驗(yàn)集:支持?jǐn)?shù)據(jù)庫(kù),進(jìn)行字段比較使用的編碼,本質(zhì)也是一種讀取數(shù)據(jù)庫(kù)中數(shù)據(jù)的采用的編碼格式。
因此,數(shù)據(jù)庫(kù)無(wú)論對(duì)數(shù)據(jù)做任何操作,都需要保證數(shù)據(jù)庫(kù)的操作和編碼必須是編碼一致的。
查看系統(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ù)庫(kù)的連接,數(shù)據(jù)庫(kù)本身、數(shù)據(jù)庫(kù)的服務(wù)器都是utf8的。在最開(kāi)始的my.cnf配置中,我們把默認(rèn)字符集全部配成了utf8進(jìn)行統(tǒng)一,如果不配置,可能就會(huì)因?yàn)榫幋a的不同導(dǎo)致無(wú)法正確解析數(shù)據(jù)。
查看數(shù)據(jù)庫(kù)全部的字符集
show charset;
查看對(duì)照表,數(shù)據(jù)庫(kù)選擇的就是其中的utf8的字符集。
查看數(shù)據(jù)庫(kù)支持的字符集校驗(yàn)規(guī)則
show collation;
3. 指定編碼創(chuàng)建數(shù)據(jù)庫(kù)
當(dāng)我們創(chuàng)建數(shù)據(jù)庫(kù)沒(méi)有指定字符集和校驗(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ù)庫(kù)
4. 驗(yàn)證校驗(yàn)規(guī)則對(duì)數(shù)據(jù)庫(kù)的影響
不區(qū)分大小寫(xiě)
創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),校驗(yàn)規(guī)則使用utf8_ general_ ci[不區(qū)分大小寫(xiě)]
create database test1 collate utf8_general_ci;
use test1;
create table person(name varchar(20));
由于是不區(qū)分大小寫(xiě)的,所以在指定查’a’的時(shí)候,utf8_ general_ ci校驗(yàn)規(guī)則會(huì)將’A’和’a’一并查出:
區(qū)分大小寫(xiě)
創(chuàng)建一個(gè)數(shù)據(jù)庫(kù),校驗(yàn)規(guī)則使用utf8_ bin[區(qū)分大小寫(xiě)]
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ì)不同:(從小到大)
故忽略大小寫(xiě)時(shí),大小寫(xiě)的排序不做區(qū)分。
二.數(shù)據(jù)庫(kù)與文件系統(tǒng)的關(guān)系
創(chuàng)建數(shù)據(jù)庫(kù):create database db_name; 本質(zhì)就是在/var/lib/mysql創(chuàng)建一個(gè)目錄。
刪除數(shù)據(jù)庫(kù):drop database db_name; 本質(zhì)就是在/var/lib/mysql刪除目錄。
因此,我們可以在/var/lib/mysql上創(chuàng)建目錄,那么數(shù)據(jù)庫(kù)層面也一定會(huì)產(chǎn)生相應(yīng)的數(shù)據(jù)庫(kù)。
同理,在mysql目錄中刪掉一個(gè)目錄,數(shù)據(jù)庫(kù)層面的對(duì)應(yīng)數(shù)據(jù)庫(kù)也會(huì)被刪掉。
當(dāng)然,絕對(duì)不應(yīng)該在文件系統(tǒng)層面創(chuàng)建目錄從而生成對(duì)應(yīng)數(shù)據(jù)庫(kù),這樣是不合理的。因此mysql8.0就禁掉了這個(gè)功能,而mysql5.6支持。
三.操縱數(shù)據(jù)庫(kù)
1. 查看數(shù)據(jù)庫(kù)
show databases;
如果想要確定是在哪個(gè)數(shù)據(jù)庫(kù)里,可以執(zhí)行:
select database();
2. 刪除數(shù)據(jù)庫(kù)
drop database db_name;
執(zhí)行刪除之后的結(jié)果:
- 數(shù)據(jù)庫(kù)內(nèi)部看不到對(duì)應(yīng)的數(shù)據(jù)庫(kù)
- 對(duì)應(yīng)的數(shù)據(jù)庫(kù)文件夾被刪除,級(jí)聯(lián)刪除,里面的數(shù)據(jù)表全部被刪
注意:不要隨意刪除數(shù)據(jù)庫(kù)
3. 修改數(shù)據(jù)庫(kù)
對(duì)數(shù)據(jù)庫(kù)的修改主要指的是修改數(shù)據(jù)庫(kù)的字符集,校驗(yàn)規(guī)則
alter database test2 charset=gbk collate gbk_Chinese_ci;
四.數(shù)據(jù)庫(kù)的備份和恢復(fù)
1.數(shù)據(jù)庫(kù)的備份
mysqldump -P3306 -u root -p 密碼 -B 數(shù)據(jù)庫(kù)名 > 數(shù)據(jù)庫(kù)備份存儲(chǔ)的文件路徑
-B:代表選擇數(shù)據(jù)庫(kù)的選項(xiàng)。
test1.sql中存儲(chǔ)的不僅僅是test1數(shù)據(jù)庫(kù)中的數(shù)據(jù),還有歷史上創(chuàng)建過(guò)的命令:
至此就完成了對(duì)數(shù)據(jù)庫(kù)test1的備份操作。
2.數(shù)據(jù)庫(kù)的恢復(fù)
現(xiàn)在,將test1數(shù)據(jù)庫(kù)刪掉:
這樣,在/var/lib/mysql的路徑下,一定也不存在test1目錄。
通過(guò)pwd命令,我們知道test1.sql所在的路徑:
然后,通過(guò)以下恢復(fù)命令:
mysql> source /root/MySQL/test1.sql;
此時(shí),就可以查看到對(duì)應(yīng)test1的數(shù)據(jù)庫(kù)及其內(nèi)容:
注意事項(xiàng)
如果備份的不是整個(gè)數(shù)據(jù)庫(kù),而是其中的一張表,怎么做?
mysqldump -u root -p 數(shù)據(jù)庫(kù)名 表名1 表名2 > 路徑/mytest.sql
同時(shí)備份多個(gè)數(shù)據(jù)庫(kù)
mysqldump -u root -p -B 數(shù)據(jù)庫(kù)名1 數(shù)據(jù)庫(kù)名2 ... > 數(shù)據(jù)庫(kù)存放路徑
如果備份一個(gè)數(shù)據(jù)庫(kù)時(shí),沒(méi)有帶上-B參數(shù), 在恢復(fù)數(shù)據(jù)庫(kù)時(shí),需要先創(chuàng)建空數(shù)據(jù)庫(kù),然后使用數(shù)據(jù)庫(kù),再使用source來(lái)還原。
五.查看連接情況
如果在使用數(shù)據(jù)庫(kù)時(shí),出現(xiàn)卡頓,那么有可能訪問(wèn)數(shù)據(jù)庫(kù)的不止你一個(gè),所以,通過(guò)如下命令,我們可以看到User的數(shù)量及名稱Id。
show processlist;
這可以告訴我們當(dāng)前有哪些用戶連接到我們的MySQL,如果查出某個(gè)用戶不是你正常登陸的,很有可能你的數(shù)據(jù)庫(kù)被人入侵了。
總結(jié)
到此這篇關(guān)于MySQL操作庫(kù)的文章就介紹到這了,更多相關(guān)MySQL操作庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
單個(gè)select語(yǔ)句實(shí)現(xiàn)MySQL查詢統(tǒng)計(jì)次數(shù)
MySQL中查詢統(tǒng)計(jì)次數(shù)往往語(yǔ)句寫(xiě)法很復(fù)雜,下文就教您一個(gè)只用單個(gè)select語(yǔ)句就實(shí)現(xiàn)的方法,希望對(duì)您能夠有所幫助2014-05-05MySQL數(shù)據(jù)庫(kù)優(yōu)化詳解
這篇文章主要介紹了MySQL數(shù)據(jù)庫(kù)優(yōu)化的方方面面,各種小技巧,需要的朋友可以參考下2014-08-08Mysql 5.6使用配置文件my.ini來(lái)設(shè)置長(zhǎng)時(shí)間連接數(shù)據(jù)庫(kù)的問(wèn)題
這篇文章主要介紹了Mysql 5.6使用配置文件my.ini來(lái)設(shè)置長(zhǎng)時(shí)間連接數(shù)據(jù)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07數(shù)據(jù)庫(kù)中update與delete使用表別名的深入研究
本文介紹了UPDATE和DELETE?SQL語(yǔ)句在Oracle,?SQLite,?PostgreSQL,?MYSQL,?mariadb等數(shù)據(jù)庫(kù)系統(tǒng)中的執(zhí)行差異,文中通過(guò)代碼介紹的非常詳細(xì),對(duì)數(shù)據(jù)庫(kù)開(kāi)發(fā)和維護(hù)人員有指導(dǎo)意義,需要的朋友可以參考下2024-10-10