11.MYSQL高级(一)
1.賬戶管理
在生產(chǎn)環(huán)境下操作數(shù)據(jù)庫時,絕對不可以使用root賬戶連接,而是創(chuàng)建特定的賬戶,授予這個賬戶特定的操作權(quán)限,然后連接進(jìn)行操作,主要的操作就是數(shù)據(jù)的crud
MySQL賬戶體系:根據(jù)賬戶所具有的權(quán)限的不同,MySQL的賬戶可以分為以下幾種
服務(wù)實例級賬號:,啟動了一個mysqld,即為一個數(shù)據(jù)庫實例;如果某用戶如root,擁有服務(wù)實例級分配的權(quán)限,那么該賬號就可以刪除所有的數(shù)據(jù)庫、連同這些庫中的表
數(shù)據(jù)庫級別賬號:對特定數(shù)據(jù)庫執(zhí)行增刪改查的所有操作
數(shù)據(jù)表級別賬號:對特定表執(zhí)行增刪改查等所有操作
字段級別的權(quán)限:對某些表的特定字段進(jìn)行操作
存儲程序級別的賬號:對存儲程序進(jìn)行增刪改查的操作
賬戶的操作主要包括創(chuàng)建賬戶、刪除賬戶、修改密碼、授權(quán)權(quán)限等
注意:進(jìn)行賬戶操作時,需要使用root賬戶登錄,這個賬戶擁有最高的實例級權(quán)限
?
查看所有用戶
查看user表的結(jié)構(gòu)desc user\G;
主要字段說明:
host表示允許訪問的主機
user表示用戶名
authentication_string表示密碼,為加密后的值
?
查看所有用戶
selecthost,user,authentication_string from user;
創(chuàng)建賬戶并授予權(quán)限
需要使用實例級賬戶登錄后操作,以root為例
常用權(quán)限主要包括:create、alter、drop、insert、update、delete、select
如果分配所有權(quán)限,可以使用all privileges
?
創(chuàng)建賬戶并授權(quán)
語法如下:grant 權(quán)限列表 on 數(shù)據(jù)庫 to '用戶名'@'訪問主機' identified by '密碼';
授權(quán)
語法如下:grant 權(quán)限名稱 on 數(shù)據(jù)庫 to 賬戶1,賬戶2,... with grant option;
示例
step1:使用root登錄
mysql -uroot-p
回車后寫密碼,然后回車
step2:創(chuàng)建賬戶并授予所有權(quán)限,說明如下用戶名為py,密碼為123
操作python數(shù)據(jù)庫的所有對象python.*
訪問主機通常使用百分號%表示此賬戶可以使用任何ip的主機登錄訪問此數(shù)據(jù)庫
訪問主機可以設(shè)置成localhost或具體的ip,表示只允許本機或特定主機訪問
grant all privileges onpython.* to 'py'@'%' identified by '123';
查看用戶有哪些權(quán)限
show grants for py;
step3:退出root的登錄
quit
step4:使用py賬戶登錄
mysql -upy -p
回車后寫密碼,然后回車
?
回收權(quán)限
需要使用實例級賬戶登錄后操作,以root為例
如果不希望某用戶擁有此權(quán)限,可以將此權(quán)限從用戶上撤銷
語法如下:revoke 權(quán)限列表 on 數(shù)據(jù)庫名.* from? '用戶名'@'主機';
?
修改密碼
語法1:不需登錄mysqladmin-u py -p password '新密碼'
例:mysqladmin -u py -p password '123456'
回車后寫密碼,然后回車
?
語法2:使用root登錄,修改mysql數(shù)據(jù)庫的user表
使用password()函數(shù)進(jìn)行密碼加密
注意修改完成后需要刷新權(quán)限
update userset authentication_string=password('新密碼') where user='用戶名';
例:update user set authentication_string=password('123') where user='py';
刷新權(quán)限:flushprivileges
語法1用于賬戶自己修改密碼
語法2用于修改自己或其它賬戶的密碼,一般是dba或經(jīng)理修改員工的密碼
?
刪除賬戶
語法1:使用root登錄dropuser '用戶名'@'主機';
例:drop user 'py'@'%';
語法2:使用root登錄,刪除mysql數(shù)據(jù)庫的user表中數(shù)據(jù)
deletefrom user where user='用戶名';
例:delete from user where user='py';
--操作結(jié)束之后需要刷新權(quán)限flushprivileges
推薦使用語法1刪除用戶
如果主機的字母大寫時,使用語法1刪除失敗,采用語法2方式
?
2.函數(shù)創(chuàng)建
語法如下
delimiter$$
create function 函數(shù)名稱(參數(shù)列表) returns返回類型
begin
sql語句
end
$$
delimiter ;
- 說明:delimiter用于設(shè)置分割符,默認(rèn)為分號
- 在“sql語句”部分編寫的語句需要以分號結(jié)尾,此時回車會直接執(zhí)行,所以要創(chuàng)建存儲過程前需要指定其它符號作為分割符,此處使用//,也可以使用其它字符
?
查看python數(shù)據(jù)庫中的函數(shù)
select name,type from mysql.procwhere db='python';
?
調(diào)用語法如下:select 函數(shù)名稱(參數(shù)列表);
刪除函數(shù)語法如下:dropfunction 函數(shù)名稱;
?
臨時變量聲明臨時變量,只能在 begin ... end 體重語法如下
declare變量名 類型 default 默認(rèn)值;
例:declare x varchar(100);
設(shè)置變量值,語法如下
set 變量名=值;
例:set x='abc';
?
用戶變量/會話變量
只有在當(dāng)前連接用戶有效,其他連接用戶無法訪問
使用@標(biāo)識聲明用戶變量
使用 select 來查看用戶變量
?
?
系統(tǒng)變量
任何一個用戶都可以訪問
使用 @@來標(biāo)識系統(tǒng)變量
使用 select 來查看系統(tǒng)變量
?
函數(shù)判斷
語法如下
if 條件1 then
語句1;
elseif 條件2 then
語句2;
else
語句
end if;
?
循環(huán)
語法如下
while 條件do
語句;
end while;
退出循環(huán):leave,相當(dāng)于break
退出本次循環(huán):iterate,相當(dāng)于continue
?
3.存儲過程創(chuàng)建
語法如下
delimiter//
create procedure存儲過程名稱(參數(shù)列表)
begin
sql語句
end
//
delimiter ;
說明:delimiter用于設(shè)置分割符,默認(rèn)為分號
在“sql語句”部分編寫的語句需要以分號結(jié)尾,此時回車會直接執(zhí)行,所以要創(chuàng)建存儲過程前需要指定其它符號作為分割符,此處使用//,也可以使用其它字符
?
查看表結(jié)構(gòu)descmysql.proc\G;
查看python數(shù)據(jù)庫的所有存儲過程
select name,type,body from mysql.procwhere db='python';
?
調(diào)用語法如下:call 存儲過程(參數(shù)列表);
刪除語法如下:drop procedure 存儲過程名稱;
?
存儲過程和函數(shù)的區(qū)別
相同點
1.存儲過程和函數(shù)都是為了可重復(fù)的執(zhí)行操作數(shù)據(jù)庫的 sql 語句的集合.
2.存儲過程和函數(shù)都是一次編譯,就會被緩存起來,下次使用就直接命中緩存中已經(jīng)編譯好的sql, 不需要重復(fù)編譯
3.減少網(wǎng)絡(luò)交互,減少網(wǎng)絡(luò)訪問流量
不同點
1.標(biāo)識符不同,函數(shù)的標(biāo)識符是 function, 過程:procedure
2.函數(shù)中有返回值,且必須有返回值,而過程沒有返回值,但是可以通過設(shè)置參數(shù)類型(in,out)來實現(xiàn)多個參數(shù)或者返回值
3.函數(shù)使用 select 調(diào)用,存儲過程需要使用 call 調(diào)用
4.select 語句可以在存儲過中調(diào)用,但是除了 select ... into 之外的 select 語句都不能再函數(shù)中調(diào)用
5.通過 in out 參數(shù),過程相關(guān)函數(shù)更加靈活,可以返回多個結(jié)果
6.在實際開發(fā)中根據(jù)個人喜好選擇使用函數(shù)或者存儲過程
總結(jié)
以上是生活随笔為你收集整理的11.MYSQL高级(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 评论数据获取、词频统计、词云图
- 下一篇: python中elif和while简单介