国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
PHP教程(13)mysql數(shù)據(jù)庫備份+事物操作+觸發(fā)器+用戶管理

數(shù)據(jù)備份

數(shù)據(jù)備份將數(shù)據(jù)庫里面的數(shù)據(jù),復(fù)制到對(duì)應(yīng)的文件,保存到對(duì)應(yīng)的磁盤空間。如果在以后需要使用數(shù)據(jù)的時(shí)候,可以通過備份文件將數(shù)據(jù)還原到對(duì)應(yīng)的數(shù)據(jù)庫。

數(shù)據(jù)備份分為三種方式:文件備份,表數(shù)據(jù)備份,SQL備份

文件備份

文件備份就是將數(shù)據(jù)庫對(duì)應(yīng)的文件夾或者文件進(jìn)行備份。

InnoDBmyisam的備份方式不一樣:存儲(chǔ)引擎文件存儲(chǔ)的方式不一樣。

InnoDB備份:表結(jié)構(gòu)文件和ibdata1,如果有一些額外的數(shù)據(jù),iblogfile也需要備份

myisam備份:直接被分三個(gè)文件:結(jié)構(gòu),索引和數(shù)據(jù)

文件備份還原:直接將文件放到對(duì)應(yīng)的數(shù)據(jù)庫文件夾下。

數(shù)據(jù)表備份

數(shù)據(jù)表備份指的是只針對(duì)某一張具體的表內(nèi)的數(shù)據(jù)進(jìn)行備份。需要通過mysql提供的命令,將數(shù)據(jù)表中的數(shù)據(jù)導(dǎo)出到對(duì)應(yīng)的外部文件。

備份操作

備份語法

select */字段列表 into outfile 文件路徑 from 表名;                          

注意:只備份純數(shù)據(jù),沒有表結(jié)構(gòu)

指定結(jié)構(gòu)備份:行數(shù)據(jù)如何處理,字段如何處理

select */字段列表 into outfile 文件路徑 [fields 操作] [lines 操作] from 表名;

fields操作

terminated by:字段以什么結(jié)束,字段后面跟什么內(nèi)容,默認(rèn)的是“\t

enclosed by:字段以什么包裹,字段兩邊用什么字符來包裹,默認(rèn)是’’,什么都沒有

escaped by:字段的特殊字符如何處理,默認(rèn)的是使用’\\’

lines 操作

starting by:每行一開始用什么字符顯示,默認(rèn)是’’

terminated by:每行用什么來結(jié)束(換行),默認(rèn)的是’\r\n’

所有的文件備份,只能將數(shù)據(jù)備份到不存在的文件里面,如果文件存在,那么備份失敗。

還原操作

將文件中的數(shù)據(jù)按照指定的格式,還原到對(duì)應(yīng)的數(shù)據(jù)表

還原語法

load data infile 文件路徑  into table 表名[(字段列表)] [fields 操作] [lines 操作];

不管是字段還是行操作都是與備份時(shí)應(yīng)該一一對(duì)應(yīng)。

正確還原

備份的數(shù)據(jù)可以不需要清空數(shù)據(jù)表就進(jìn)行數(shù)據(jù)還原:前提是備份的數(shù)據(jù)可以插入到表中,而不會(huì)因?yàn)閿?shù)據(jù)重復(fù)出錯(cuò)。

SQL備份

SQL備份:系統(tǒng)對(duì)需要備份的表,系統(tǒng)自動(dòng)的組織表的創(chuàng)建語句和數(shù)據(jù)的插入語句(SQL語句),然后將對(duì)應(yīng)的SQL語句備份到外部文件。即便在表不存在的情況下,系統(tǒng)也能根據(jù)備份的SQL語句自動(dòng)創(chuàng)建表,并將備份的數(shù)據(jù)插入到表中。

備份操作

SQL備份必須通過客戶端(mysqldump.exe)來操作,而不是通過SQL命令實(shí)現(xiàn)。

