入門(mén)使用
1. MySQL演示使用
1. MySQL的使用演示
1. 查看所有的數(shù)據(jù)庫(kù)
show databases;
- “information_schema”是 MySQL 系統(tǒng)自帶的數(shù)據(jù)庫(kù)俺泣,主要保存 MySQL 數(shù)據(jù)庫(kù)服務(wù)器的系統(tǒng)信息疗认,
比如數(shù)據(jù)庫(kù)的名稱、數(shù)據(jù)表的名稱伏钠、字段名稱侮邀、存取權(quán)限、數(shù)據(jù)文件 所在的文件夾和系統(tǒng)使用的
文件夾贝润,等等- “performance_schema”是 MySQL 系統(tǒng)自帶的數(shù)據(jù)庫(kù)绊茧,可以用來(lái)監(jiān)控 MySQL 的各類性能指標(biāo)。
- “sys”數(shù)據(jù)庫(kù)是 MySQL 系統(tǒng)自帶的數(shù)據(jù)庫(kù)打掘,主要作用是以一種更容易被理解的方式展示 MySQL 數(shù)據(jù)庫(kù)服務(wù)器的各類性能指標(biāo)华畏,幫助系統(tǒng)管理員和開(kāi)發(fā)人員監(jiān)控 MySQL 的技術(shù)性能。
- “mysql”數(shù)據(jù)庫(kù)保存了 MySQL 數(shù)據(jù)庫(kù)服務(wù)器運(yùn)行時(shí)需要的系統(tǒng)信息尊蚁,比如數(shù)據(jù)文件夾亡笑、當(dāng)前使用的字符集、約束檢查信息横朋,等等
為什么 Workbench 里面我們只能看到“demo”和“sys”這 2 個(gè)數(shù)據(jù)庫(kù)呢仑乌?
這是因?yàn)椋琖orkbench 是圖形化的管理工具,主要面向開(kāi)發(fā)人 員晰甚,“demo”和“sys”這 2 個(gè)數(shù)據(jù)庫(kù)已經(jīng)夠用了衙传。如果有特殊需求,比如厕九,需要監(jiān)控 MySQL 數(shù)據(jù)庫(kù)各項(xiàng)性能指標(biāo)蓖捶、直接操作 MySQL 數(shù)據(jù)庫(kù)系統(tǒng)文件等,可以由 DBA 通過(guò) SQL 語(yǔ)句扁远,查看其它的系統(tǒng)數(shù)據(jù)庫(kù)俊鱼。
2. 創(chuàng)建數(shù)據(jù)庫(kù)
create database 數(shù)據(jù)庫(kù)名;
-- 創(chuàng)建atguigudb數(shù)據(jù)庫(kù),該名稱不能與已經(jīng)存在的數(shù)據(jù)庫(kù)重名畅买。
create database atguigudb;
3. 使用數(shù)據(jù)庫(kù)
use 數(shù)據(jù)庫(kù)名;
-- 使用atguigudb數(shù)據(jù)庫(kù)
use atguigudb;
說(shuō)明:如果沒(méi)有使用use語(yǔ)句并闲,后面針對(duì)數(shù)據(jù)庫(kù)的操作也沒(méi)有加“數(shù)據(jù)名”的限定,那么會(huì)報(bào)“ERROR 1046
(3D000): No database selected”(沒(méi)有選擇數(shù)據(jù)庫(kù))
使用完use語(yǔ)句之后谷羞,如果接下來(lái)的SQL都是針對(duì)一個(gè)數(shù)據(jù)庫(kù)操作的帝火,那就不用重復(fù)use了,如果要針對(duì)另
一個(gè)數(shù)據(jù)庫(kù)操作洒宝,那么要重新use购公。
4. 查看某個(gè)庫(kù)的所有表
show tables; #要求前面有use語(yǔ)句
show tables from 數(shù)據(jù)庫(kù)名;
5. 創(chuàng)建新的表
create table 表名稱(
字段名 數(shù)據(jù)類型,
字段名 數(shù)據(jù)類型
);
-- 說(shuō)明:如果是最后一個(gè)字段,后面就不用加逗號(hào)雁歌,因?yàn)槎禾?hào)的作用是分割每個(gè)字段宏浩。
-- 創(chuàng)建學(xué)生表
create table student(
id int,
name varchar(20) #說(shuō)名字最長(zhǎng)不超過(guò)20個(gè)字符
);
6. 查看表的數(shù)據(jù)
select * from 數(shù)據(jù)庫(kù)表名稱;
-- 查看學(xué)生表的數(shù)據(jù)
select * from student;
7. 添加一條記錄
insert into 表名稱 values(值列表);
-- 添加兩條記錄到student表中
insert into student values(1,'張三');
insert into student values(2,'李四');
報(bào)錯(cuò):
mysql> insert into student values(1,'張三');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at
row 1
mysql> insert into student values(2,'李四');
ERROR 1366 (HY000): Incorrect string value: '\xC0\xEE\xCB\xC4' for column 'name' at
row 1
mysql> show create table student;
字符集的問(wèn)題。
8. 查看表的創(chuàng)建信息
show create table 表名稱
-- 查看student表的詳細(xì)創(chuàng)建信息
show create table student
-- 結(jié)果如下
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`id` int(11) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
-- 上面的結(jié)果顯示student的表格的默認(rèn)字符集是“l(fā)atin1”不支持中文靠瞎。
9. 查看數(shù)據(jù)庫(kù)的創(chuàng)建信息
show create database 數(shù)據(jù)庫(kù)名
-- 查看atguigudb數(shù)據(jù)庫(kù)的詳細(xì)創(chuàng)建信息
show create database atguigudb
-- 結(jié)果如下
*************************** 1. row ***************************
Database: atguigudb
Create Database: CREATE DATABASE `atguigudb` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)
-- 上面的結(jié)果顯示atguigudb數(shù)據(jù)庫(kù)也不支持中文比庄,字符集默認(rèn)是latin1。
10. 刪除表
drop table 表名稱;
-- 刪除學(xué)生表
drop table student;
11. 刪除數(shù)據(jù)庫(kù)
drop database 數(shù)據(jù)庫(kù)名;
-- 刪除atguigudb數(shù)據(jù)庫(kù)
drop database atguigudb
2. MySQL的編碼設(shè)置
1. MySQL5.7中
問(wèn)題再現(xiàn):命令行操作sql亂碼問(wèn)題
mysql> INSERT INTO t_stu VALUES(1,'張三','男');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at
row 1
問(wèn)題解決
-
查看編碼命令
show variables like 'character_%'; show variables like 'collation_%';
-
修改mysql的數(shù)據(jù)目錄下的my.ini配置文件
[mysql] #大概在63行左右乏盐,在其下添加 ... default-character-set=utf8 #默認(rèn)字符集 [mysqld] # 大概在76行左右佳窑,在其下添加 ... character-set-server=utf8 collation-server=utf8_general_ci
注意:建議修改配置文件使用notepad++等高級(jí)文本編輯器,使用記事本等軟件打開(kāi)修改后可能會(huì)導(dǎo)致文件編碼修改為“含BOM頭”的編碼父能,從而服務(wù)重啟失敗神凑。
重啟服務(wù)
-
查看編碼命令
show variables like 'character_%'; show variables like 'collation_%';
- 如果是以上配置就說(shuō)明對(duì)了。接著我們就可以新創(chuàng)建數(shù)據(jù)庫(kù)何吝、新創(chuàng)建數(shù)據(jù)表溉委,接著添加包含中文的
數(shù)據(jù)了。
2. MySQL8.0中
在MySQL 8.0版本之前爱榕,默認(rèn)字符集為latin1瓣喊,utf8字符集指向的是utf8mb3。網(wǎng)站開(kāi)發(fā)人員在數(shù)據(jù)庫(kù)設(shè)計(jì) 的時(shí)候往往會(huì)將編碼修改為utf8字符集黔酥。如果遺忘修改默認(rèn)的編碼藻三,就會(huì)出現(xiàn)亂碼的問(wèn)題洪橘。從MySQL 8.0 開(kāi)始,數(shù)據(jù)庫(kù)的默認(rèn)編碼改為 utf8mb4 棵帽,從而避免了上述的亂碼問(wèn)題熄求。
5. MySQL圖形化管理工具
MySQL圖形化管理工具極大地方便了數(shù)據(jù)庫(kù)的操作與管理,常用的圖形化管理工具有:MySQL
Workbench岖寞、phpMyAdmin抡四、Navicat Preminum柜蜈、MySQLDumper仗谆、SQLyog、dbeaver淑履、MySQL ODBC Connector隶垮。
1. 工具1. MySQL Workbench
MySQL官方提供的圖形化管理工具M(jìn)ySQL Workbench完全支持MySQL 5.0以上的版本。MySQL Workbench 分為社區(qū)版和商業(yè)版秘噪,社區(qū)版完全免費(fèi)狸吞,而商業(yè)版則是按年收費(fèi)。
MySQL Workbench 為數(shù)據(jù)庫(kù)管理員指煎、程序開(kāi)發(fā)者和系統(tǒng)規(guī)劃師提供可視化設(shè)計(jì)蹋偏、模型建立、以及數(shù)據(jù)庫(kù)
管理功能至壤。它包含了用于創(chuàng)建復(fù)雜的數(shù)據(jù)建模ER模型威始,正向和逆向數(shù)據(jù)庫(kù)工程,也可以用于執(zhí)行通常需
要花費(fèi)大量時(shí)間的像街、難以變更和管理的文檔任務(wù)黎棠。
使用:
首先,我們點(diǎn)擊 Windows 左下角的“開(kāi)始”按鈕镰绎,如果你是 Win10 系統(tǒng)脓斩,可以直接看到所有程序。接著畴栖, 找到“MySQL”随静,點(diǎn)開(kāi),找到“MySQL Workbench 8.0 CE”吗讶。點(diǎn)擊打開(kāi) Workbench燎猛,如下圖所示:
左下角有個(gè)本地連接,點(diǎn)擊关翎,錄入 Root 的密碼扛门,登錄本地 MySQL 數(shù)據(jù)庫(kù)服務(wù)器,如下圖所示:
這是一個(gè)圖形化的界面纵寝,介紹下這個(gè)界面论寨。
- 上方是菜單星立。左上方是導(dǎo)航欄,這里我們可以看到 MySQL 數(shù)據(jù)庫(kù)服務(wù)器里面的數(shù)據(jù) 庫(kù)葬凳,包括數(shù)據(jù)
表绰垂、視圖、存儲(chǔ)過(guò)程和函數(shù)火焰;左下方是信息欄劲装,可以顯示上方選中的數(shù)據(jù) 庫(kù)、數(shù)據(jù)表等對(duì)象的信
息昌简。 - 中間上方是工作區(qū)占业,你可以在這里寫(xiě) SQL 語(yǔ)句,點(diǎn)擊上方菜單欄左邊的第三個(gè)運(yùn)行按 鈕纯赎,就可以執(zhí)
行工作區(qū)的 SQL 語(yǔ)句了谦疾。 - 中間下方是輸出區(qū),用來(lái)顯示 SQL 語(yǔ)句的運(yùn)行情況犬金,包括什么時(shí)間開(kāi)始運(yùn)行的念恍、運(yùn)行的 內(nèi)容、運(yùn)行
的輸出晚顷,以及所花費(fèi)的時(shí)長(zhǎng)等信息峰伙。
好了,下面我們就用 Workbench 實(shí)際創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)该默,并且導(dǎo)入一個(gè) Excel 數(shù)據(jù)文件瞳氓, 來(lái)生成一個(gè)數(shù)據(jù)表。數(shù)據(jù)表是存儲(chǔ)數(shù)據(jù)的載體权均,有了數(shù)據(jù)表以后顿膨,我們就能對(duì)數(shù)據(jù)進(jìn)行操作了。
2. 工具2. Navicat
Navicat MySQL是一個(gè)強(qiáng)大的MySQL數(shù)據(jù)庫(kù)服務(wù)器管理和開(kāi)發(fā)工具叽赊。它可以與任何3.21或以上版本的
MySQL一起工作恋沃,支持觸發(fā)器、存儲(chǔ)過(guò)程必指、函數(shù)囊咏、事件、視圖塔橡、管理用戶等梅割,對(duì)于新手來(lái)說(shuō)易學(xué)易用。
其精心設(shè)計(jì)的圖形用戶界面(GUI)可以讓用戶用一種安全簡(jiǎn)便的方式來(lái)快速方便地創(chuàng)建葛家、組織户辞、訪問(wèn)和
共享信息。Navicat支持中文癞谒,有免費(fèi)版本提供底燎。下載地址
3. 工具3. SQLyog
SQLyog 是業(yè)界著名的 Webyog 公司出品的一款簡(jiǎn)潔高效刃榨、功能強(qiáng)大的圖形化 MySQL 數(shù)據(jù)庫(kù)管理工具。
這款工具是使用C++語(yǔ)言開(kāi)發(fā)的双仍。該工具可以方便地創(chuàng)建數(shù)據(jù)庫(kù)枢希、表、視圖和索引等朱沃,還可以方便地進(jìn)行
插入苞轿、更新和刪除等操作,同時(shí)可以方便地進(jìn)行數(shù)據(jù)庫(kù)逗物、數(shù)據(jù)表的備份和還原搬卒。該工具不僅可以通過(guò)
SQL文件進(jìn)行大量文件的導(dǎo)入和導(dǎo)出,還可以導(dǎo)入和導(dǎo)出XML敬察、HTML和CSV等多種格式的數(shù)據(jù)秀睛。 下載地
址 尔当,讀者也可以搜索中文版的下載地址莲祸。
4. 工具4:dbeaver
DBeaver是一個(gè)通用的數(shù)據(jù)庫(kù)管理工具和 SQL 客戶端,支持所有流行的數(shù)據(jù)庫(kù):MySQL椭迎、PostgreSQL锐帜、
SQLite、Oracle畜号、DB2缴阎、SQL Server、 Sybase简软、MS Access蛮拔、Teradata、 Firebird痹升、Apache Hive建炫、Phoenix、 Presto等疼蛾。DBeaver比大多數(shù)的SQL管理工具要輕量肛跌,而且支持中文界面。DBeaver社區(qū)版作為一個(gè)免費(fèi)開(kāi)源的產(chǎn)品察郁,和其他類似的軟件相比衍慎,在功能和易用性上都毫不遜色。
唯一需要注意是 DBeaver 是用Java編程語(yǔ)言開(kāi)發(fā)的皮钠,所以需要擁有 JDK(Java Development ToolKit)環(huán)境稳捆。如果電腦上沒(méi)有JDK,在選擇安裝DBeaver組件時(shí)麦轰,勾選“Include Java”即可乔夯。下載地址
5. 可能出現(xiàn)連接問(wèn)題
有些圖形界面工具期虾,特別是舊版本的圖形界面工具,在連接MySQL8時(shí)出現(xiàn)“Authentication plugin
'caching_sha2_password' cannot be loaded”錯(cuò)誤驯嘱。
出現(xiàn)這個(gè)原因是MySQL8之前的版本中加密規(guī)則是mysql_native_password镶苞,而在MySQL8之后,加密規(guī)則是caching_sha2_password鞠评。解決問(wèn)題方法有兩種茂蚓,
第一種是升級(jí)圖形界面工具版本。
第二種是把MySQL8 用戶登錄密碼加密規(guī)則還原成mysql_native_password剃幌。
第二種解決方案如下聋涨,用命令行登錄MySQL數(shù)據(jù)庫(kù)之后,執(zhí)行如下命令修改用戶密碼加密規(guī)則并更新用
戶密碼负乡,這里修改用戶名為“root@localhost”的用戶密碼規(guī)則為“mysql_native_password”牍白,密碼值為
“123456”,如圖所示抖棘。
-- 使用mysql數(shù)據(jù)庫(kù)
USE mysql;
-- 修改'root'@'localhost'用戶的密碼規(guī)則和密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'abc123';
-- 刷新權(quán)限
FLUSH PRIVILEGES;
6. MySQL目錄結(jié)構(gòu)與源碼
1. 主要目錄結(jié)構(gòu)
MySQL的目錄結(jié)構(gòu) | 說(shuō)明 |
---|---|
bin目錄 | 所有MySQL的可執(zhí)行文件茂腥。如:mysql.exe |
MySQLInstanceConfig.exe | 數(shù)據(jù)庫(kù)的配置向?qū)В诎惭b時(shí)出現(xiàn)的內(nèi)容 |
data目錄 | 系統(tǒng)數(shù)據(jù)庫(kù)所在的目錄 |
my.ini文件 | MySQL的主要配置文件 |
c:\ProgramData\MySQL\MySQL Server 8.0\data\ | 用戶創(chuàng)建的數(shù)據(jù)庫(kù)所在的目錄 |
2. MySQL 源代碼獲取
首先切省,進(jìn)入 MySQL下載界面最岗。 這里不要選擇用默認(rèn)的“Microsoft Windows”,而是要通過(guò)下拉欄朝捆,
找到“Source Code”般渡,在下面的操作系統(tǒng)版本里面, 選擇 Windows(Architecture Independent)芙盘,然后點(diǎn)擊下載驯用。
接下來(lái),把下載下來(lái)的壓縮文件解壓儒老,我們就得到了 MySQL 的源代碼蝴乔。
MySQL 是用 C++ 開(kāi)發(fā)而成的,我簡(jiǎn)單介紹一下源代碼的組成贷盲。
mysql-8.0.22 目錄下的各個(gè)子目錄淘这,包含了 MySQL 各部分組件的源代碼:
- sql 子目錄是 MySQL 核心代碼;
- libmysql 子目錄是客戶端程序 API巩剖;
- mysql-test 子目錄是測(cè)試工具铝穷;
- mysys 子目錄是操作系統(tǒng)相關(guān)函數(shù)和輔助函數(shù);
源代碼可以用記事本打開(kāi)查看佳魔,如果你有 C++ 的開(kāi)發(fā)環(huán)境曙聂,也可以在開(kāi)發(fā)環(huán)境中打開(kāi)查看。
[圖片上傳失敗...(image-964d7e-1713457809390)]
如上圖所示鞠鲜,源代碼并不神秘宁脊,就是普通的 C++ 代碼断国,跟你熟悉的一樣,而且有很多注釋榆苞,可以幫助你
理解稳衬。閱讀源代碼就像在跟 MySQL 的開(kāi)發(fā)人員對(duì)話一樣,十分有趣坐漏。
7. 常見(jiàn)問(wèn)題的解決(課外內(nèi)容)
1. 問(wèn)題1:root用戶密碼忘記薄疚,重置的操作
通過(guò)任務(wù)管理器或者服務(wù)管理,關(guān)掉mysqld(服務(wù)進(jìn)程)
通過(guò)命令行+特殊參數(shù)開(kāi)啟mysqld mysqld -- defaults-file="D:\ProgramFiles\mysql\MySQLServer5.7Data\my.ini" --skip-grant-tables
此時(shí)赊琳,mysqld服務(wù)進(jìn)程已經(jīng)打開(kāi)街夭。并且不需要權(quán)限檢查
mysql -uroot 無(wú)密碼登陸服務(wù)器。另啟動(dòng)一個(gè)客戶端進(jìn)行
-
修改權(quán)限表
use mysql; update user set authentication_string=password('新密碼') where user='root' and Host='localhost'; flush privileges;
通過(guò)任務(wù)管理器躏筏,關(guān)掉mysqld服務(wù)進(jìn)程板丽。
再次通過(guò)服務(wù)管理,打開(kāi)mysql服務(wù)趁尼。
即可用修改后的新密碼登陸埃碱。
2. 問(wèn)題2:mysql命令報(bào)“不是內(nèi)部或外部命令”
如果輸入mysql命令報(bào)“不是內(nèi)部或外部命令”,把mysql安裝目錄的bin目錄配置到環(huán)境變量path中弱卡。如下:
3. 問(wèn)題3:錯(cuò)誤ERROR :沒(méi)有選擇數(shù)據(jù)庫(kù)就操作表格和數(shù)據(jù)
ERROR 1046 (3D000): No database selected |
---|
解決方案一:就是使用“USE 數(shù)據(jù)庫(kù)名;”語(yǔ)句乃正,這樣接下來(lái)的語(yǔ)句就默認(rèn)針對(duì)這個(gè)數(shù)據(jù)庫(kù)進(jìn)行操作 |
解決方案二:就是所有的表對(duì)象前面都加上“數(shù)據(jù)庫(kù).” |
4. 問(wèn)題4:命令行客戶端的字符集問(wèn)題
mysql> INSERT INTO t_stu VALUES(1,'張三','男');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at
row 1
原因:服務(wù)器端認(rèn)為你的客戶端的字符集是utf-8,而實(shí)際上你的客戶端的字符集是GBK婶博。
查看所有字符集: SHOW VARIABLES LIKE 'character_set_%';
解決方案,設(shè)置當(dāng)前連接的客戶端字符集 “SET NAMES GBK;”
5. 問(wèn)題5:修改數(shù)據(jù)庫(kù)和表的字符編碼
修改編碼:
- 先停止服務(wù)
- 修改my.ini文件
- 重新啟動(dòng)服務(wù)
說(shuō)明:
如果是在修改my.ini之前建的庫(kù)和表荧飞,那么庫(kù)和表的編碼還是原來(lái)的Latin1凡人,要么刪了重建,要么使用
alter語(yǔ)句修改編碼叹阔。
mysql> create database 0728db charset Latin1;
Query OK, 1 row affected (0.00 sec)
mysql> use 0728db;
Database changed
mysql> create table student (id int , name varchar(20)) charset Latin1;
Query OK, 0 rows affected (0.02 sec)
mysql> show create table student
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
修改字符集
mysql> alter table student charset utf8; #修改表字符編碼為UTF8
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table student
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`id` int(11) NOT NULL,
`name` varchar(20) CHARACTER SET latin1 DEFAULT NULL, #字段仍然是latin1編碼
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> alter table student modify name varchar(20) charset utf8; #修改字段字符編碼為UTF8
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table student
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`id` int(11) NOT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
-- 修改數(shù)據(jù)庫(kù)字符集編碼
mysql> show create database 0728db;
+--------+-----------------------------------------------------------------+
|Database| Create Database |
+------+-------------------------------------------------------------------+
|0728db| CREATE DATABASE `0728db` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> alter database 0728db charset utf8; #修改數(shù)據(jù)庫(kù)的字符編碼為utf8
Query OK, 1 row affected (0.00 sec)
mysql> show create database 0728db;
+--------+-----------------------------------------------------------------+
|Database| Create Database |
+--------+-----------------------------------------------------------------+
| 0728db | CREATE DATABASE `0728db` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+--------+-----------------------------------------------------------------+
1 row in set (0.00 sec)