【博學(xué)谷學(xué)習(xí)記錄】超強(qiáng)總結(jié)恨狈,用心分享|測試工程師必備技能總結(jié):Linux 和數(shù)據(jù)庫 day06 隨堂筆記

Linux 和數(shù)據(jù)庫 day06 隨堂筆記

數(shù)據(jù)庫設(shè)計(jì)

ER模型

定義: E 代表實(shí)體(數(shù)據(jù)表), R 代表聯(lián)系(數(shù)據(jù)表之間對應(yīng)的字段)


關(guān)系常見分類

一對一

一對多

多對多

外鍵

如果一個(gè)實(shí)體的某個(gè)字段指向另一個(gè)實(shí)體的主鍵滔驾,就稱為外鍵。

被指向的實(shí)體,稱之為主實(shí)體(主表)厦滤,也叫父實(shí)體(父表)次兆。

負(fù)責(zé)指向的實(shí)體稿茉,稱之為從實(shí)體(從表),也叫子實(shí)體(子表)

作用: 對關(guān)系字段進(jìn)行約束芥炭,當(dāng)為從表中的關(guān)系字段填寫值時(shí)漓库,會(huì)到關(guān)聯(lián)的主表中查詢此值是否存在,如果存在則填寫成功园蝠,如果不存在則填寫失敗并報(bào)錯(cuò)

-- 主表

drop table if exists class;

create table class(

id int unsigned primary key auto_increment,

name varchar(10)

);

-- 從表

drop table if exists stu;

create table stu(

name varchar(10),

class_id int unsigned,

-- stu 表的 class_id 指向 class 表的 id, class_id 是

stu 表的外鍵

-- foreign key(自己的字段名) references 目標(biāo)表名(目標(biāo)表的

主鍵)

foreign key(class_id) references class(id)

);

擴(kuò)展1 : 對應(yīng)存在表添加外鍵

-- 擴(kuò)展1 : 對于已經(jīng)存在的表添加外鍵

-- alter table 從表名 add foreign key (從表字段)

references 主表名(主表主鍵);

alter table stu add foreign key (class_id)

references class(id);

擴(kuò)展2 : 查看和刪除外鍵

-- 擴(kuò)展2 : 查看外鍵和刪除外鍵

-- 查看外鍵

-- show create table 表名

show create table stu;

-- CREATE TABLE `stu` (

-- ? `name` varchar(10) DEFAULT NULL,

-- ? `class_id` int(10) unsigned DEFAULT NULL,

-- ? KEY `class_id` (`class_id`),

-- ? CONSTRAINT `stu_ibfk_1` FOREIGN KEY

(`class_id`) REFERENCES `class` (`id`)

-- ) ENGINE=InnoDB DEFAULT CHARSET=utf8

-- 刪除外鍵

-- alter table stu drop foreign key 外鍵名稱

alter table stu drop foreign key stu_ibfk_1;

利用 Navicat 查看外鍵




索引

定義: 類似于圖書中的目錄, 能夠起到快速檢索數(shù)據(jù)的作用

作用: 對于大量數(shù)據(jù)進(jìn)行查詢效率優(yōu)化時(shí), 可以采取添加索引的策略

-- 索引應(yīng)用檢驗(yàn)案例

-- 開啟時(shí)間監(jiān)測

set profiling=1;

-- 查詢示例數(shù)據(jù) num = 10000 的值

select * from test_index where num = 10000;

-- 查看運(yùn)行時(shí)間

show profiles;

-- 添加索引

-- create index 索引名稱 on 表名(目標(biāo)字段)

create index num_index on test_index(num);

-- 再次執(zhí)行查詢數(shù)據(jù)操作

select * from test_index where num = 10000;

-- 再次查看運(yùn)行時(shí)間

show profiles;



擴(kuò)展1: 查看索引

-- 擴(kuò)展1 : 查看索引

-- show index from 表名

show index from test_index;