既然是通過客戶端操作服務(wù)器:必須要連接認(rèn)證(-hPup

語法

mysqldump/mysqldump.exe –hPup 數(shù)據(jù)庫 數(shù)據(jù)表1 數(shù)據(jù)表2 … > 文件路徑

SQL備份的最大顆粒度是到數(shù)據(jù)庫,不能對(duì)整個(gè)數(shù)據(jù)庫系統(tǒng)進(jìn)行備份。

還原操作

還原就是將對(duì)應(yīng)的SQL語句重新執(zhí)行。

SQL備份還原有兩種方式:mysql.exe進(jìn)行外部還原和進(jìn)入到SQL環(huán)境下使用命令還原。

mysql.exe還原

語法

mysql/mysql.exe –hPhp 數(shù)據(jù)庫名字  < 文件路徑

SQL命令還原

要使用命令還原,必須先進(jìn)入數(shù)據(jù)庫環(huán)境。

語法

source 文件路徑;

三種備份中,SQL備份用的最多。

如果數(shù)據(jù)量很大,那么備份的效率會(huì)很低,所以備份時(shí)間顯得非常重要。

SQL備份適用于全表備份。如果是想備份最新的數(shù)據(jù)SQL備份做不到。

增量備份

增量備份就是指對(duì)新的東西進(jìn)行備份,將上次備份點(diǎn)之后的所有數(shù)據(jù)操作都備份,備份的SQL的日志。

事務(wù)安全

什么是事務(wù)安全?

事務(wù):事務(wù)指的是一連串的數(shù)據(jù)寫操作,操作之間是互相影響的

事務(wù)安全:保證一連串的操作都是成功的

銀行賬戶:小王和小明

小王欠小明100,還錢

         小王賬號(hào)里,扣去100

         小明賬戶里,增加100

事務(wù)操作流程

從某個(gè)指定點(diǎn)開始,將所有的操作都捆綁到一起,最后通過結(jié)果判斷,要么都成功,要么都失敗。

事務(wù)流程

1.      開啟事務(wù)(事務(wù)起始點(diǎn))

begin/start transaction;

從這個(gè)點(diǎn)開始,后面所有的操作,都是一起的,不是分開的,要么都成功,要么都失敗

2.      事務(wù)操作,所有捆綁的事件

3.      事務(wù)結(jié)束

a)        成功:commit;提交

b)        失?。?/span>rollback;回滾(撤銷)

事務(wù)原理

事務(wù)操作示例

1.      開啟事務(wù)

2.      事務(wù)操作

操作1

操作2

3.      結(jié)束事務(wù),先判斷事務(wù),選擇如何結(jié)束

都成功:commit

不成功:rollback

事務(wù)操作特點(diǎn)

如果事務(wù)操作過程中斷(意外),系統(tǒng)會(huì)自動(dòng)判定事務(wù)處理失敗

事務(wù)回滾點(diǎn)

事務(wù)在操作的過程中,可能有很多個(gè)節(jié)點(diǎn),后續(xù)的節(jié)點(diǎn)必須依賴前面節(jié)點(diǎn)的成功而操作,但是有可能操作失敗,需要先回到上一個(gè)成功的節(jié)點(diǎn)重新開始下一次操作,就需要在某個(gè)節(jié)點(diǎn)的時(shí)候設(shè)置回滾點(diǎn),允許后面回到該點(diǎn)上。

語法
savepoint 回滾點(diǎn)名字;

回到回滾點(diǎn)

rollback to 回滾點(diǎn)名字

自動(dòng)事務(wù)

系統(tǒng)默認(rèn)的就是自動(dòng)事務(wù)提交,本來每一個(gè)操作都需要用戶進(jìn)行確認(rèn)操作。

查看自動(dòng)提交

show variables like 'autocommit%’;

關(guān)閉自動(dòng)提交:

set autocommit = Off;

效果

注意:一般情況下事務(wù)都是 自動(dòng)提交,除非特殊情況下(轉(zhuǎn)賬)才會(huì)使用事務(wù),使用事務(wù)的時(shí)候手動(dòng)使用。

事務(wù)特點(diǎn)

事務(wù)有4個(gè)特點(diǎn):原子性,一致性,隔離性和永久性

事務(wù)特點(diǎn)ACID

原子性:Atomicity,事務(wù)是整體,從開始到結(jié)束,之間所有的操作都是一個(gè)整體,要么全部成功,要么全部失敗。

一致性:consistency,事務(wù)前后數(shù)據(jù)完整性一致,數(shù)據(jù)在操作過程中沒有影響到數(shù)據(jù)的變化,直到事務(wù)被提交,才改變數(shù)據(jù)。

持久性:Durability事務(wù)一旦提交,數(shù)據(jù)改變永久

隔離性:isolation,多用戶并發(fā)互不干擾,相互隔離

事務(wù)條件

存儲(chǔ)引擎是InnoDB

變量

mysql中,變量分為兩種:系統(tǒng)變量和自定義變量

系統(tǒng)變量

系統(tǒng)已經(jīng)定義好的變量。

show variables;

查看系統(tǒng)變量

show variables; -- 查看所有

show variables like 'pattern’; -- 查看部分

select @@變量名; -- 查看具體變量

修改變量

語法1:修改變量(會(huì)話級(jí)別:當(dāng)前連接修改有效)

set 變量名 = ;

語法2:修改全局變量(變量本身是全局變量,針對(duì)所有用戶所有連接都有效)

set GLOBAL 變量名 = ;

