mysql 视图用户_MySQL视图,存储过程,用户管理
1. 視圖
一張虛擬表,就是將一個經常被使用的查詢作為一個虛擬表,開發者查詢的時候不需要再次書寫SQL,而是直接調用對應的視圖就可,調用視圖以后MySQL會執行這個查詢SQL。
# 創建視圖
create view vi_select as select * from emps ;
# 創建或者代替已有視圖
create or replace view vi_select as select * from emps inner join dept on dept.id=emps.id
#修改視圖
alter view 視圖名 as select 語句
#顯示視圖的創建情況
show create view 視圖名
#查看視圖
show tables like 'vi_%' ;#和查詢表的相同,所以在創建視圖的時候最好有一個前綴,通過模糊查詢查詢結果
#刪除視圖
drop view 視圖名;
#重命名
rename table 視圖名 to 新視圖名;
復制代碼
1.1 對視圖不能進行DML操作的情況
select子句中包含distinct
select子句中包含組函數
select語句中包含group by
select語句中包含order by
select語句中包含union或者union all等集合運算符
where子句中包含子查詢
from中包含多的個表
視圖列中包含計算列
基表中存在非空約束,則不能進行insert
2. 函數
和其他語言的函數相同,存在一個返回值
語法:
# 創建函數
create function 函數名(參數列表) returns 數據類型
begin
sql ;
return ;
end ;
#調用函數
select 函數名
#查看函數的創建語句
show create function 函數名
#查看所有的函數
show function status like '' ;
#刪除函數
drop function 函數名
復制代碼
3. 存儲過程
一組可編程的函數,為了完成一段特定功能的SQL語句集,經編譯創建并保存在數據庫中,用戶可以通過存儲過程的名字來調用。
通常會配合DELIMITER來使用。DELIMITER的作用是改變SQL語句的結束符號。默認為;
#創建存儲過程,傳入參數,IN代表輸入參數,OUt代表輸出參數。
DELIMITER $
create procedure 名字(IN a int , IN b int,out sum int)
begin
#聲明一個變量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 ;
復制代碼
4. 觸發器
表示某一個表發生一個事件(寫操作),然后自動的執行預先編譯好的SQL語句,執行相關的操作。觸發器事件跟觸發器中的SQL語句的操作是原子性的。
可以用來對數據預處理
create trigger 觸發器名稱
{after|before} #觸發時間
{insert|update|delete}#觸發事件
for each row #固定寫法,無論哪一行數據發生變化均會觸發該觸發器
begin
SQL
end ;
#查看觸發器
show triggers from databaseName;
#刪除觸發器
drop trigger if exists
復制代碼
插入數據
#生成一個隨機的字符串,n代表位數
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?
#生成一個隨機的數字
create function rand_num() returns int(5)
begin
declare i int default 0 ;
set i = floor(100+rand()*10);
return i ;
end?
#創建插入數據的存儲過程
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);
復制代碼
5.用戶管理
#創建用戶
create user 用戶名 identified by 密碼
# 查看MySQL中所有的用戶
select host,user from mysql.user;
# 修改當前用戶的密碼
set password = password(密碼)
# 修改其他用戶的密碼
update mysql.user set password=password(密碼) where user="用戶名"
# 修改用戶名
update mysql.user set user = user where user = "用戶名"
# 刪除用戶
drop user 用戶名
復制代碼
user表中的字段。可以直接通過修改這個表中的字段來為用戶賦予權限
Select_priv。確定用戶是否可以通過SELECT命令選擇數據。
Insert_priv。確定用戶是否可以通過INSERT命令插入數據。
Update_priv。確定用戶是否可以通過UPDATE命令修改現有數據。
Delete_priv。確定用戶是否可以通過DELETE命令刪除現有數據。
Create_priv。確定用戶是否可以創建新的數據庫和表。
Drop_priv。確定用戶是否可以刪除現有數據庫和表。
Reload_priv。確定用戶是否可以執行刷新和重新加載MySQL所用各種內部緩存的特定命令,包括日志、權限、主機、查詢和表。
Shutdown_priv。確定用戶是否可以關閉MySQL服務器。在將此權限提供給root賬戶之外的任何用戶時,都應當非常謹慎。
Process_priv。確定用戶是否可以通過SHOW PROCESSLIST命令查看其他用戶的進程。
File_priv。確定用戶是否可以執行SELECT INTO OUTFILE和LOAD DATA INFILE命令。
Grant_priv。確定用戶是否可以將已經授予給該用戶自己的權限再授予其他用戶。例如,如果用戶可以插入、選擇和刪除foo數據庫中的信息,并且授予了GRANT權限,則該用戶就可以將其任何或全部權限授予系統中的任何其他用戶。
References_priv。目前只是某些未來功能的占位符;現在沒有作用。
Index_priv。確定用戶是否可以創建和刪除表索引。
Alter_priv。確定用戶是否可以重命名和修改表結構。
Show_db_priv。確定用戶是否可以查看服務器上所有數據庫的名字,包括用戶擁有足夠訪問權限的數據庫。可以考慮對所有用戶禁用這個權限,除非有特別不可抗拒的原因。
Super_priv。確定用戶是否可以執行某些強大的管理功能,例如通過KILL命令刪除用戶進程,使用SET
GLOBAL修改全局MySQL變量,執行關于復制和日志的各種命令。
Create_tmp_table_priv。確定用戶是否可以創建臨時表。
Lock_tables_priv。確定用戶是否可以使用LOCK TABLES命令阻止對表的訪問/修改。
Execute_priv。確定用戶是否可以執行存儲過程。此權限只在MySQL 5.0及更高版本中有意義。
Repl_slave_priv。確定用戶是否可以讀取用于維護復制數據庫環境的二進制日志文件。此用戶位于主系統中,有利于主機和客戶機之間的通信。
Repl_client_priv。確定用戶是否可以確定復制從服務器和主服務器的位置。
Create_view_priv。確定用戶是否可以創建視圖。此權限只在MySQL 5.0及更高版本中有意義。關于視圖的更多信息,參見第34章。
Show_view_priv。確定用戶是否可以查看視圖或了解視圖如何執行。此權限只在MySQL 5.0及更高版本中有意義。關于視圖的更多信息,參見第34章。
Create_routine_priv。確定用戶是否可以更改或放棄存儲過程和函數。此權限是在MySQL 5.0中引入的。
Alter_routine_priv。確定用戶是否可以修改或刪除存儲函數及函數。此權限是在MySQL 5.0中引入的。
Create_user_priv。確定用戶是否可以執行CREATE USER命令,這個命令用于創建新的MySQL賬戶。
Event_priv。確定用戶能否創建、修改和刪除事件。這個權限是MySQL 5.1.6新增的。
Trigger_priv。確定用戶能否創建和刪除觸發器,這個權限是MySQL 5.1.6新增的。
復制代碼
5.1 查看當前用戶權限
show grants for root@'%'
%代表所有IP可訪問
select * from mysql.user where user='用戶名'
復制代碼
5.2 賦予用戶權限
直接修改mysql.user表。
#賦予權限
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';
#刷新權限
flush privileges;
復制代碼
本文使用 mdnice 排版
總結
以上是生活随笔為你收集整理的mysql 视图用户_MySQL视图,存储过程,用户管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: K60开启“512GB普及风暴“ 售价直
- 下一篇: ChatGPT背后居然藏着“血汗工厂”?