擴(kuò)展2 : 創(chuàng)表時(shí)添加

-- 擴(kuò)展2 : 創(chuàng)表時(shí)添加

create table create_index(

id int primary key,

name varchar(10) unique, ?-- unique : 設(shè)置端唯一值

age int,

key(age) -- 指定添加索引方法

);

-- 查看索引

show index from create_index;

擴(kuò)展3 : 刪除索引

-- 擴(kuò)展3 : 刪除索引

-- drop index 索引名稱 on 表名;

drop index age on create_index;


結(jié)論 : 索引在使用的時(shí)候能提高查詢效率, 但是在進(jìn)行插入/更新/刪

除時(shí), 索引會(huì)造成障礙, 因此需要在執(zhí)行這些操作前, 先移除索引, 操作結(jié)束后, 重新添加索引即可

命令行中操作 MySQ

前提: 要進(jìn)行操作系統(tǒng)環(huán)境中, 存在 MySQL 環(huán)境

登錄 MySQL

mysql -u數(shù)據(jù)庫用戶名 -p數(shù)據(jù)庫密碼

例如:

mysql -uroot -p123456



數(shù)據(jù)庫操作

查看所有數(shù)據(jù)庫 : show databases;

使用數(shù)據(jù)庫 : use 數(shù)據(jù)庫名稱;

查看當(dāng)前使用的數(shù)據(jù)庫 : select database();

創(chuàng)建數(shù)據(jù)庫 : create database 數(shù)據(jù)庫名稱 charset=utf8;

刪除數(shù)據(jù)庫 : drop database 數(shù)據(jù)庫名稱;

查看所有數(shù)據(jù)庫


使用數(shù)據(jù)庫



查看當(dāng)前使用的數(shù)據(jù)庫名稱



創(chuàng)建數(shù)據(jù)庫



刪除數(shù)據(jù)庫


數(shù)據(jù)表操作

查看數(shù)據(jù)庫中的所有數(shù)據(jù)表 : show tables;

查看表結(jié)構(gòu) : desc 表名;

查看創(chuàng)表語句 : show create table 表名;

注意 : 進(jìn)入到數(shù)據(jù)庫之后, 所有的 SQL 查詢語句, 均可以正常使用!

查看所有數(shù)據(jù)表



查看表字段信息


查看創(chuàng)表語句



命令行和圖形化頁面操作步驟對比

連接數(shù)據(jù)庫

查看數(shù)據(jù)庫

選擇數(shù)據(jù)庫

新建查詢

查看所有表

查看表結(jié)構(gòu)

編寫 SQL 查詢語句


結(jié)論 : 命令行使用是為了在沒有圖形化工具的情況下, 應(yīng)急使用操作數(shù)據(jù)庫的手段

存儲(chǔ)過程

定義 : 可以叫存儲(chǔ)程序, 通過一定的代碼邏輯, 將一句或多久SQL

語句進(jìn)行封裝, 通過調(diào)用存儲(chǔ)過程, 快速實(shí)現(xiàn)其內(nèi)部封裝SQL語句操作

用途 : 可以用來向數(shù)據(jù)庫中, 快速插入大量測試數(shù)據(jù)時(shí)使用

基本語法格式

delimiter // -- 取消默認(rèn)結(jié)尾標(biāo)識(shí)符 ; 的作用

create procedure 存儲(chǔ)過程名(參數(shù)列表)

begin -- 代碼邏輯的開始

SQL語句

end //

delimiter ; -- 還原默認(rèn)結(jié)尾標(biāo)識(shí)符 ; 的作用

調(diào)用方法

-- 在查詢窗口中

call 存儲(chǔ)過程名();

語法實(shí)現(xiàn)

-- 修改句尾標(biāo)識(shí)符為'//'

delimiter //

-- 如果存在 test 存儲(chǔ)過程則刪除

drop procedure if exists test;