set @@global.變量名 = ;

語法3:修改全局變量

找到mysql的配置文件,在配置項(xiàng)里面修改。(不建議)

自定義變量

定義

語法1:定義變量并賦值

set @變量名 = ;

語法2:直接從記錄中將數(shù)據(jù)存放到變量

select 字段列表 from 表名 where條件into 變量列表(@變量名);

select @變量 := 字段,… from 表名 where條件;

SQL中,=有其特殊的函數(shù):比較運(yùn)算符,也可以用于變量賦值,SQL為了區(qū)分賦值符號(hào)和比較符號(hào),特意新增了一個(gè)賦值符號(hào):   :=

使用自定義變量

與系統(tǒng)變量一致

select @變量名;

修改變量

所有的變量,要進(jìn)行修改必須使用關(guān)鍵字set

set @變量名 = ;

刪除變量

系統(tǒng)沒有提供刪除變量的方式,要?jiǎng)h除變量,其實(shí)就是將變量置空

set @變量 = null;

用戶自定義的變量全部都是會(huì)話級(jí)別的,當(dāng)前連接有效,斷開就無效了。

用戶自定義的變量是屬于會(huì)話級(jí)別,但是是全系統(tǒng)有效(跨庫)

變量作用域

變量作用的范圍,在SQL中,變量的作用域分為兩種:全局作用域和局部作用域,與js一樣,全局變量可以在任何地方使用,而局部變量只能在函數(shù)內(nèi)部使用。

凡是使用@符號(hào)定義的變量,都是全局變量(函數(shù)內(nèi)部也可以定義全局變量)

局部變量語法:沒有@符號(hào),也不用set聲明

declare 變量名 數(shù)據(jù)類型default 默認(rèn)值;

需求:

有兩張表:訂單表和商品表

每增加一張訂單,對(duì)應(yīng)的商品庫存數(shù)量要減少。

觸發(fā)器

觸發(fā)器:一個(gè)代碼的容器,將一堆要執(zhí)行的代碼捆綁到一起,在某一件事情發(fā)生的時(shí)候,自動(dòng)的觸發(fā)這段代碼。

觸發(fā)器語法

創(chuàng)建觸發(fā)器的語法

臨時(shí)語句結(jié)束符:delimiter

delimiter $$ -- 從當(dāng)前開始,后面的所有代碼,直到碰到$$才認(rèn)為一條語句結(jié)束

create trigger 觸發(fā)器名字 觸發(fā)時(shí)間 事件類型 on 表名 for each row

begin

         捆綁的代碼

         代碼是以行為單位,每行都必須有語句結(jié)束符:”;”

end

$$

delimiter   ; -- 將語句結(jié)束符改回來

觸發(fā)時(shí)間:分為兩種,數(shù)據(jù)操作前和操作后

         before:數(shù)據(jù)真正寫入到表之前

         after:數(shù)據(jù)已經(jīng)寫入到表之后

事件類型:所有的觸發(fā)器都是針對(duì)數(shù)據(jù)寫操作(增刪改)

         insert:新增

         update:修改

         delete:刪除

觸發(fā)時(shí)間和事件類型共同組成了觸發(fā)器的類型:觸發(fā)器類型一共6種。一張表最多可以有6個(gè)觸發(fā)器。同一種觸發(fā)器一張表只能有一個(gè)。

查看觸發(fā)器

查看所有的觸發(fā)器

show triggers\G

觸發(fā)器使用

觸發(fā)器的使用不是用戶手動(dòng)調(diào)用,而是在操作數(shù)據(jù)的時(shí)候如果滿足某一個(gè)特定的條件,就會(huì)自動(dòng)觸發(fā)。

刪除觸發(fā)器

語法

drop trigger 觸發(fā)器名字;

觸發(fā)器獲取外部數(shù)據(jù)

在觸發(fā)器的內(nèi)部,內(nèi)置了兩個(gè)對(duì)象:oldnew,兩個(gè)對(duì)象代表了觸發(fā)前和觸發(fā)后的數(shù)據(jù)記錄??梢允褂眠@兩個(gè)對(duì)象來訪問對(duì)應(yīng)的數(shù)據(jù)。

語法:

         old.字段名/new.字段名

只有更新語句可以使用oldnew,但是刪除的觸發(fā)器只有old,新增的觸發(fā)器只有new

效果

觸發(fā)器應(yīng)用

觸發(fā)器主要用戶數(shù)據(jù)的連表操作(對(duì)多條記錄進(jìn)行寫的連帶操作)

觸發(fā)器雖好,但是會(huì)導(dǎo)致數(shù)據(jù)庫數(shù)據(jù)維護(hù)變得不可控,那么從php的角度出發(fā),程序很少使用觸發(fā)器。

