目錄
一.數據庫基礎
1.1什么是數據庫
1.2基本使用
1.2.1連接服務器
1.2.2服務器,數據庫,表關系
1.2.3使用案例
1.2.4數據存儲結構
?編輯
?1.3MySQL架構
1.4SQL分類
1.5存儲引擎
1.5.1什么是存儲引擎
1.5.2查看存儲引擎
??編輯
1.5.3存儲引擎對比?
?編輯?二.庫的操作
2.1創建和刪除數據庫
2.2創建數據庫案例
2.3字符集和校驗規則
2.3.1查看系統默認的字符集和校驗規則
?編輯
2.3.2查看數據庫支持的字符集
2.3.3查看數據庫支持的字符集校驗規則?
2.3.4校驗規則對數據庫的影響
2.4操縱數據庫
2.4.1數據庫刪除?
2.4.2數據庫查看
?編輯
?2.4.3數據庫的修改
2.4.4備份和恢復
2.4.4.1備份?
?2.4.4.2恢復
2.4.4.3注意
2.4.5查看連接情況
三.表的操作
3.1創建表
3.2查看表結構
3.3修改表
3.3.1修改表名:
?3.3.2插入數據:
?3.3.3修改表里數據
3.4刪除表
一.數據庫基礎
1.1什么是數據庫
數據庫是一個用于存儲和管理數據的系統。它可以幫助用戶組織、檢索、更新和管理大量數據。
mysql是數據庫服務的客戶端,mysqld是數據庫服務的服務端,它的本質就是基于CS模式的網絡服務。?
文件保存數據有以下幾個缺點:
文件的安全性問題
文件不利于數據查詢和管理
文件不利于存儲海量數據
文件在程序中控制不方便
比如我們在一個普通文件里寫入大量的數據(十萬行十億行),那么多的數據在普通文件里,我們如果想要管理起來這是非常麻煩的一件事,比如我要修改十億行數據里的第一百萬行,怎么搞?
所以數據庫本質就是:對數據庫內容存儲的一套解決方案。
1.2基本使用
1.2.1連接服務器
輸入:mysql -h 127.0.0.1 -P 3306 -u root -p
或者:mysql -uroot -p
注意:
如果沒有寫 -h 127.0.0.1 默認是連接本地
如果沒有寫 -P 3306 默認是連接3306端口號
端口號我們自己也可以去改。打開/etc/my.cnf文件修改。
1.2.2服務器,數據庫,表關系
所謂安裝數據庫服務器,只是在機器上安裝了一個數據庫管理系統程序,這個管理程序可以管理多 個數據庫,一般開發人員會針對每一個應用創建一個數據庫。
為保存應用中實體的數據,一般會在數據庫中創建多個表,以保存程序中實體的數據。
數據庫服務器、數據庫和表的關系如下:
1.2.3使用案例
我創建一個helloworld:
使用數據庫:
創建數據庫表:?
此時在/var/lib/mysql/helloworld下會多出兩個student:
?在表中插入和查詢數據:
?
我們不會主動的去修改磁盤中的數據庫文件,這些工作都是mysql幫我們去做的。?
1.2.4數據存儲結構
?1.3MySQL架構
MySQL 是一個可移植的數據庫,幾乎能在當前所有的操作系統上運行,如 Unix/Linux、Windows、 Mac 和 Solaris。各種系統在底層實現方面各有不同,但是 MySQL 基本上能保證在各個平臺上的物理體系結構的一致性。
1.4SQL分類
DDL【data definition language】 數據定義語言,用來維護存儲數據的結構 代表指令: create, drop, alter
DML【data manipulation language】 數據操縱語言,用來對數據進行操作 代表指令: insert,delete,update
????????DML中又單獨分了一個DQL,數據查詢語言,代表指令: select
DCL【Data Control Language】 數據控制語言,主要負責權限管理和事務 代表指令: grant,revoke,commit ?
1.5存儲引擎
1.5.1什么是存儲引擎
存儲引擎是:數據庫管理系統如何存儲數據、如何為存儲的數據建立索引和如何更新、查詢數據等技術的實現方法。 MySQL的核心就是插件式存儲引擎,支持多種存儲引擎。
1.5.2查看存儲引擎
?
1.5.3存儲引擎對比?
?二.庫的操作
2.1創建和刪除數據庫
drop datebase (名字):
刪除之后:
?本質就是在/var/lib/mysql創建和刪除一個目錄(文件系統層面)。
所以說反過來在/var/lib/mysql目錄下使用mkdir創建一個目錄,也可以在數據庫中使用show databases看到。(注意理解一下就行了,不要這么干)
在創建數據庫層面我們還可以:
有了就不會再創建了,這是為了安全起見。
2.2創建數據庫案例
?那么我們在創建數據庫的時候當然可以使用默認的,我們還可以進行指定:
這三種方式都可以使用默認的字符集utf8:?
創建一個使用utf字符集,并帶校對規則的 db3 數據庫。
第四種:既指明字符集又指明檢驗規則:
?當然上面都是針對默認的字符集和校驗規則,我們也可以換其他的字符集和校驗規則:
換一下這種:
這里就可以看到:?
?
2.3字符集和校驗規則
2.3.1查看系統默認的字符集和校驗規則
字符集使用的是utf8
校驗規則utf8_ general_ ci :
2.3.2查看數據庫支持的字符集
上面寫建的數據庫我們都沒有寫明要使用哪一個字符集,所以系統就使用了默認的字符集,除了系統默認的utf8,還有以下的:?
?
2.3.3查看數據庫支持的字符集校驗規則?
2.3.4校驗規則對數據庫的影響
一個實驗:使用utf8的字符集創建,但是使用不同的校驗規則
不區分大小寫 ?使用utf8_general_ci
create database test1 collate utf8_general_ci; ?
create之后,用use使用test1:?
desc查看表結構:?
然后往表里插入(utf8):?
select查看表里有什么:?
?這里的校驗規則是不區分大小寫(utf8_general_ci):
區分大小寫 使用utf8_bin
這里的步驟跟上面的差不多,先使用use,再創建creat table
之后還是insert into person?
這里使用select去查找就只有小寫的a:?
?上面也就只是簡單的區分了一下不同的校驗規則查找的差別。
2.4操縱數據庫
增刪查改
增:create database +(名字) charset (字符集) collate(校驗規則)
適當的取用字符集和校驗規則?
2.4.1數據庫刪除?
刪:DROP DATABASE [IF EXISTS] db_ name;
執行刪除之后的結果:
數據庫內部看不到對應的數據庫
對應的數據庫文件夾被刪除,級聯刪除,里面的數據表全部被刪
注意:不要隨意刪除數據庫 ?
2.4.2數據庫查看
查:show databases;
有時候會頻繁的使用use,需要確認自己在哪一個數據庫里
?2.4.3數據庫的修改
對數據庫的修改主要指的是修改數據庫的字符集,校驗規則
假如我們現在需要把它的字符集和校驗規則改為gbk格式的:
2.4.4備份和恢復
2.4.4.1備份?
語法:
# mysqldump -P3306 -u root -p 密碼 -B 數據庫名 > 數據庫備份存儲的文件路徑
# mysqldump -P3306 -u root -p123456 -B mytest > D:/mytest.sql
我想把test1數據庫里的內容進行備份:?
此時再開一個終端:
在test1.sql里就是下面的內容,里面存儲的就是數據庫里的所有的數據(和操作),我們當然也可以直接對數據庫進行復制,但是這種做法的話是不建議的。我們還是要使用mysqldump:
?2.4.4.2恢復
mysql> source D:/mysql-5.7.22/mytest.sql;
我們先把之前的數據庫里的test1給刪掉:
使用source 加上剛才在另一個終端上備份的地址:?
source /root/MySQL/test1.sql
?
此時:
還原成功:
2.4.4.3注意
如果備份的不是整個數據庫,而是其中的一張表,怎么做? ?
# mysqldump -u root -p 數據庫名 表名1 表名2 > D:/mytest.sql
同時備份多個數據庫
# mysqldump -u root -p -B 數據庫名1 數據庫名2 ... > 數據庫存放路徑
如果備份一個數據庫時,沒有帶上-B參數, 在恢復數據庫時,需要先創建空數據庫,然后使用數據 庫,再使用source來還原。
2.4.5查看連接情況
show processlist
可以告訴我們當前有哪些用戶連接到我們的MySQL,如果查出某個用戶不是你正常登陸的,很有可能你的數據庫被人入侵了。以后大家發現自己數據庫比較慢時,可以用這個指令來查看數據庫連接情況。 ?
三.表的操作
3.1創建表
CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype
) character set 字符集 collate 校驗規則 engine 存儲引擎;
說明:
field 表示列名
datatype 表示列的類型
character set 字符集,如果沒有指定字符集,則以所在數據庫的字符集為準
collate 校驗規則,如果沒有指定校驗規則,則以所在數據庫的校驗規則為準
案例:?
此時的另一臺終端上的mysql目錄下的user_db里就會有:?
?不同的存儲引擎,創建表的文件不一樣。?
users 表存儲引擎是 MyISAM ,在數據目中有三個不同的文件,分別是:
users.frm:表結構
users.MYD:表數據
users.MYI:表索引
?這里換一種engine:?
在另一個終端上只會多出來這兩種:?
當我們不添加engine 的時候,會默認使用innodb:
因為在/etc/my.cnt里:
3.2查看表結構
desc 表名;
?
這個可以顯示更詳細的表信息:?
show create table+表名
這樣看不太方便的話可以加上\G來清除不想要的信息:?
3.3修改表
在項目實際開發中,經常修改某個表的結構,比如字段名字,字段大小,字段類型,表的字符集類型, 表的存儲引擎等等。我們還有需求,添加字段,刪除字段等等。這時我們就需要修改表。
3.3.1修改表名:
alter table user1 rename to user;
to:可以省掉 ?
?3.3.2插入數據:
?3.3.3修改表里數據
添加新字段:
alter table user add image_path varchar(128) comment '用戶的頭像路徑' after birthday;
after指明是在表的哪個位置:?
?
?修改name(修改大小):
原本的name大小是20,現在我想改為60:
alter table user modify name varchar(60);
?注意:這里的修改是覆蓋的修改,我們之前在寫name這個字段的時候有對字段的描述commend。但是在我們修改之后,commend就會不見了。
?刪除password列:
alter table user drop password;
?修改列名稱
把name改為xingming:
注意必須把屬性帶上。
3.4刪除表
drop table t1;