mysql 视图用户_MySQL视图,存储过程,用户管理
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)題。
- 上一篇: K60开启“512GB普及风暴“ 售价直
- 下一篇: mysql 命令 _mysql 命令