Mysql常用命令
Mysql?各個版本 官方文檔
https://dev.mysql.com/doc/refman/
連接本地mysql數(shù)據(jù)庫命令:
> mysql -u root -p
Enter password:******
啟動數(shù)據(jù)庫服務(wù)
>net start 數(shù)據(jù)庫名;
eg:>net start mysql57;
關(guān)閉數(shù)據(jù)庫服務(wù)
>net stop 數(shù)據(jù)庫名;
eg:>net stop mysql57;
連接遠(yuǎn)程數(shù)據(jù)庫
mysql -h [服務(wù)器地址] -P [端口號] -u [用戶名] -p [用戶密碼];
eg:>mysql -h 192.168.5.116 -P 3306 -u root -p123456
重啟數(shù)據(jù)庫
service mysql restart辆亏;
數(shù)據(jù)庫操作
查看數(shù)據(jù)庫服務(wù)器中所有的數(shù)據(jù)庫:
>show databases;
查看某個數(shù)據(jù)庫的定義信息:
>show create database 數(shù)據(jù)庫名稱;
使用某個數(shù)據(jù)庫:
>use 數(shù)據(jù)庫名;
創(chuàng)建數(shù)據(jù)庫
create database [if not exists] 庫名;
刪除數(shù)據(jù)庫
drop databases [if exists] 庫名;
建數(shù)據(jù)庫通用的寫法
drop database if exists 舊庫名;
create database 新庫名;
表操作 DDL
Data Define Language數(shù)據(jù)定義語言奠滑,主要用來對數(shù)據(jù)庫朗徊、表進(jìn)行一些管理操作。
查看數(shù)據(jù)庫中所有表:
>show tables;
查看某表的定義信息:
>show create table 表名;
查看表結(jié)構(gòu):
>desc 表名;
建表
create table 表名(
? ? 字段名1 類型[(寬度)] [約束條件] [comment '字段說明'],
? ? 字段名2 類型[(寬度)] [約束條件] [comment '字段說明'],
? ? 字段名3 類型[(寬度)] [約束條件] [comment '字段說明']
)[表的一些設(shè)置];
約束說明:
not null:標(biāo)識該字段不能為空
default value:為該字段設(shè)置默認(rèn)值妙真,默認(rèn)值為value
>drop table IF EXISTS test;
>create table test( a int not null comment '字段a', b int not null default 0 comment '字段b' );
primary key:標(biāo)識該字段為該表的主鍵和措,可以唯一的標(biāo)識記錄应又,插入重復(fù)的會報錯(1.在列后2.在所有列定義之后定義),支持多字段作為主鍵问畅,多個之間用逗號隔開,語法:primary key(字段1,字段2,字段n):
>drop table IF EXISTS test;
>create table test( a int not null comment '字段a', b int not null comment '字段b', primary key(a,b) };//設(shè)置a為主鍵
>alter table test modify a int not null primary key;
//查詢test表的主鍵
>show index from test;
foreign key:為表中的字段設(shè)置外鍵
語法:foreign key(當(dāng)前表的列名) references 引用的外鍵表(外鍵表中字段名稱)
>drop table if exists test1;
>drop table if exists test2;
>create table test1( a int not null comment '字段a' primary key );
>create table test2( b int not null comment '字段b',ts5_a int not null,
?????foreign key(ts5_a) references test1(a) );
兩張表中需要建立外鍵關(guān)系的字段類型需要一致,要設(shè)置外鍵的字段不能為主鍵,被引用的字段需要為主鍵,被插入的值在外鍵表必須存在.
unique key(uq):標(biāo)識該字段的值是唯一的約束爆存,支持一個到多個字段蛉顽,插入重復(fù)的值會報違反唯一約束,會插入失敗先较。(1.跟在字段后携冤,2.所有列定義之后定義)
支持多字段,多個之間用逗號隔開闲勺,語法:unique key(字段1,字段2,字段n)
>drop table if exists test;
>create table test( a int not null comment '字段a', b int not null comment '字段b', unique key(a,b));
auto_increment:標(biāo)識該字段的值自動增長(整數(shù)類型曾棕,而且為主鍵)
>drop table if exists test;
>create table test11(a int not null auto_increment primary key comment '字段a',
?????????b int not null comment '字段b');
字段a為自動增長菜循,默認(rèn)值從1開始翘地,每次+1,關(guān)于自動增長字段的初始值、步長可以在mysql中進(jìn)行設(shè)置衙耕,比如設(shè)置初始值為1萬昧穿,每次增長10,自增長列當(dāng)前值存儲在內(nèi)存中,數(shù)據(jù)庫每次重啟之后橙喘,會查詢當(dāng)前表中自增列的最大值作為當(dāng)前值时鸵,如果表數(shù)據(jù)被清空之后,數(shù)據(jù)庫重啟了厅瞎,自增列的值將從初始值開始.
刪除表
drop table [if exists] 表名;
修改表名
alter table 表名 rename [to] 新表名;
表設(shè)置備注
alter table 表名 comment '備注信息';
復(fù)制表(只復(fù)制表結(jié)構(gòu))
create table 表名 like 被復(fù)制的表名;
>create table test1 like test2;
>select * from test1;
>show create table test1;
復(fù)制表結(jié)構(gòu)+數(shù)據(jù)
create table 表名 [as] select 字段,... from 被復(fù)制的表 [where 條件];
>create table test1 as select * from tesst2;
>select * from test1;
表中列的管理
添加列
alter table 表名 add column 列名 類型 [列約束];
alter table test add column b int not null default 0 comment '字段b';
修改列
alter table 表名 modify column 列名 新類型 [約束];
或者
alter table 表名 change column 列名 新列名 新類型 [約束];
modify不能修改列名饰潜,change可以修改列名
刪除列
alter table 表名 drop column 列名;
DML(Data Manipulation Language)數(shù)據(jù)操作語言,以INSERT磁奖、UPDATE囊拜、DELETE
三種指令為核心,分別代表插入比搭、更新與刪除,是必須要掌握的指令南誊,DML和SQL中的 select 熟稱 CRUD(增刪改查)身诺。
插入操作
insert into 表名[(字段,字段,...)] values (值,值,...);
如果是字符型或日期類型,值需要用單引號引起來抄囚;如果是數(shù)值類型霉赡,不需要用單引號
insert into 表名 set 字段 = 值,字段 = 值;
批量插入2種方式:
insert into 表名 [(字段,字段,...)] values (值,值,,...),(值,值,...),(值,值,...);
insert into 表 [(字段,字段,...)] 數(shù)據(jù)來源select語句;
select返回的結(jié)果和插入數(shù)據(jù)的字段數(shù)量、順序幔托、類型需要一致穴亏。
單表更新
update 表名 [[as] 別名] set [別名.]字段 = 值,[別名.]字段 = 值 [where條件];
多表更新
update 表1 [[as] 別名1],表名2 [[as] 別名2] set [別名.]字段 = 值,[別名.]字段 = 值 [where條件];
update test1,test2 set test1.a=5,test1.b=6,test2.c1=2 where test1.a=test2.c1;
單表刪除
delete [別名] from 表名 [[as] 別名] [where條件];
>delete from test1;//刪除test1表所有記錄
?>delete test1 from test1;//刪除test1表所有記錄
?>delete t1 from test1 t1;//有別名的方式,刪除test1表所有記錄
>delete t1 from test1 t1 where t1.a>100; 有別名的方式刪除滿足條件的記錄
多表刪除
delete [別名1],[別名2] from 表1 [[as] 別名1],表2 [[as] 別名2] [where條件];
>delete t1 from test1 t1,test2 t2 where t1.a=t2.c2;//把符合條件的test1表的數(shù)據(jù)刪除
>delete t1,t2 from test1 t1,test2 t2 where t1.a=t2.c2;//把符合條件的test1,test2表數(shù)據(jù)刪除
使用truncate刪除
truncate 表名;
drop重挑,truncate嗓化,delete區(qū)別
drop (刪除表):刪除內(nèi)容和定義,釋放空間谬哀,簡單來說就是把整個表去掉drop語句將刪除表的結(jié)構(gòu)被依賴的約? ?????束(constrain)刺覆,觸發(fā)器(trigger)索引(index),依賴于該表的存儲過程/函數(shù)將被保留史煎,但其狀態(tài)會????變????為:invalid谦屑。如果要刪除表定義及其數(shù)據(jù),請使用 drop table 語句篇梭。
truncate (清空表中的數(shù)據(jù)):刪除內(nèi)容氢橙、釋放空間但不刪除定義(保留表的數(shù)據(jù)結(jié)構(gòu)),與drop不同的是恬偷,只是清????空表數(shù)據(jù)而已悍手。truncate不能刪除具體行數(shù)據(jù),要刪就要把整個表清空了。
delete (刪除表中的數(shù)據(jù)):delete 語句用于刪除表中的行谓苟。delete語句執(zhí)行刪除的過程是每次從表中刪除一行官脓,????并且同時將該行的刪除操作作為事務(wù)記錄在日志中保存,以便進(jìn)行進(jìn)行回滾操作涝焙。
truncate與不帶where的delete :只刪除數(shù)據(jù)卑笨,而不刪除表的結(jié)構(gòu)(定義),
truncate table 刪除表中的所有行,但表結(jié)構(gòu)及其列仑撞、約束赤兴、索引等保持不變。
對于由foreign key約束引用的表隧哮,不能使用truncate table 桶良,而應(yīng)使用 不帶 where子句的delete語句。由于truncate table 記錄在日志中沮翔,所以它不能激活觸發(fā)器陨帆。
如果要刪除表定義及其數(shù)據(jù),請使用 drop table 語句.
刪除速度采蚀,一般來說: drop> truncate > delete
DQL(Data QueryLanguage):數(shù)據(jù)查詢語言
基本語法
select 查詢的列 from 表名;
查詢常量
select 常量值1疲牵,常量值2,常量值3榆鼠;
查詢表達(dá)式
select 表達(dá)式;
查詢函數(shù)
select 函數(shù);
查詢指定的字段
select 字段1,字段2,... from 表名纲爸;
查詢所有列
select * from 表名;
*表示返回表中所有字段;
列別名
select 列 [as] 別名 from 表名;
>select a 列1,b 列2 from test1;
>select a as 列1,b as 列2 from test1;
表別名
select 別名.字段,別名.* from 表名 [as] 別名;
條件查詢語法
條件查詢運算符詳解(=、<妆够、>识啦、>=、<=神妹、<>颓哮、!=)
邏輯查詢運算符詳解(and、or)
like模糊查詢介紹between and查詢
in灾螃、not in查詢
NULL值存在的坑
is null/is not null(NULL值專用查詢)
?<=>(安全等于)運算符
條件查詢
select 列名 from 表名 where 列 運算符 值;
數(shù)值按照大小比較题翻。字符 按照ASCII碼對應(yīng)的值進(jìn)行比較,比較時按照 字符 對應(yīng)的位置一個字符一個字符的比較腰鬼。
邏輯查詢運算符
使用多個條件進(jìn)行查詢的時候嵌赠,需要使用邏輯查詢運算符。
and 多條件都成立
or 多個條件中滿足一個
select 列名 from 表名 where 列 like pattern;
pattern中可以包含通配符熄赡,有以下通配符:
%:表示匹配任意一個或多個字符
_:表示匹配任意一個字符姜挺。
select 列名 from 表名 where 列名 between 值1 and 值2;
這些值可以是數(shù)值、文本或者日期彼硫,屬于一個閉區(qū)間查詢炊豪。
select 列名 from 表名 where 字段 in (值1,值2,值3,值4,...);
in 后面括號中可以包含多個值凌箕,對應(yīng)記錄的字段滿足in中任意一個都會被返回,in列表的值類型必須一致或兼容,in列表中不支持通配符。
select 列名 from 表名 where 字段 not in (值1,值2,值3,...);
排序查詢(order by)
select 字段名 from 表名 [where 條件] order by 字段1 [asc|desc],字段2 [asc|desc],...;
asc|desc表示排序的規(guī)則词渤,asc:升序牵舱,desc:降序,默認(rèn)為asc缺虐;
支持多個字段進(jìn)行排序芜壁,多字段排序之間用逗號隔開。
按照字段1排序高氮,遇到相同的再按照字段2排序慧妄。
limit用來限制select查詢返回的行數(shù),常用于分頁等操作剪芍。
select 列 from 表 limit [offset,] count;
offset:表示偏移量塞淹,通俗點講就是跳過多少行,offset可以省略罪裹,默認(rèn)為0饱普,表示跳過0行;范圍:[0,+∞)状共。
count:跳過offset行 之后 開始取數(shù)據(jù)费彼,取count行記錄;范圍:[0,+∞)口芍。
limit中offset和count的值不能用表達(dá)式。
用limit實現(xiàn)分頁雇卷,語法如下:
select 列 from 表 limit (page-1)*pageSize,pageSize;
避免采坑
limit 中不能使用表達(dá)式鬓椭,eg ....... limit 1,1+1;
limit 后面的2個數(shù)字不能為負(fù)數(shù),eg: ... limit -1;
排序分頁存在的坑
排序中存在相同的值時关划,需要再指定一個排序規(guī)則小染,通過這種排序規(guī)則不存在二義性,分頁排序時贮折,排序不要有二義性裤翩,二義性情況下可能會導(dǎo)致分頁結(jié)果亂序,可以在后面追加一個主鍵排序调榄。
null 存在的坑
查詢 運算符踊赠、like、between and每庆、in筐带、not in對NULL值查詢不起效。
is null / is not null (null 值專用查詢)
mysql為我們提供了查詢空值的語法:IS NULL缤灵、IS NOT NULL伦籍。
select 列名 from 表名 where 列 is null;
任何值和NULL使用運算符(>蓝晒、<、>=帖鸦、<=芝薇、!=、<>)或者(in作儿、not in洛二、any/some、all)比較時立倍,返回值都為NULL灭红,NULL作為布爾值的時候,不為1也不為0口注。
當(dāng)IN和NULL比較時变擒,無法查詢出為NULL的記錄。
當(dāng)NOT IN 后面有NULL值時寝志,不論什么情況下娇斑,整個sql的查詢結(jié)果都為空。
count(字段)無法統(tǒng)計字段為NULL的值材部,count(*)可以統(tǒng)計值為null的行毫缆。
當(dāng)字段為主鍵的時候,字段會自動設(shè)置為not null乐导。
創(chuàng)建表的時候苦丁,盡量設(shè)置表的字段不能為空,給字段設(shè)置一個默認(rèn)值物臂。
分組查詢
select column,group_function,... from table
[where condition]
group by group_by_expression
[having group_condition];
group_function:聚合函數(shù)旺拉。
group_by_expression:分組表達(dá)式,多個之間用逗號隔開棵磷。
group_condition:分組之后對數(shù)據(jù)進(jìn)行過濾蛾狗。
分組中,select后面只能有兩種類型的列:出現(xiàn)在group by后的列,或者 使用聚合函數(shù)的列.
分組 前 對數(shù)據(jù)進(jìn)行篩選仪媒,使用where關(guān)鍵字沉桌,分組 后 對數(shù)據(jù)篩選,使用having關(guān)鍵字算吩,having后是可以跟聚合函數(shù)的留凭。
where、group by赌莺、having冰抢、order by、limit這些關(guān)鍵字一起使用時艘狭,先后順序有明確的限制挎扰,語法如下:
select 列 from
表名
where [查詢條件]
group by [分組表達(dá)式]
having [分組過濾條件]
order by [排序條件]
limit [offset,] count;
在寫分組查詢的時候翠订,最好按照標(biāo)準(zhǔn)的規(guī)范來寫,select后面出現(xiàn)的 列 必須在group by中 或者 必須使用聚合函數(shù)遵倦。
子查詢
子查詢分類
按結(jié)果集的行列數(shù)不同分為4種
標(biāo)量子查詢(結(jié)果集只有一行一列)
列子查詢(結(jié)果集只有一列多行)
行子查詢(結(jié)果集有一行多列)
表子查詢(結(jié)果集一般為多行多列)
按子查詢出現(xiàn)在主查詢中的不同位置分
select后面:僅僅支持標(biāo)量子查詢尽超。
from后面:支持表子查詢。
where或having后面:支持標(biāo)量子查詢(單列單行)梧躺、列子查詢(單列多行)似谁、行子查詢(多列多行)
exists后面(即相關(guān)子查詢):表子查詢(多行、多列)
where和having后面的子查詢
子查詢放在小括號內(nèi)掠哥。
子查詢一般放在條件的右側(cè)巩踏。
標(biāo)量子查詢,一般搭配著 單行 操作符使用续搀,多行操作符? >塞琼、<、>=禁舷、<=彪杉、=、<>牵咙、!=
列子查詢派近,一般搭配著多行操作符使用
子查詢的執(zhí)行 優(yōu)先于 主查詢執(zhí)行,因為主查詢的條件用到了子查詢的結(jié)果洁桌。
mysql中的 in渴丸、any、some另凌、all 子查詢關(guān)鍵詞之一曙强。
in:in常用于where表達(dá)式中,其作用是查詢某個范圍內(nèi)的數(shù)據(jù);
any和some一樣: 可以與=途茫、>、>=溪食、<囊卜、<=、<>結(jié)合起來使用错沃,分別表示等于栅组、大于、大于等于枢析、小于玉掸、小于等于、不等于其中的 任何 一個數(shù)據(jù)醒叁。
all:可以與=司浪、>泊业、>=、<啊易、<=吁伺、<>結(jié)合是來使用,分別表示等于租谈、大于篮奄、大于等于、小于割去、小于等于窟却、不等于其中的其中的 所有數(shù)據(jù)。
a>som(10,20,30)呻逆,a大于子查詢中任意一個即可夸赫,a大于子查詢中最小值即可
a>all(10,20,30),a大于子查詢中所有值
sql中笛卡爾積語法
select 字段 from 表1,表2[,表N];
或者
select 字段 from 表1 join 表2 [join 表N];
內(nèi)連接
select 字段 from 表1 inner join 表2 on 連接條件;
或者
select 字段 from 表1 join 表2 on 連接條件;
或者
select 字段 from 表1,表2 [where 關(guān)聯(lián)條件];
內(nèi)連接建議使用第3種語法页慷,簡潔:
select 字段 from 表名1,表名2 [where 關(guān)聯(lián)條件];
外連接分為2種:
左外鏈接:使用left join關(guān)鍵字憔足,left join左邊的是主表。
右外連接:使用right join關(guān)鍵字酒繁,right join右邊的是主表滓彰。
select 列 from 主表 left join 從表 on 連接條件;
先使用 內(nèi)連接 獲取連接結(jié)果,然后再 使用where 對連接結(jié)果進(jìn)行過濾州袒。
select 列 from 從表 right join 主表 on 連接條件;
聚合函數(shù)
max? ?查詢指定列的最大值
min? ? 查詢指定列的最小值
count 統(tǒng)計查詢結(jié)果的行數(shù)
sum? 求和揭绑,返回指定列的總和
avg? ?求平均值,返回指定列數(shù)據(jù)的平均值
視圖view
創(chuàng)建視圖
create?view?視圖名 as 查詢語句;
create view v_1 as select name,age from test;
select * from v_1 where age=20;//使用視圖
select 字段 from 視圖 [where 條件];
修改視圖
create?or?replace?view?視圖名 as 查詢語句;
或者
alter?view?視圖名 as? 查詢語句;
刪除視圖
drop?view?視圖名1?[,視圖名2]?[,視圖名n];
查看視圖結(jié)構(gòu)
desc?視圖名稱;
show?create?view?視圖名稱;
系統(tǒng)變量
查看系統(tǒng)所有變量
show?[global?|?session]?變量名;
查看全局變量
show?global?variables;
查看會話變量
show?session?variables;
show?variables;
流程控制語句
if函數(shù)
if(條件表達(dá)式,值1,值2);
當(dāng)參數(shù)1為true的時候郎哭,返回值1他匪,否則返回值2。
if?條件語句1?then?語句1;
elseif?條件語句2?then?語句2;
...
else?語句n;
end?if;
只能使用在begin end之間夸研。
case
case?表達(dá)式
when?值1?then?結(jié)果1或者語句1(如果是語句需要加分號)
when?值2?then?結(jié)果2或者語句2
...
else?結(jié)果n或者語句n
end?[case]?(如果是放在begin?end之間需要加case邦蜜,如果在select后則不需要)
eg:SELECT?id,(CASE?sex?WHEN?1?THEN?'男'?ELSE?'女'?END) ,name FROM?test;
SELECT?id,(CASE?sex?WHEN?1?then?'男'?WHEN?2?then?'女'?END) ,name FROM?test;
while循環(huán)
[標(biāo)簽:]while?循環(huán)條件?do
循環(huán)體
end?while?[標(biāo)簽];
repeat循環(huán)
[標(biāo)簽:]repeat
循環(huán)體;
until?結(jié)束循環(huán)的條件?end?repeat?[標(biāo)簽];
loop循環(huán)
[標(biāo)簽:]loop
循環(huán)體;
end?loop?[標(biāo)簽];
結(jié)束本次循環(huán)
iterate?循環(huán)標(biāo)簽;
退出循環(huán)
leave?循環(huán)標(biāo)簽;
游標(biāo)
游標(biāo)(Cursor)是處理數(shù)據(jù)的一種方法,為了查看或者處理結(jié)果集中的數(shù)據(jù)亥至,游標(biāo)提供了在結(jié)果集中一次一行遍歷數(shù)據(jù)的能力悼沈。
游標(biāo)只能在存儲過程和函數(shù)中使用
一個begin end中只能聲明一個游標(biāo)
聲明游標(biāo)
DECLARE?游標(biāo)名稱?CURSOR?FOR?查詢語句;
打開游標(biāo)
open?游標(biāo)名稱;
遍歷游標(biāo)
fetch?游標(biāo)名稱?into?變量列表;
關(guān)閉游標(biāo)
close?游標(biāo)名稱;
索引
是依靠某些數(shù)據(jù)結(jié)構(gòu)和算法來組織數(shù)據(jù),最終引導(dǎo)用戶快速檢索出所需要的數(shù)據(jù)姐扮。
通過數(shù)據(jù)結(jié)構(gòu)和算法來對原始的數(shù)據(jù)進(jìn)行一些有效的組織絮供,通過這些有效的組織,可以引導(dǎo)使用者對原始數(shù)據(jù)進(jìn)行快速檢索茶敏。
InnoDB中的索引
主鍵索引(聚集索引)壤靶、輔助索引(非聚集索引)。
主鍵索引:每個表只有一個主鍵索引惊搏,葉子節(jié)點同時保存了主鍵的值也數(shù)據(jù)記錄贮乳。
輔助索引:葉子節(jié)點保存了索引字段的值以及主鍵的值忧换。
mysql中頁是innodb中存儲數(shù)據(jù)的基本單位,也是mysql中管理數(shù)據(jù)的最小單位塘揣,和磁盤交互的時候都是以頁來進(jìn)行的包雀,默認(rèn)是16kb,mysql中采用b+樹存儲數(shù)據(jù)亲铡,頁相當(dāng)于b+樹中的一個節(jié)點才写。b+樹中葉子頁之間用雙向鏈表連接的,能夠?qū)崿F(xiàn)范圍查找奖蔓,頁內(nèi)部的記錄之間是采用單向鏈表連接的赞草,方便訪問下一條記錄,為了加快頁內(nèi)部記錄的查詢吆鹤,對頁內(nèi)記錄上加了個有序的稀疏索引厨疙,叫頁目錄(page directory)
mysql中的索引用到了b+樹,鏈表疑务,二分法查找沾凄,做到了快速定位目標(biāo)數(shù)據(jù),快速范圍查找知允。
索引分類分為聚集索引和非聚集索引撒蟀。
```
//查看表索引
?SHOW INDEX FROM?tbl_name;
```
權(quán)限操作
mysql識別用戶身份的方式是:用戶名+主機
查看mysql中所有用戶
用戶信息在mysql.user表中,如下:
>use mysql;
>select user,host from user;
創(chuàng)建用戶(所有的用戶信息都在一張user表里)
語法:
create user 用戶名[@主機名] [identified by '密碼'];
主機名默認(rèn)值為%温鸽,表示這個用戶可以從 任何主機 連接mysql服務(wù)器
密碼可以省略保屯,表示無密碼登錄
>create user test1;
>select user,host from user;
create user 'test2'@'localhost' identified by '123';
test2的主機為localhost表示本機,此用戶只能登陸本機的mysql
create user 'test3'@'%' identified by '123';
test3可以從任何機器連接到mysql服務(wù)器
create user 'test4'@'192.168.11.%' identified by '123';
test4可以從192.168.11段的機器連接mysql
修改密碼【3種方式】
1)通過管理員修改密碼
SET PASSWORD FOR '用戶名'@'主機' = PASSWORD('密碼');
2)create user 用戶名[@主機名] [identified by '密碼'];
set password = password('密碼');
3)通過修改mysql.user表修改密碼
use mysql;
update user set authentication_string = password('321') where user = 'test1' and host = '%';
flush privileges;//刷新
給用戶授權(quán)
grant privileges ON database.table TO 'username'[@'host'] [with grant option]
priveleges (權(quán)限列表)涤垫,可以是all姑尺,表示所有權(quán)限,也可以是select蝠猬、update等權(quán)限切蟋,多個權(quán)限之間用逗號分開。
ON 用來指定 權(quán)限針 對哪些庫和表榆芦,格式為 數(shù)據(jù)庫.表名 敦姻,點號前面用來指定 數(shù)據(jù)庫名,點號后面用來指定 表名歧杏,. 表示所有數(shù)據(jù)庫 所有表。
TO 表示將權(quán)限賦予某個用戶, 格式為username@host迷守,@前面為用戶名犬绒,@后面接限制的主機,可以是IP兑凿、IP段凯力、域名以及%茵瘾,%表示任何地方。
WITH GRANT OPTION 這個選項表示該用戶可以將自己擁有的權(quán)限授權(quán)給別人咐鹤。
grant all on *.* to 'test1'@‘%’;
給test1授權(quán)可以操作所有庫所有權(quán)限拗秘,相當(dāng)于dba
grant select on seata.* to 'test1'@'%';
test1可以對seata庫中所有的表執(zhí)行select
grant select,update on seata.* to 'test1'@'%';
test1可以對seata庫中所有的表執(zhí)行select、update
grant select(user,host) on mysql.user to 'test1'@'localhost';
test1用戶只能查詢mysql.user表的user,host字段
查看用戶有哪些權(quán)限
show grants for '用戶名'[@'主機']
主機可以省略祈惶,默認(rèn)值為%雕旨,示例:
> show grants for 'test1'@'localhost';
撤銷用戶的權(quán)限,語法:
revoke privileges ON database.table FROM '用戶名'[@'主機'];
刪除用戶【2種方式】
方式1:
drop user '用戶名'[@'主機'];
eg:>drop user test1@localhost;
>drop user test2;
方式2:
通過刪除mysql.user表數(shù)據(jù)的方式刪除
eg:>delete from user where user='用戶名' and host='主機';
>flush privileges;