日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql 视图用户_MySQL视图,存储过程,用户管理

發(fā)布時(shí)間:2023/12/15 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 视图用户_MySQL视图,存储过程,用户管理 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1. 視圖

一張?zhí)摂M表,就是將一個(gè)經(jīng)常被使用的查詢作為一個(gè)虛擬表,開發(fā)者查詢的時(shí)候不需要再次書寫SQL,而是直接調(diào)用對(duì)應(yīng)的視圖就可,調(diào)用視圖以后MySQL會(huì)執(zhí)行這個(gè)查詢SQL。

# 創(chuàng)建視圖

create view vi_select as select * from emps ;

# 創(chuàng)建或者代替已有視圖

create or replace view vi_select as select * from emps inner join dept on dept.id=emps.id

#修改視圖

alter view 視圖名 as select 語(yǔ)句

#顯示視圖的創(chuàng)建情況

show create view 視圖名

#查看視圖

show tables like 'vi_%' ;#和查詢表的相同,所以在創(chuàng)建視圖的時(shí)候最好有一個(gè)前綴,通過(guò)模糊查詢查詢結(jié)果

#刪除視圖

drop view 視圖名;

#重命名

rename table 視圖名 to 新視圖名;

復(fù)制代碼

1.1 對(duì)視圖不能進(jìn)行DML操作的情況

select子句中包含distinct

select子句中包含組函數(shù)

select語(yǔ)句中包含group by

select語(yǔ)句中包含order by

select語(yǔ)句中包含union或者union all等集合運(yùn)算符

where子句中包含子查詢

from中包含多的個(gè)表

視圖列中包含計(jì)算列

基表中存在非空約束,則不能進(jìn)行insert

2. 函數(shù)

和其他語(yǔ)言的函數(shù)相同,存在一個(gè)返回值

語(yǔ)法:

# 創(chuàng)建函數(shù)

create function 函數(shù)名(參數(shù)列表) returns 數(shù)據(jù)類型

begin

sql ;

return ;

end ;

#調(diào)用函數(shù)

select 函數(shù)名

#查看函數(shù)的創(chuàng)建語(yǔ)句

show create function 函數(shù)名

#查看所有的函數(shù)

show function status like '' ;

#刪除函數(shù)

drop function 函數(shù)名

復(fù)制代碼

3. 存儲(chǔ)過(guò)程

一組可編程的函數(shù),為了完成一段特定功能的SQL語(yǔ)句集,經(jīng)編譯創(chuàng)建并保存在數(shù)據(jù)庫(kù)中,用戶可以通過(guò)存儲(chǔ)過(guò)程的名字來(lái)調(diào)用。

通常會(huì)配合DELIMITER來(lái)使用。DELIMITER的作用是改變SQL語(yǔ)句的結(jié)束符號(hào)。默認(rèn)為;

#創(chuàng)建存儲(chǔ)過(guò)程,傳入?yún)?shù),IN代表輸入?yún)?shù),OUt代表輸出參數(shù)。

DELIMITER $

create procedure 名字(IN a int , IN b int,out sum int)

begin

#聲明一個(gè)變量C

declare c int ;

if a is null then set a = 0 ;

end if

if b is null then set b = 0 ;

end if ;

set sum = a+b ;

END

$

DELIMITER ;

復(fù)制代碼

4. 觸發(fā)器

表示某一個(gè)表發(fā)生一個(gè)事件(寫操作),然后自動(dòng)的執(zhí)行預(yù)先編譯好的SQL語(yǔ)句,執(zhí)行相關(guān)的操作。觸發(fā)器事件跟觸發(fā)器中的SQL語(yǔ)句的操作是原子性的。

可以用來(lái)對(duì)數(shù)據(jù)預(yù)處理

create trigger 觸發(fā)器名稱

{after|before} #觸發(fā)時(shí)間

{insert|update|delete}#觸發(fā)事件

