專業(yè)網(wǎng)站建設(shè)行業(yè)現(xiàn)狀網(wǎng)絡(luò)推廣項(xiàng)目外包公司
文章目錄
- 1. 創(chuàng)建數(shù)據(jù)庫
- 2. 字符集和校驗(yàn)規(guī)則
- 3. 數(shù)據(jù)庫的基本操作
- 3.1 查看數(shù)據(jù)庫
- 3.2 顯示創(chuàng)建數(shù)據(jù)庫的語句
- 3.3 修改數(shù)據(jù)庫
- 3.4 刪除數(shù)據(jù)庫
- 3.5 備份,還原數(shù)據(jù)庫
- 4. 查看數(shù)據(jù)庫的連接情況
1. 創(chuàng)建數(shù)據(jù)庫
基本語法:
create database if not exists 數(shù)據(jù)庫名 選項(xiàng)1 選項(xiàng)2
- if not exists ,可有可無,比如:你創(chuàng)建的表和已經(jīng)存在的表重名了,如果不加if not exists,就會(huì)直接報(bào)錯(cuò)。如果加上了 if not exists,就不會(huì)報(bào)錯(cuò),也不會(huì)替換原來的表。
- 數(shù)據(jù)庫名,這個(gè)沒得說,看的起名就行。
- 選項(xiàng)一: charset = ? 指定數(shù)據(jù)庫采用的字符集
- 選項(xiàng)二:collate ?指定數(shù)據(jù)庫字符集的校驗(yàn)規(guī)則
例子:
1.創(chuàng)建一個(gè)庫,指定它的字符集為utf8:
create database if not exists db2 charset=utf8;
- 創(chuàng)建一個(gè)使用utf字符集,并帶校對(duì)規(guī)則的數(shù)據(jù)庫:
create database if not exists db3 charset=utf8 collate utf8_general_ci;
2. 字符集和校驗(yàn)規(guī)則
- 字符集:字符集其實(shí)就是一套文字符號(hào)及編碼,對(duì)應(yīng)的文字及編碼,可以將人類可以識(shí)別的內(nèi)容與計(jì)算機(jī)可以識(shí)別的信息進(jìn)行互相轉(zhuǎn)換。也就是說不同的字符集,它相應(yīng)的文字和編碼不同。比如:gbk是非常適用于中文環(huán)境,utf8中英文混合的環(huán)境,建議使用此字符集,目前使用的比較多。
- 校驗(yàn)規(guī)則:凡是涉及到字符類型比較或排序的地方,都和校驗(yàn)規(guī)則有關(guān)。
- 字符集和校驗(yàn)規(guī)則的關(guān)系:每個(gè)校驗(yàn)規(guī)則唯一對(duì)應(yīng)一種字符集,但一個(gè)字符集可以對(duì)應(yīng)多種校驗(yàn)規(guī)則,其中有一個(gè)是默認(rèn)的。
Mysql的字符集和校驗(yàn)規(guī)則有4個(gè)級(jí)別的默認(rèn)設(shè)置:服務(wù)器級(jí),數(shù)據(jù)庫級(jí),表級(jí)和字段級(jí)。
- 查看服務(wù)器級(jí)別的:
show variables like 'character_set_server';
,這是字符集:
show variables like 'collation_server
,這是查看校驗(yàn)規(guī)則:
- 查看數(shù)據(jù)庫級(jí)別的:
show variables like ‘character_set_database’;
show variables like ‘collation_database’;
服務(wù)器級(jí)別,庫級(jí)別,表級(jí)別,列級(jí)別:
- 服務(wù)器級(jí)別的字符集和校驗(yàn)規(guī)則,在my.cnf里可以設(shè)置,如果沒有設(shè)置就是latin1和latin1_swedish_ci。
- 庫級(jí)別:這個(gè)是在創(chuàng)建庫的時(shí)候,可以在選項(xiàng)1和選項(xiàng)2中設(shè)置字符集和校驗(yàn)規(guī)則,如果沒有設(shè)置,那么就使用系統(tǒng)默認(rèn)的庫級(jí)別字符集和校驗(yàn)規(guī)則。但是如果系統(tǒng)沒有默認(rèn)的,那么就使用服務(wù)器級(jí)別的字符集和校驗(yàn)規(guī)則。
- 表級(jí)別和列級(jí)別,都是在創(chuàng)建表的時(shí)候,可以填上字符集和校驗(yàn)規(guī)則。表如果沒有設(shè)置的話,就使用庫的字符集和校驗(yàn)規(guī)則。列級(jí)別如果沒有設(shè)置的話,就使用表的字符集和校驗(yàn)規(guī)則。
查看數(shù)據(jù)庫支持的字符集:
show charset;
查看數(shù)據(jù)庫支持的校驗(yàn)規(guī)則:
show collation;
接下來,就來驗(yàn)證一下,校驗(yàn)規(guī)則對(duì)數(shù)據(jù)庫的影響:
- 創(chuàng)建一個(gè)庫w1,它的校驗(yàn)規(guī)則是用utf8_ general_ ci,這個(gè)是不區(qū)分字母大小寫的。
create database w1 collate utf8_general_ci
;
- 創(chuàng)建一個(gè)庫w2,它的校驗(yàn)規(guī)則是用用utf8_ bin,這個(gè)是區(qū)分字母大小寫的。
create database w2 collate utf8_bin;
在庫w1和庫w2,都創(chuàng)建一個(gè)表,表里面只有一個(gè)varchar,都插入"a",“b”,“A”,“B”:
use w1;
create table test1(name varchar(2));
insert into test1(name) values (“a”);
insert into test1(name) values (“b”);
insert into test1(name) values (“A”);
insert into test1(name) values (“B”);
w2和w1進(jìn)行一樣的操作,只不過w2中的表名為test2。
插入成功的test1和test2:
然后分別對(duì)test1和test2進(jìn)行查詢操作:
select * from test1 where name = “a”;
select * from test2 where name = “a”;
看到校驗(yàn)規(guī)則對(duì)查詢的影響了吧,這里其實(shí)可以創(chuàng)建表的時(shí)候,設(shè)置表級(jí)別的校驗(yàn)規(guī)則,但是本章是講庫操作的,所以就直接設(shè)置庫級(jí)別的校驗(yàn)規(guī)則,由于表并沒有給定校驗(yàn)規(guī)則,所以默認(rèn)使用庫的校驗(yàn)規(guī)則。
像排序
這種操作,校驗(yàn)規(guī)則也是有影響的:
3. 數(shù)據(jù)庫的基本操作
3.1 查看數(shù)據(jù)庫
show databases; 這是展示所有的庫。
show tables; 這是展示庫中的所有表。
當(dāng)然你想展示一個(gè)庫中的所有表,前提就是你得use + 想看的庫的名
。
3.2 顯示創(chuàng)建數(shù)據(jù)庫的語句
show create database w1;
注意:/ *…… * /,這個(gè)不是注釋,它的意思是 如果當(dāng)前的mysql的版本大于4.01,就執(zhí)行此語句。
3.3 修改數(shù)據(jù)庫
alter database 數(shù)據(jù)庫名 + 選項(xiàng)1 選項(xiàng)2
這個(gè)主要是對(duì)數(shù)據(jù)庫的字符集,校驗(yàn)規(guī)則進(jìn)行修改,選項(xiàng)1 是 charset,選項(xiàng)2 是collocate。
比如:修改數(shù)據(jù)庫的字符集,就修改w1數(shù)據(jù)庫,上面可以看到它的字符集是utf8
alter database w1 charset=gbk
3.4 刪除數(shù)據(jù)庫
刪除數(shù)據(jù)庫的操作,盡量不要干,傳說中的刪庫跑路就是這。但是Linux批量刪除文件就是 rm -f /*
,這就是將根目錄下的所有文件刪除。如果還是利用文件刪除,無非就是刪除一個(gè)目錄,因?yàn)閿?shù)據(jù)庫在Linux視角下就是一個(gè)目錄。
drop database 數(shù)據(jù)庫名
執(zhí)行刪除之后的結(jié)果:
- 數(shù)據(jù)庫內(nèi)部看不到對(duì)應(yīng)的數(shù)據(jù)庫
- 對(duì)應(yīng)的數(shù)據(jù)庫文件夾被刪除,級(jí)聯(lián)刪除,里面的數(shù)據(jù)表全部被刪
3.5 備份,還原數(shù)據(jù)庫
刪庫前要備份數(shù)據(jù)庫,這是我們?cè)撟龅?#xff0c;切記 必須備份 數(shù)據(jù)庫。
備份有兩種方式:
- 物理備份,就是先將 /var/lib/mysql 中要備份的庫(目錄),進(jìn)行打包操作,將此包保存在一個(gè)路徑下,假如原來的庫被刪除了,那么還原的操作就是將此包拷貝到/var/lib/mysql中,然后解包。至于/var/lib/mysql 是我的服務(wù)器中 數(shù)據(jù)庫的表和庫保存的路徑,至于大家的情況可能不一樣,所以具體還要看my.cnf的配置。
- 邏輯備份,這個(gè)就是MySQL的內(nèi)部操作了,它是利用的備份工具:mysqldump。之所以叫邏輯備份,因?yàn)樗鼈浞莸氖?你創(chuàng)建庫 以及在庫中創(chuàng)建表的SQL語句。它的還原操作就是將原來的SQL語句再次執(zhí)行一遍。
- 對(duì)比以上備份方式,物理備份占用的物理空間大,但是還原的快;邏輯備份占用的物理空間小,但是還原的慢。
我們主要來看邏輯備份:
mysqldump –u 用戶名稱 –h 主機(jī)名稱 –p密碼 待備份的數(shù)據(jù)庫名稱[tbname, [tbname…]]> 數(shù)據(jù)庫備份存儲(chǔ)的文件路徑+備份文件名稱.sql
比如:對(duì)數(shù)據(jù)庫w1進(jìn)行備份:
mysqldump -uroot -p w1>w1.sql;
注意:mysqldump是備份工具,它的使用是在Linux命令行中的,可不敢在MySQL命令行里使用哈。
上面語句的意思就是在當(dāng)下目錄備份w1為w1.sql;
先來看看w1.sql里面是什么東東:
-- MySQL dump 10.13 Distrib 5.6.51, for Linux (x86_64)
--
-- Host: localhost Database: w1
-- ------------------------------------------------------
-- Server version 5.6.51/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;--
-- Table structure for table `test1`
--DROP TABLE IF EXISTS `test1`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `test1` (`name` varchar(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `test1`
--LOCK TABLES `test1` WRITE;
/*!40000 ALTER TABLE `test1` DISABLE KEYS */;
INSERT INTO `test1` VALUES ('a'),('A'),('b'),('B');
/*!40000 ALTER TABLE `test1` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;-- Dump completed on 2023-02-21 17:40:47
- 以/* !開頭、*/結(jié)尾的語句為可執(zhí)行的MySQL注釋,這些語句可以被MySQL執(zhí)行,但在其他數(shù)據(jù)庫管理系統(tǒng)中被作為注釋忽略,這可以提高數(shù)據(jù)庫的可移植性;
- 文件開頭指明了備份文件使用的MySQLdump工具的版本號(hào)10.13 ;接下來是備份賬戶的名稱和主機(jī)信息,以及備份的數(shù)據(jù)庫的名稱;最后是MySQL服務(wù)器的版本號(hào),5.6.51。
- 然后拋開/ *…… * /,看到內(nèi)容大多數(shù)都是SQL語句。
先去把w1庫刪除了:
drop database w1;
show databases;
可以看到?jīng)]有w1庫了。
還原w1庫:
- 還原w1庫前,先得創(chuàng)建一個(gè)w1的空庫,這樣才能使用source進(jìn)行還原:create database w1;
- 有了w1空庫后,在MySQL命令行輸入:use w1;source w1.sql;這樣就還原成功了:
- 可以查看一下,w1庫中的表test1:
沒有問題。
以上是備份一個(gè)單個(gè)庫,但是還有其他的使用情況:
- 情況1:備份一個(gè)庫,就是上面講的例子。
- 情況2:備份一個(gè)庫中的一張表,或多張表。
- 情況3:備份多個(gè)庫。
我們來看情況2:我先創(chuàng)建一個(gè)庫hh1,里面創(chuàng)建兩張表:
創(chuàng)建庫:
創(chuàng)建表:
在表中插入數(shù)據(jù):
退出mysql,使用mysqldump對(duì)hh1的表u1進(jìn)行備份,不備份u2:
基本語法:mysqldump -u root -p 數(shù)據(jù)庫名 表名1 表名2 > 路徑+文件名.sql
mysqldump -uroot -p hh1 u1>hh1.sql
備份成功后,進(jìn)入sql服務(wù),因?yàn)檫@里還是只備份了一個(gè)庫,所以在 備份前還需要?jiǎng)?chuàng)建一個(gè)新的空庫 hh1;然后use hh1后,輸入source hh1.sql
;這樣就完成了備份。
然后來看情況3,備份多個(gè)庫:
基本語法: mysqldump -u root -p -B 數(shù)據(jù)庫名1 數(shù)據(jù)庫名2 ... > 數(shù)據(jù)庫存放路徑+文件名.sql
注意,這里有一個(gè)選項(xiàng)非常重要,那就是 -B
,這個(gè)選項(xiàng)其實(shí)在備份一個(gè)單庫時(shí)也可以用,如果在單庫備份里也加上-B
參數(shù),那么就不需要像上面那樣建立一個(gè)空庫。
比如:
我備份w1,w2 庫:mysqldump -uroot -B -p w1 w2>w12.sql;
刪除w1,w2 庫后,再進(jìn)行備份:直接在mysql命令行上輸入,source w12.sql;
這樣就備份成功了。
以上是關(guān)于備份還原的基本操作。
4. 查看數(shù)據(jù)庫的連接情況
基本語法:
show processlist
可以看到,當(dāng)前數(shù)據(jù)庫只有我在使用,我新起一個(gè)窗口,連接mysql:
發(fā)現(xiàn),這里連接用戶變?yōu)?個(gè)了。
作用:就是可以告訴我們當(dāng)前有哪些用戶連接到我們的MySQL,如果查出某個(gè)用戶不是你正常登陸的,很有可能你的數(shù)據(jù)庫被人入侵了。以后大家發(fā)現(xiàn)自己數(shù)據(jù)庫比較慢時(shí),可以用這個(gè)指令來查看數(shù)據(jù)庫連接情況。