-- 創(chuàng)建無參數(shù)的存儲(chǔ)過程 test

create procedure test() ? ? ? ? ? ? ? ?

begin

-- 聲明變量 i

declare i int;

-- 變量初始化賦值為 0

? ?set i = 0;

-- 設(shè)置循環(huán)條件: 當(dāng) i 大于 10 時(shí)跳出 while 循環(huán)

? while i < 10000 do

-- 往 datatest 表插入數(shù)據(jù)

? ? ? ?insert into datatest values (null, i);

-- 循環(huán)一次, i 加一

? ? ? ?set i = i + 1;

-- 結(jié)束 while 循環(huán)

? end while;

-- 查看 datatest 表數(shù)據(jù)

? ?select * from datatest;

-- 結(jié)束存儲(chǔ)過程定義語句

end//

-- 恢復(fù)句尾標(biāo)識(shí)符為';'

delimiter ;

事務(wù)

定義 : 所謂事務(wù)可以稱之一個(gè)操作序列, 一系列操作要么都執(zhí)行,要么就不執(zhí)行. 對于數(shù)據(jù)庫來講, 對于數(shù)據(jù)的操作行為, 要么都實(shí)現(xiàn), 要么都不實(shí)現(xiàn), 最終需要確保寫入到數(shù)據(jù)庫的數(shù)據(jù)的一致性

(原子性)!

事務(wù)實(shí)現(xiàn)案例

前提: 數(shù)據(jù)表的數(shù)據(jù)引擎類型必須是 InnoDB (可以通過查看創(chuàng)表語句來確認(rèn))


-- 注意 : 出發(fā)事務(wù)操作一般是由修改數(shù)據(jù)操作產(chǎn)生(插入數(shù)據(jù)insert/更新數(shù)據(jù)update/刪除數(shù)據(jù)delete)

-- 開啟事務(wù)

begin;

-- 提交事務(wù)

commit;

-- 回滾事務(wù)

rollback;

視圖

場景 : 能夠封裝 SQL 語句, 以類似于表的形式存在

-- 創(chuàng)建視圖語法

-- 注意: 視圖命名一般以 v_視圖名稱 形式實(shí)現(xiàn)

-- create view 視圖名稱 as select 語句;

create view v_goods as select goodsName 商品名稱,

price 價(jià)格, num 數(shù)量, company 公司 from goods;

-- 視圖的用法: 當(dāng)成表查詢使用即可

select * from v_goods;

-- 復(fù)雜 SQL 語句視圖封裝

select go.goodsName, ca.cateName from goods go inner

join category ca on go.typeId = ca.typeId;

-- 封裝連接查詢語句時(shí), 如果存在重名字段名稱, 需要通過別名進(jìn)行

修改

create view v_goods_cate as select go.*, ca.id 序號,

ca.typeId 類型, ca.cateName from goods go inner join

category ca on go.typeId = ca.typeId;

select * from v_goods_cate;

-- 刪除視圖語句

-- drop view 視圖名稱

drop view v_goods_cate;

注意 : 視圖可以起到隱藏真實(shí)數(shù)據(jù)表內(nèi)容的作用

視圖名稱以 v 開頭的原因



修改 MySQL 數(shù)據(jù)庫密碼

場景 : 遺忘數(shù)據(jù)庫密碼時(shí)使用

1. 修改數(shù)據(jù)庫配置文件, 使之登錄不需要密碼

此操作需要具備服務(wù)器 root 賬戶權(quán)限

查找配置文件并修改

切換 root 用戶

su -

定位配置文件位置

locate my.cnf

使用 vi 工具打開配置文件

vi /etc/my.cnf

在文件內(nèi)容 [mysqld] 下方添加此內(nèi)容, 保存后退出

skip-grant-tables


查看和獲取 MySQL 配置文件


添加內(nèi)容 跳過密碼登錄


保存文件修改內(nèi)容退出


確認(rèn)配置文件內(nèi)容已經(jīng)修改