作業(yè)

1.      一張表最多有幾個(gè)觸發(fā)器?6個(gè)

2.      當(dāng)一張表6個(gè)觸發(fā)器都存在的時(shí)候,以下情況會(huì)觸發(fā)哪些觸發(fā)器

a)        insert on duplicate key,主鍵重復(fù)

b)        replace into,主鍵重復(fù)

索引

1.      什么是索引?

索引就是類似書的目錄,提高檢索數(shù)據(jù)的效率。

索引是系統(tǒng)按照某個(gè)具體的算法(哈希,散列,二叉樹),將數(shù)據(jù)從全部數(shù)據(jù)里進(jìn)行提取,維護(hù)成一個(gè)索引文件,然后系統(tǒng)在進(jìn)行數(shù)據(jù)查詢的時(shí)候,發(fā)現(xiàn)如果查詢條件剛好滿足索引條件,就可以從索引文件中快速的定位的數(shù)據(jù)所在位置。

mysql中有哪些索引?

主鍵索引(primary key效率最高的索引)

唯一索引(unique key):不為空的情況下效率最高

普通索引(index)對(duì)數(shù)據(jù)沒有要求,文件很大,效率比較低

全文索引(fulltext),對(duì)整個(gè)文章內(nèi)部進(jìn)行關(guān)鍵字索引(mysql5.5以后InnoDB支持全文索引)

         英文的全文索引很簡(jiǎn)單:英文單詞默認(rèn)是用空格分離的

         中文的全文索引很難:中文的詞組成很麻煩,需要利用分詞工具(sphinx

用戶管理

root是超級(jí)管理員用戶,擁有最大權(quán)限,可以進(jìn)行任何操作。

1.      創(chuàng)建用戶

create user 用戶信息 identified by 密碼; -- 創(chuàng)建用戶使用密碼

         用戶信息:用戶名@主機(jī)名,主機(jī)名是允許訪問的主機(jī)地址,local@192.168.114.%,允許局域網(wǎng)內(nèi)部用戶訪問

         密碼:系統(tǒng)里面默認(rèn)使用sha1加密方式加密,但是該處使用明文密碼,系統(tǒng)自動(dòng)加密

所有的用戶都在mysql數(shù)據(jù)庫下的user表中存在

2.      授權(quán):給用戶指定數(shù)據(jù)庫的操作權(quán)限

grant 權(quán)限列表 on 庫名.表名 to 用戶;

         權(quán)限列表:select,update,delete….

         用戶:用戶名@主機(jī)地址

效果

權(quán)限列表

一次性賦予全部權(quán)限

grant all privileges on .* to user;

3.      回收權(quán)限

revoke 權(quán)限列表 on . from user;

回收權(quán)限之后需要用戶下次登錄的時(shí)候才會(huì)生效。

4.      刪除用戶

drop user 用戶;

如果有時(shí)候會(huì)因?yàn)闄?quán)限的阻塞,緩存沒有刷新,需要刷新權(quán)限緩存。

flush privileges;

root密碼忘了?怎么辦?

重裝數(shù)據(jù)庫

root密碼找回

1.      關(guān)閉服務(wù)器

2.      無權(quán)限重啟:重新啟動(dòng)服務(wù)使用以下命令

mysqld.exe –skip-grant-tables

3.      無用戶直接進(jìn)入數(shù)據(jù)庫

mysql直接訪問

4.      進(jìn)入到mysql數(shù)據(jù)庫內(nèi)的user表中修改root用戶的密碼

修改密碼的時(shí)候,必須使用password函數(shù)進(jìn)行加密

update user set password = password('root’) where user=’root’ and host ='localhost’;

5.      重啟服務(wù)器

6.      使用新的密碼進(jìn)行登錄

注意:在進(jìn)行無權(quán)限登錄的時(shí)候,所有人都可以無條件進(jìn)入數(shù)據(jù)庫,而且擁有全部權(quán)限。所以在進(jìn)行root密碼找回的時(shí)候,必須特別謹(jǐn)慎。(可以利用操作系統(tǒng)的安全性),應(yīng)該在最沒有用戶訪問的情況下,進(jìn)行修改,將損失減小到最低。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
如何避免 MySQL 修改表結(jié)構(gòu)時(shí)導(dǎo)致表無法使用的問題
第四天
MySQL運(yùn)行原理與基礎(chǔ)架構(gòu)
數(shù)據(jù)庫系統(tǒng)原理(第6章:數(shù)據(jù)庫安全與保護(hù))
mysql數(shù)據(jù)庫面試總結(jié)
數(shù)據(jù)庫原理與應(yīng)用(MySQL 8.0)教與學(xué)(思政教案 素材)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服