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