重新啟動(dòng) MySQL 服務(wù)

systemctl restart mysqld

重啟完成可以通過查看狀態(tài)命令進(jìn)行驗(yàn)證

systemctl status mysqld

重啟和查看 mysqld 服務(wù)


重新登錄 MySQL 查看是否需要密碼進(jìn)行登錄

確認(rèn)不需要密碼可以登錄 MySQL



2. 登錄數(shù)據(jù)庫, 修改數(shù)據(jù)庫賬戶密碼

注意 : 本步驟為 SQL 語句, 需要在 mysql > 狀態(tài)下執(zhí)行

use mysql; -- 選擇 mysql 數(shù)據(jù)庫

-- 更新密碼

-- 注意 : authentication_string 字段名需要根據(jù) MySQL 版

本就行對應(yīng)修改

-- update user set

authentication_string=password('新密碼') where user =

'用戶名';

update user set

authentication_string=password('123') where user =

'root';

-- 刷新權(quán)限

flush privileges;

3. 還原配置文件設(shè)置, 使之登錄需要密碼

還原配置文件設(shè)置與添加設(shè)置步驟基本相同

查找配置文件并修改

切換 root 用戶

su -

定位配置文件位置

locate my.cnf

使用 vi 工具打開配置文件

vi /etc/my.cnf

使用 # 注釋 [mysqld] 下方內(nèi)容, 保存后退出

# skip-grant-tables



重新啟動(dòng) MySQL 服務(wù)

systemctl restart mysqld

重啟完成可以通過查看狀態(tài)命令進(jìn)行驗(yàn)證

systemctl status mysqld

重新使用修改后的密碼登錄 MySQL 即可

MySQL 日志的獲取

注意 : MySQL 自帶日志功能, 但是開啟日志功能, 極其消耗數(shù)據(jù)庫

性能, 因此默認(rèn)情況下是不開啟的

-- 查看日志功能是否開啟

show variables like 'general%';

-- 開啟操作

set global general_log = 1;

-- 關(guān)閉操作

set global general_log = 0;

-- 注意: 日志功能使用完成, 需要記得馬上關(guān)閉, 避免影響數(shù)據(jù)庫性

能!!!!!!

開啟日志功能



關(guān)閉日志功能

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末渺蒿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子彪薛,更是在濱河造成了極大的恐慌茂装,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件善延,死亡現(xiàn)場離奇詭異少态,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)易遣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進(jìn)店門彼妻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人训挡,你說我怎么就攤上這事澳骤∑缜浚” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵为肮,是天一觀的道長摊册。 經(jīng)常有香客問我,道長颊艳,這世上最難降的妖魔是什么茅特? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮棋枕,結(jié)果婚禮上白修,老公的妹妹穿的比我還像新娘。我一直安慰自己重斑,他們只是感情好兵睛,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窥浪,像睡著了一般祖很。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漾脂,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天假颇,我揣著相機(jī)與錄音,去河邊找鬼骨稿。 笑死笨鸡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坦冠。 我是一名探鬼主播形耗,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼辙浑!你這毒婦竟也來了趟脂?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤例衍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后已卸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佛玄,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年累澡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梦抢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡愧哟,死狀恐怖奥吩,靈堂內(nèi)的尸體忽然破棺而出哼蛆,到底是詐尸還是另有隱情,我是刑警寧澤霞赫,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布腮介,位于F島的核電站,受9級特大地震影響端衰,放射性物質(zhì)發(fā)生泄漏叠洗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一旅东、第九天 我趴在偏房一處隱蔽的房頂上張望灭抑。 院中可真熱鬧,春花似錦抵代、人聲如沸腾节。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽案腺。三九已至,卻和暖如春参淫,著一層夾襖步出監(jiān)牢的瞬間救湖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工涎才, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鞋既,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓耍铜,卻偏偏與公主長得像邑闺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子棕兼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容