網(wǎng)站優(yōu)化解決方案第一設(shè)計(jì)
目錄
基本使用
使用案例
SQL分類
存儲(chǔ)引擎
庫(kù)的操作
字符集和校驗(yàn)規(guī)則
查看系統(tǒng)默認(rèn)字符集和校驗(yàn)規(guī)則
查看數(shù)據(jù)庫(kù)支持的字符集
查看數(shù)據(jù)庫(kù)支持的字符集校驗(yàn)規(guī)則
指定編碼常見數(shù)據(jù)庫(kù)
?校驗(yàn)規(guī)則對(duì)數(shù)據(jù)庫(kù)的影響
操縱數(shù)據(jù)庫(kù)
庫(kù)的備份與恢復(fù)
表的操作
創(chuàng)建表
查看表
修改表
刪除表
基本使用
連接服務(wù)器?
mysql -h 127.0.0.1 -P 3306 -u root -p
- -h:指明登錄部署了mysql的主機(jī);
- -P:指明我們要訪問(wèn)的端口號(hào)
- -u:指明登錄用戶;
- -p:指明需要輸入密碼。
什么是數(shù)據(jù)庫(kù)?
mysql--數(shù)據(jù)庫(kù)服務(wù)的客戶端,mysqld--數(shù)據(jù)庫(kù)服務(wù)的服務(wù)器端(帶d表明是一種守護(hù)進(jìn)程),mysql本質(zhì)是基于C(mysql)和S(mysqld)模式的網(wǎng)絡(luò)服務(wù),
mysql既然是一種網(wǎng)絡(luò)服務(wù),就要綁定端口號(hào),默認(rèn)是3306。mysql是一套給我提供數(shù)據(jù)存取的服務(wù)的網(wǎng)絡(luò)程序。數(shù)據(jù)庫(kù)一般指在磁盤或者內(nèi)存中存儲(chǔ)的特定結(jié)構(gòu)組織的數(shù)據(jù)(將來(lái)在磁盤上存儲(chǔ)的一套數(shù)據(jù)庫(kù)方案)。數(shù)據(jù)庫(kù)服務(wù)特指mysqld。
存儲(chǔ)數(shù)據(jù)用文件就行了,為什么還要有數(shù)據(jù)庫(kù)?
一般文件確實(shí)提供了數(shù)據(jù)的存儲(chǔ)功能,但是文件并沒有提供非常好的數(shù)據(jù)管理能力(用戶角度)。
數(shù)據(jù)庫(kù)本質(zhì):對(duì)數(shù)據(jù)內(nèi)容存儲(chǔ)的一套解決方案,你給我字段或要求,我(數(shù)據(jù)庫(kù))給你直接返回結(jié)果。
文件保存有如下缺點(diǎn):
- 文件的安全性問(wèn)題;
- 文件不利于數(shù)據(jù)查詢和管理;
- 文件不利于存儲(chǔ)海量數(shù)據(jù);
- 文件在程序控制中不方便。
使用案例
- 創(chuàng)建數(shù)據(jù)庫(kù)
create database helloworld;
建立數(shù)據(jù)庫(kù),本質(zhì)就是linux下的一個(gè)目錄。
- 使用數(shù)據(jù)庫(kù)
use helloworld;
- 創(chuàng)建數(shù)據(jù)庫(kù)表
create table student(id int,name varchar(32),gender varchar(32)
);
在數(shù)據(jù)庫(kù)內(nèi)建立表,本質(zhì)就是在Linux下創(chuàng)建對(duì)應(yīng)的文件即可!
- 表中插入數(shù)據(jù)
insert into student (name, age, gender) values ('姓名',20,'男');
- 查詢表中數(shù)據(jù)
select * from student;
這個(gè)工作實(shí)際上是mysqld幫我們做的。數(shù)據(jù)庫(kù)本質(zhì)也是文件,只不過(guò)這些文件并不由程序員直接操作,而是由數(shù)據(jù)庫(kù)服務(wù)幫我們進(jìn)行操作。
服務(wù)器,數(shù)據(jù)庫(kù),表關(guān)系
數(shù)據(jù)邏輯存儲(chǔ)
SQL分類
- DDL,數(shù)據(jù)定義語(yǔ)言,用來(lái)維護(hù)存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)代表指令:create、drop、alter;
- DML,數(shù)據(jù)操縱語(yǔ)言,用來(lái)對(duì)數(shù)據(jù)進(jìn)行操作的代表指令:insert、delete、update;其中還包括數(shù)據(jù)查詢語(yǔ)言,代表指令select;
- DCL,數(shù)據(jù)控制語(yǔ)言,主要負(fù)責(zé)權(quán)限管理和事務(wù)代表指令:grant,revoke、commit。
存儲(chǔ)引擎
存儲(chǔ)引擎是:數(shù)據(jù)庫(kù)管理系統(tǒng)如何存儲(chǔ)數(shù)據(jù)、如何為存儲(chǔ)的數(shù)據(jù)建立索引和如何更新、查詢數(shù)據(jù)等技術(shù)的實(shí)現(xiàn)方法。其中,最常用的是InnoDB和MylSAM。
庫(kù)的操作
- 創(chuàng)建數(shù)據(jù)庫(kù):create database db_name; -- 本質(zhì)就是在/var/lib/mysql創(chuàng)建一個(gè)目錄
- 刪除數(shù)據(jù)庫(kù):drop database db_name; -- 刪除目錄
字符集和校驗(yàn)規(guī)則
創(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ù)做任何操作,都必須保證操作和編碼必須是編碼一致的!
查看系統(tǒng)默認(rèn)字符集和校驗(yàn)規(guī)則
show variables like 'character_set_database';
show variables like 'collation_database';
查看數(shù)據(jù)庫(kù)支持的字符集
show charset;
查看數(shù)據(jù)庫(kù)支持的字符集校驗(yàn)規(guī)則
show collation;
指定編碼常見數(shù)據(jù)庫(kù)
1.創(chuàng)建名為d1的數(shù)據(jù)庫(kù),當(dāng)沒有指定字符集和校驗(yàn)規(guī)則時(shí),系統(tǒng)默認(rèn)采用默認(rèn)字符集:utf8,校驗(yàn)規(guī)則:utf8_general_ci;????????
create database d1;
2.創(chuàng)建一個(gè)使用utf8字符集的d2數(shù)據(jù)庫(kù);
create database d2 charset=utf8;
3.創(chuàng)建一個(gè)utf8字符集,并指定檢驗(yàn)集utf8_general_ci(這種不區(qū)分大小寫)的d3數(shù)據(jù)庫(kù)
create database d3 charset=utf8 collate utf8_general_ci;
?校驗(yàn)規(guī)則對(duì)數(shù)據(jù)庫(kù)的影響
- 不區(qū)分大小寫:校驗(yàn)規(guī)則使用utf8_general_ci;
- 區(qū)分大小寫:校驗(yàn)規(guī)則使用utf8_bin;
采用哪種校驗(yàn)規(guī)則,會(huì)對(duì)查詢結(jié)果或排序結(jié)果有影響。
操縱數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)刪除
drop database [if exists] db_name;
在執(zhí)行刪除數(shù)據(jù)庫(kù)操作后,里面的數(shù)據(jù)表都會(huì)被刪除,所以,不要隨意刪除數(shù)據(jù)庫(kù),最好做備份再刪除。
查看數(shù)據(jù)庫(kù)
show database;
顯示創(chuàng)建語(yǔ)句
show create database db_name;
查看當(dāng)前在哪個(gè)數(shù)據(jù)庫(kù)
select database();
修改數(shù)據(jù)庫(kù)
alter database db_name charset=gbk collate gbk_chinese_ci;
對(duì)數(shù)據(jù)庫(kù)的修改主要是修改數(shù)據(jù)庫(kù)的字符集和校驗(yàn)規(guī)則。
庫(kù)的備份與恢復(fù)
備份
mysqldump -P3306 -u root -p 密碼 數(shù)據(jù)庫(kù)名 > 數(shù)據(jù)庫(kù)備份存儲(chǔ)的文件路徑;
例如,我們將數(shù)據(jù)庫(kù)test備份,形成test.sql,test.sql中其實(shí)是我們整個(gè)創(chuàng)建數(shù)據(jù)庫(kù),建表,導(dǎo)入數(shù)據(jù)的語(yǔ)句都放在這個(gè)文件中。
還原
source 文件路徑;
注意:
- 如果備份的是數(shù)據(jù)庫(kù)中的一張表,那么這樣做:
mysqldump -u root -p 數(shù)據(jù)庫(kù)名 表名1 表名2 > 路徑
- 同時(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í),沒有帶上-B參數(shù),在恢復(fù)數(shù)據(jù)庫(kù)時(shí),需要先創(chuàng)建空數(shù)據(jù)庫(kù)(可以換成別的名字),然后使用數(shù)據(jù)庫(kù),再使用source還原。
查看連接情況
show processlist;
可以告訴當(dāng)前有哪些用戶連接到我們的MySQL,這可以幫助我們看有沒有異常用戶,是不是數(shù)據(jù)庫(kù)被入侵了。
表的操作
創(chuàng)建表
create table table_name(field1 datatype,field2 datatype,field3 datatype
)character set 字符集 collate 校驗(yàn)規(guī)則 engine 存儲(chǔ)引擎;
其中,field表示列名,datatype表示列的類型,character set表示字符集,如果沒有指定字符集,則以所在數(shù)據(jù)庫(kù)的校驗(yàn)規(guī)則為準(zhǔn);collate校驗(yàn)規(guī)則,如果沒有指定校驗(yàn)規(guī)則,則以所在數(shù)據(jù)庫(kù)的校驗(yàn)規(guī)則為準(zhǔn)。
下面創(chuàng)建一個(gè)表實(shí)例:
創(chuàng)建表的存儲(chǔ)引擎是InnoDB。
存儲(chǔ)引擎是MyIsam。(在當(dāng)前云服務(wù)器上,要使用utf8mb4而不能utf8)
不同的存儲(chǔ)引擎,創(chuàng)建表的文件不一樣。
查看表
查看表結(jié)構(gòu)
desc 表名;
查看表的更詳細(xì)信息
加\G可以清晰看到主要字段。
修改表
修改表名?
關(guān)于表的修改,我們需要有表的增加列,刪除列,修改列,修改表名字,修改列名字等。?
alter table user1 rename to user;
案例:
- 先向表中插入兩條記錄:
insert into user values(1, '張三', '123456', '1');
insert into user values(1, '李四', '54321', '2');
- 在user中添加一個(gè)字段,用于保存圖片路徑
mysql> alter table user add image_path varchar(200) comment '這個(gè)是圖片路徑' after sex;
- 修改name,將其長(zhǎng)度修改為60,
修改的結(jié)果是,把原來(lái)name所有的屬性用新設(shè)置的屬性全都覆蓋掉了。
- 刪除password列
注意,刪除字段及其對(duì)應(yīng)的列數(shù)據(jù)全都沒了。
- 修改表名為User
其中,to可以省略。
- 修改表中某一列的名稱。
alter table User change name xingming varchar(60) COLLATE utf8mb4_general_ci DEFAULT NULL;
其中,新名稱xingming后面必須加上對(duì)應(yīng)的屬性(可以通過(guò)show create table User;查詢)。
刪除表
溫馨提示:不要輕易修改表名字以及列名字,如果一改,那上層所有都得改。