for each row #固定寫法,無(wú)論哪一行數(shù)據(jù)發(fā)生變化均會(huì)觸發(fā)該觸發(fā)器

begin

SQL

end ;

#查看觸發(fā)器

show triggers from databaseName;

#刪除觸發(fā)器

drop trigger if exists

復(fù)制代碼

插入數(shù)據(jù)

#生成一個(gè)隨機(jī)的字符串,n代表位數(shù)

create function rand_string(n int) returns varchar(255)

begin

declare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

declare return_str varchar(255) default '';

declare i int default 0 ;

while i< n do

set return_str=concat(return_str,substring(chars_str,floor(1+rand()*52),1));

set i = i +1 ;

end while ;

return return_str ;

end?

#生成一個(gè)隨機(jī)的數(shù)字

create function rand_num() returns int(5)

begin

declare i int default 0 ;

set i = floor(100+rand()*10);

return i ;

end?

#創(chuàng)建插入數(shù)據(jù)的存儲(chǔ)過(guò)程

crate procedure insert_emp(IN start int(10),IN max_num int(10))

begin

declare i int default 0 ;

set autocommit = 0 ;

repeat

set i = i +1 ;

insert into emp(name,age) values(rand_string(6),(start+i));

until i = max_num

end repeat;

commit;

end?

call insert_emp(100,5000000);

復(fù)制代碼

5.用戶管理

#創(chuàng)建用戶

create user 用戶名 identified by 密碼

# 查看MySQL中所有的用戶

select host,user from mysql.user;

# 修改當(dāng)前用戶的密碼

set password = password(密碼)

# 修改其他用戶的密碼

update mysql.user set password=password(密碼) where user="用戶名"

# 修改用戶名

update mysql.user set user = user where user = "用戶名"

# 刪除用戶

drop user 用戶名

復(fù)制代碼

user表中的字段。可以直接通過(guò)修改這個(gè)表中的字段來(lái)為用戶賦予權(quán)限

Select_priv。確定用戶是否可以通過(guò)SELECT命令選擇數(shù)據(jù)。

Insert_priv。確定用戶是否可以通過(guò)INSERT命令插入數(shù)據(jù)。

Update_priv。確定用戶是否可以通過(guò)UPDATE命令修改現(xiàn)有數(shù)據(jù)。

Delete_priv。確定用戶是否可以通過(guò)DELETE命令刪除現(xiàn)有數(shù)據(jù)。

Create_priv。確定用戶是否可以創(chuàng)建新的數(shù)據(jù)庫(kù)和表。

Drop_priv。確定用戶是否可以刪除現(xiàn)有數(shù)據(jù)庫(kù)和表。

Reload_priv。確定用戶是否可以執(zhí)行刷新和重新加載MySQL所用各種內(nèi)部緩存的特定命令,包括日志、權(quán)限、主機(jī)、查詢和表。

Shutdown_priv。確定用戶是否可以關(guān)閉MySQL服務(wù)器。在將此權(quán)限提供給root賬戶之外的任何用戶時(shí),都應(yīng)當(dāng)非常謹(jǐn)慎。

Process_priv。確定用戶是否可以通過(guò)SHOW PROCESSLIST命令查看其他用戶的進(jìn)程。

File_priv。確定用戶是否可以執(zhí)行SELECT INTO OUTFILE和LOAD DATA INFILE命令。

Grant_priv。確定用戶是否可以將已經(jīng)授予給該用戶自己的權(quán)限再授予其他用戶。例如,如果用戶可以插入、選擇和刪除foo數(shù)據(jù)庫(kù)中的信息,并且授予了GRANT權(quán)限,則該用戶就可以將其任何或全部權(quán)限授予系統(tǒng)中的任何其他用戶。

References_priv。目前只是某些未來(lái)功能的占位符;現(xiàn)在沒(méi)有作用。

Index_priv。確定用戶是否可以創(chuàng)建和刪除表索引。

