mysql 使用者管理
MYSQL是一個tcp伺服器 ,用於操作伺服器 上的檔案資料,接收使用者端傳送的指令,接收指令時需要考慮安全問題,是不是誰發給我都要 響應?
MySQL中 吧檔案稱為表,在MySQL中自帶的MySQL資料庫中有4個表用於使用者管理的,分別是:優先順序從高到低
user->db->table_priv->columns_priv
#授權表 user #該表放行的許可權,針對:所有資料,所有庫下所有表,以及表下的所有欄位 db #該表放行的許可權,針對:某一資料庫,該資料庫下的所有表,以及表下的所有欄位 tables_priv #該表放行的許可權。針對:某一張表,以及該表下的所有欄位 columns_priv #該表放行的許可權,針對:某一個欄位 #按圖解釋: user:放行db1,db2及其包含的所有 db:放行db1,及其db1包含的所有 tables_priv:放行db1.table1,及其該表包含的所有 columns_prive:放行db1.table1.column1,只放行該欄位 複製程式碼
1.建立使用者的語句:
create user 使用者名稱@“主機地址” identified by "密碼"; create user scote@"127.0.0.1" identified by "123"; 此處的主機地址,不是伺服器地址,而是表示這個賬戶可以在哪臺電腦上登陸
2.授權的語句********
語法: grant [許可權的名稱 select insert......| all] on 資料庫.表名 to 使用者名稱 @主機地址; 授予scote 這個使用者所有許可權,在所有資料庫所有表中 grant all on *.* to scote@"localhost"; #可以訪問所有庫和表 grant all on day41.* to scote@"localhost"; 可以訪問day41庫的所有表 grant all on day41.stu to scote@"localhost"; 可以訪問day41庫的stu表 grant select (id,name),insert(id,name) on day41.stu to scote@"localhost";#僅能檢視day41庫的stu表中的id和name 欄位。
grant [許可權的名稱 select insert……|all ] on 資料庫.表名 to 使用者名稱@主機地址 with grant option;
with grant option 這個使用者可以將它有的許可權授予別的賬戶。
特點:如果授權時,使用者不存在,直接自動建立使用者
3. 刪除許可權
revoke 許可權的名稱 on 資料庫.表名 from 使用者名稱@“主機名”;
revoke all on *.* from scote@”localhost”;
update mysql.user set Grant_priv=”N” where user=”scote” and host=”localhost”;
4.重新整理許可權列表
flush privileges;
5.刪除使用者
drop user 使用者名稱@“主機地址”
子查詢:
當一個查詢是另一個查詢的條件時,這個查詢稱之為子查詢(內層查詢)
當查詢需求比較複雜,一次性查詢無法獲得結果,需要多次查詢時,要用到子查詢
案例:
準備資料:
create table emp (id int,name char(10),sex char,age int,dept_id int,job char(10),salary double); insert into emp values (1,"劉備","男",26,1,"總監",5800), (2,"張飛","男",24,1,"員工",3000), (3,"關羽","男",30,1,"員工",4000), (4,"孫權","男",25,2,"總監",6000), (10,"劉備2","男",26,2,"總監",5800), (5,"周瑜","男",22,2,"員工",5000), (6,"小喬","女",31,2,"員工",4000), (7,"曹操","男",19,3,"總監",10000), (8,"司馬懿","男",24,3,"員工",6000); create table dept(id int primary key,name char(10)); insert into dept values(1,"市場"),(2,"行政"),(3,"財務");
需求: 財務部有哪些人: 方法一: Select *from emp inner join dept on dept.id=emp.dept_id ; Select *from emp inner join dept on dept.id=emp.dept_id where dept.name=”財務”; 方法二: select *from emp where dept_id=(select id from dept where name="財務"); 查平均年齡大於25 的部門名稱: #先求出平均年齡: Select avg(age) from emp group by dept_id; Select dept_id, avg(age) from emp group by dept_id; #再篩選結果 Select dept_id ,avg(age) as a from emp group by dept_id having a >25; Select name from dept where id in (select dept_id from emp group by dept_id having avg(age)>25); 查詢每個部門的最高工資的員工資訊: #先查詢每個部門的最高工資 Select dept_id,max(salary) from emp group by dept_id; select *from emp inner join (select dept_id,max(salary) maxs from emp group by dept_id) as t2 on emp.dept_id=t2.dept_id where emp.salary=t2.maxs;