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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql生活应用_MySQL应用

發布時間:2023/12/19 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql生活应用_MySQL应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.以某用戶登入某個資料庫:

mysql -u username -ppassword db_name

-p與密碼之間沒有空格

如果沒有密碼,-p可省略

db_name為可選項

2.創建用戶:

mysql -u root -ppassword mysql

create user ‘username‘@‘hostname‘?identified by ‘password‘;

3.刪除用戶

mysql -u root -ppassword mysql

drop user ‘username‘@‘hostname‘;

如果從mysql.user表中直接刪除用戶,會導致重新創建同一用戶時報錯。

4.授權

grant privilegesCode on dbName.tableName to ‘username‘@‘host‘identified by‘password‘with grant option;

flush privileges;

privilegesCode表示授予的權限類型,常用的有以下幾種類型:

all privileges:所有權限。

select:讀取權限。

delete:刪除權限。

update:更新權限。

create:創建權限。

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.執行文件中的mysql語句

方法1:命令行里執行

mysql [db_name]

如果文件路徑中有空格,記得加上\,譬如/google\ driver/

方法2:已經進入mysql,執行

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)); 創建表格,聲明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

實際執行順序: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

視圖簡單、安全、數據獨立

創建視圖:

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‘; 創建或更新視圖

查看視圖

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应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。