Alter_priv。確定用戶是否可以重命名和修改表結(jié)構(gòu)。

Show_db_priv。確定用戶是否可以查看服務(wù)器上所有數(shù)據(jù)庫(kù)的名字,包括用戶擁有足夠訪問(wèn)權(quán)限的數(shù)據(jù)庫(kù)。可以考慮對(duì)所有用戶禁用這個(gè)權(quán)限,除非有特別不可抗拒的原因。

Super_priv。確定用戶是否可以執(zhí)行某些強(qiáng)大的管理功能,例如通過(guò)KILL命令刪除用戶進(jìn)程,使用SET

GLOBAL修改全局MySQL變量,執(zhí)行關(guān)于復(fù)制和日志的各種命令。

Create_tmp_table_priv。確定用戶是否可以創(chuàng)建臨時(shí)表。

Lock_tables_priv。確定用戶是否可以使用LOCK TABLES命令阻止對(duì)表的訪問(wèn)/修改。

Execute_priv。確定用戶是否可以執(zhí)行存儲(chǔ)過(guò)程。此權(quán)限只在MySQL 5.0及更高版本中有意義。

Repl_slave_priv。確定用戶是否可以讀取用于維護(hù)復(fù)制數(shù)據(jù)庫(kù)環(huán)境的二進(jìn)制日志文件。此用戶位于主系統(tǒng)中,有利于主機(jī)和客戶機(jī)之間的通信。

Repl_client_priv。確定用戶是否可以確定復(fù)制從服務(wù)器和主服務(wù)器的位置。

Create_view_priv。確定用戶是否可以創(chuàng)建視圖。此權(quán)限只在MySQL 5.0及更高版本中有意義。關(guān)于視圖的更多信息,參見(jiàn)第34章。

Show_view_priv。確定用戶是否可以查看視圖或了解視圖如何執(zhí)行。此權(quán)限只在MySQL 5.0及更高版本中有意義。關(guān)于視圖的更多信息,參見(jiàn)第34章。

Create_routine_priv。確定用戶是否可以更改或放棄存儲(chǔ)過(guò)程和函數(shù)。此權(quán)限是在MySQL 5.0中引入的。

Alter_routine_priv。確定用戶是否可以修改或刪除存儲(chǔ)函數(shù)及函數(shù)。此權(quán)限是在MySQL 5.0中引入的。

Create_user_priv。確定用戶是否可以執(zhí)行CREATE USER命令,這個(gè)命令用于創(chuàng)建新的MySQL賬戶。

Event_priv。確定用戶能否創(chuàng)建、修改和刪除事件。這個(gè)權(quán)限是MySQL 5.1.6新增的。

Trigger_priv。確定用戶能否創(chuàng)建和刪除觸發(fā)器,這個(gè)權(quán)限是MySQL 5.1.6新增的。

復(fù)制代碼

5.1 查看當(dāng)前用戶權(quán)限

show grants for root@'%'

%代表所有IP可訪問(wèn)

select * from mysql.user where user='用戶名'

復(fù)制代碼

5.2 賦予用戶權(quán)限

直接修改mysql.user表。

#賦予權(quán)限

update mysql.user set Select_priv='Y' , Insert_priv = 'Y',Update_priv ='Y' ,Delete_priv='Y',Create_priv='Y' where user='stack';

update mysql.user set reload_priv='Y', process_priv='Y',index_priv='Y', alter_priv='Y',lock_tables_priv='Y',execute_priv='Y' where user='stack';

update mysql.user set create_view_priv='Y',show_view_priv='Y',create_routine_priv='Y',alter_routine_priv='Y' where user='stack';

#刷新權(quán)限

flush privileges;

復(fù)制代碼

本文使用 mdnice 排版

總結(jié)

以上是生活随笔為你收集整理的mysql 视图用户_MySQL视图,存储过程,用户管理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。