mysql生活应用_MySQL应用
1.以某用戶登入某個資料庫:
mysql -u username -ppassword db_name
-p與密碼之間沒有空格
如果沒有密碼,-p可省略
db_name為可選項
2.創(chuàng)建用戶:
mysql -u root -ppassword mysql
create user ‘username‘@‘hostname‘?identified by ‘password‘;
3.刪除用戶
mysql -u root -ppassword mysql
drop user ‘username‘@‘hostname‘;
如果從mysql.user表中直接刪除用戶,會導致重新創(chuàng)建同一用戶時報錯。
4.授權
grant privilegesCode on dbName.tableName to ‘username‘@‘host‘identified by‘password‘with grant option;
flush privileges;
privilegesCode表示授予的權限類型,常用的有以下幾種類型:
all privileges:所有權限。
select:讀取權限。
delete:刪除權限。
update:更新權限。
create:創(chuàng)建權限。
drop:刪除數據庫、數據表權限。
dbName.tableName表示授予權限的具體庫或表,常用的有以下幾種選項:
*.*:全局權限,授予該數據庫服務器所有數據庫的權限。
dbName.*:數據庫權限,授予dbName數據庫所有表的權限。
dbName.dbTable:表格權限,授予數據庫dbName中dbTable表的權限。
username@host表示授予的用戶以及允許該用戶登錄的IP地址。其中Host有以下幾種類型:
localhost:只允許該用戶在本地登錄,不能遠程登錄。
%:允許任何一臺機器,本地和遠程。
172.168.32.12:具體的IP表示只允許該用戶從特定IP登錄。
with grant option表示用戶可以將自己擁有的權限授權給別人。
flush privileges表示刷新權限變更。
5.撤銷授權
revoke?privilegesCode?on?dbName.tableName?from ‘username‘@‘hostname‘identified by‘password‘;
flush privileges;
6.查看權限
show grants for ‘username‘@‘hostname‘;
7.授權系統
MySQL的授權系統通常是通過MySQL數據庫中的四個表來實現的,這些表有user、db、tables_priv和columns_priv。
user--該表決定是否允許用戶連接到服務器。如果允許連接,權限字段則為該用戶的全局權限。
db--用于決定哪些用戶可以從哪些主機訪問哪些數據庫。包含在db表中的權限適用于這個表標識的數據庫。
tables_priv--該表與db表相似,不同之處是它用于表而不是數據庫。這個表還包含一個其他字段類型,包括timestamp和grantor兩個字段,用于存儲時間戳和授權方。
columns_priv--該表作用幾乎與db和tables_priv表一樣,不同之處是它提供的是針對某些表的特定列的權限。這個表也多出了一個字段類型,即其他字段,包括了一個timestamp列,用于存放時間戳。
碰到的問題:
問題描述:新建用戶,查看只有grant usage權限,但可以增刪改查。
問題原因:以前沒有徹底刪除用戶,user和db兩個表中數據的不一致,用戶在db中還能map到權限。
解決辦法:清除db表中相關行的數據。
命令管理
1.執(zhí)行文件中的mysql語句
方法1:命令行里執(zhí)行
mysql [db_name]
如果文件路徑中有空格,記得加上\,譬如/google\ driver/
方法2:已經進入mysql,執(zhí)行
source /文件路徑/文件名
或者
\.?/文件路徑/文件名
注意:文件路徑無引號
2.
數據管理
1.數據庫操作
create database db_name;
drop database db_name;
show databases;
use db_name;
2.表格操作
create table tb_name (column_name column_type, column_name column_type,);
例子:create table Took (sID integer,?oID integer,?grade smallint,?primary key (sID, oID),?foreign key (sID) references Student(sID),foreign key (oID) references Offering(oID)); 創(chuàng)建表格,聲明key和外部key。
drop table tb_name;
insert into tb_name (field1, field2, ...) values (value1, value2, ..);
insert into tb_name (subquery);
例子:create table invite (name char, campus varchar(25) default ‘StG‘, email text, age int);
insert into invite(name, email) (select firstname, email from student where cgpa >3.4);
delete from tb_name where clause;
delete from tb_name;全部刪除
例子:delete from invite where name=‘shen‘;
update tb_name set attributes_assignments where clause;
update tb_name set?attributes_assignments;更新所有行
例子:updata invite set campus=‘ut‘;
select column_name,column_name from tb_name where clause [limit n] [offset m]
例子:select * from student;選擇student里面的全部數據
例子:select * from student s1, student s2;重命名student,并取self-joins。
例子:select name as title from course where clause; 重命名name為title。
例子:select * from offering where dept=‘csc‘ and cnum>=300;選取3rd和4th-year的課程
例子:select * from student order by sID [asc | desc];默認以學號升序排列
例子:select grade-10 from took; 數學操作符
例子:select concat(dept,?cnum) as course from course; 合并兩列并重命名
例子:select dept,cnum,‘satisfied‘ as breadthrequirement from course where breadth;新增breadthrequirement,賦值satisfied
例子:select * from course where name like ‘%comp%‘; pattern匹配,%任意字符,_任意單個字符;
3.聚合函數(aggregation function)和分組(group by)
聚合函數:sum, avg, count, max, min
count(*): 所有行數
count(屬性):某列非空行數
count(distinct 屬性):某列非空不重復行數
分組:group by 屬性 having 需要滿足的條件
如果使用分組group by,select、having后的屬性要么是聚合函數,要么是group by后的屬性,包含其他屬性沒有意義。
換句話說:分組后,select、having的屬性要么是分組依據的屬性(列名),要么就是其他某一列通過聚合函數聚合后得到的屬性
例子:select count(*) from student where campus=‘stg‘; 返回campus=‘stg‘的所有行數,select屬性為聚合函數
例子:select?count(sid)?from student where campus=‘stg‘; 返回campus=‘stg‘的所有sid非空行數,select屬性為聚合函數
例子:select campus, count(*) from student group by campus; 按campus分組,并返回campus和每組campus對應的行數
例子:select sID,?count(*) from student group by campus; 沒有意義。
例子:select?campus, count(*)?from student group by?campus having count(*)>1; 按campus分組,并返回滿足count(*)>1條件的campus和每組campus對應的行數
例子:
4. SQL查詢順序
語言請求順序:select, from, where, group by, having, order by
實際執(zhí)行順序:from, where, group by, having, select, order by
選擇表格,篩選行,分組,分組后篩選,選取列,排序
5. set還是bag操作
select from where:默認結果為bag,不刪除重復項;
select distinct from where:結果為set,刪除重復項;
union:刪除重復項;
union all:保留重復項;
6. 視圖view
視圖簡單、安全、數據獨立
創(chuàng)建視圖:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEWview_name [(column_list)]
AS select from where
[WITH [CASCADED | LOCAL] CHECK OPTION]
1)OR REPLACE:表示替換已有視圖
2)ALGORITHM:表示視圖選擇算法,默認算法是UNDEFINED(未定義的):MySQL自動選擇要使用的算法 ;merge合并;temptable臨時表
3)select_statement:表示select語句
4)[WITH [CASCADED | LOCAL] CHECK OPTION]:表示視圖在更新時保證在視圖的權限范圍之內
cascade是默認值,表示更新視圖的時候,要滿足視圖和表的相關條件
local表示更新視圖的時候,要滿足該視圖定義的一個條件即可
TIPS:推薦使用WHIT [CASCADED | LOCAL] CHECK OPTION選項,可以保證數據的安全性
例子:CREATE OR REPLACE VIEW topresults (名字,姓氏,課程代碼)?AS SELECT firstname, surname, cnum FROM Student, Took, Offering WHERE?Student.sid = Took.sid AND Took.oid = Offering.oid AND grade >= 80 AND dept = ‘CSC‘; 創(chuàng)建或更新視圖
查看視圖
DESC view_name:查看view列屬性
SHOW CREATE VIEW view_name:查看create view指令
SELECT * FROM view_name:查看view中內容
修改視圖
CREATE OR REPLACE:更新視圖
ALTER:修改視圖,保持視圖與基表的一致性
DML操作:UPDATE view_name set name=‘王五‘ where 學號=‘1‘;
刪除視圖:
DROP VIEW [IF EXISTS] view_name;
7. NULL
A [LEFT | RIGHT | RIGHT] JOIN B 引入NULL值
如果聚合列A每一項的值均為NULL,那么該列聚合函數的結果為NULL,但是count(A)為0
否則,NULL值對聚合函數sum, avg 和 count 無影響,也不會成為max和min中的結果
8.子查詢(Subquery)
在FROM中的子查詢:必須用()和重命名
SELECT sid, concat(dept,cnum) as course, grade FROM Took, (SELECT *FROM Offering WHERE instructor=‘Horton’) Hoffering WHERE Took.oid = Hoffering.oid;
在WHERE中的子查詢:必須用(),并用any,all,in,exists解決查詢結果為多項的問題:
SELECT sid, surname FROM StudentWHERE cgpa > ALL?(SELECT cgpaFROM StudentWHERE?campus = ‘StG’);
SELECT surname, cgpa FROM Student WHERE EXISTS ( SELECT * FROM Took WHERE Student.sid = Took.sid and grade > 85);結果同下例
SELECT surname, cgpa FROM Student WHERE (sid, cgpa) IN?(SELECT sid, cgpa FROM Took WHERE Student.sid = Took.sid and grade > 85);結果同上例
[]:括弧里為可選項
參考mysql說明文檔:
https://dev.mysql.com/doc/refman/8.0/en/adding-users.html
用戶權限說明:
https://www.cnblogs.com/caibird2005/p/4512905.html
深入解析MySQL視圖VIEW
https://www.cnblogs.com/geaozhang/p/6792369.html#chuangjianshitu
MySQL應用
標簽:option???fun???sign???show???報錯???作用???所有權???read???登錄
本條技術文章來源于互聯網,如果無意侵犯您的權益請點擊此處反饋版權投訴
本文系統來源:https://www.cnblogs.com/shendehong/p/10556222.html
總結
以上是生活随笔為你收集整理的mysql生活应用_MySQL应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tomcat控制台输出到文件
- 下一篇: Android App 优化之 ANR