寫在前面
最近在學習SQL注入烂斋,以sqli-labs練習础废,可是自己對MySQL感到很陌生评腺,故在此學習一下。
連接與退出MySQL
- 格式:
mysql -h主機地址 -u用戶名 -p用戶密碼
- 連接到本機上的MySQL:
- 首先打開DOS窗口蝶念,然后進入目錄mysql/bin芋绸,再鍵入命令
mysql -u root -p
媒殉,
回車后提示你輸密碼。 - 注意用戶名前可以有空格也可以沒有空格摔敛,但是密碼前必須沒有空格廷蓉,否則讓你重新輸入密碼。
- 連接到遠程主機上的MySQL马昙。假設遠程主機的IP為:
110.110.110.110
桃犬,用戶名為root
,密碼為12345678
。則鍵入以下命 令:mysql -h110.110.110.110 -u root -p 12345678
(注:u與root之間可以不用加空格行楞,其它也一樣) - 退出MySQL命令: exit (回車)
常用命令
- 使用SHOW語句找出在服務器上當前存在什么數(shù)據庫:
show databases;
- 創(chuàng)建一個數(shù)據庫:
create database database_name;
- 選擇所要用的數(shù)據庫:
use database_name;
(按回車鍵出現(xiàn)Database changed 時說明操作成功) - 查看現(xiàn)在的數(shù)據庫中存在什么表:
show tables;
- 創(chuàng)建一個數(shù)據庫表:
create table table_name (column1 類型 ,column2 類型,... );
- 顯示表的結構:
describe table_name;
- 往表中加入記錄:
insert into table_name values("value1","value2");
- 用文本方式將數(shù)據裝入數(shù)據庫表中(例如D:/mysql.txt):
load data local infile “D:/mysql.txt” into table table_name;
- 導入.sql文件命令(例如D:/mysql.sql):
source d:/mysql.sql;
- 刪除表:
drop table tabe_name;
- 清空表:
delete from table_name;
- 更新表中數(shù)據:
update table_name set column1="value1" where column2='value2';
- 命令行修改root密碼:
- 格式:
mysqladmin -u用戶名 -p舊密碼 password 新密碼
攒暇。 - 或者
update mysql.user set password=PASSWORD('新密碼') where User='root';
然后flush privileges;
- 創(chuàng)建用戶,向表中添加用戶:例如
insert into mysql.user(Host,User,Password) values(‘localhost’,'jeecn’,password(‘jeecn’));
記得刷新系統(tǒng)權限表敢伸,flush privileges;
這樣就創(chuàng)建了一個名為:jeecn 密碼為:jeecn 的用戶扯饶。 - 為用戶授權:
- 格式:
grant 權限1,權限2,…權限n on 數(shù)據庫名稱.表名稱 to 用戶名@用戶地址 identified by ‘連接口令’;
- 權限1,權限2,…權限n代表
select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file
等14個權限。 - 當
權限1,權限2,…權限n
被all privileges
或者all
代替,表示賦予用戶全部權限尾序。 - 當
數(shù)據庫名稱.表名稱
被*.*
代替钓丰,表示賦予用戶操作服務器上所有數(shù)據庫所有表的權限。 - 用戶地址可以是
localhost每币,也可以是ip地址携丁、機器名字、域名兰怠。
也可以用%
表示從任何地址連接梦鉴。 -
連接口令
不能為空,否則創(chuàng)建失敗揭保。
- 刪除用戶:
delete from user where User=”jeecn” and Host=”localhost”;
注意:關于用戶的創(chuàng)建肥橙,更新,授權秸侣,刪除等存筏,執(zhí)行完相應操作后,需要刷新系統(tǒng)權限表味榛,flush privileges;
- 刪除數(shù)據庫
drop database database_name;
全局管理權限
FILE: 在MySQL服務器上讀寫文件椭坚。
PROCESS: 顯示或殺死屬于其它用戶的服務線程。
RELOAD: 重載訪問控制表搏色,刷新日志等善茎。
SHUTDOWN: 關閉MySQL服務。
數(shù)據庫/數(shù)據表/數(shù)據列權限:
ALTER: 修改已存在的數(shù)據表(例如增加/刪除列)和索引频轿。
CREATE: 建立新的數(shù)據庫或數(shù)據表垂涯。
DELETE: 刪除表的記錄。
DROP: 刪除數(shù)據表或數(shù)據庫略吨。
INDEX: 建立或刪除索引集币。
INSERT: 增加表的記錄。
SELECT: 顯示/搜索表的記錄翠忠。
UPDATE: 修改表中已存在的記錄鞠苟。
特別的權限:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄–其它什么也不允許做秽之。
備份數(shù)據庫
- 導出整個數(shù)據庫:
mysqldump -u user_name -p123456 database_name > outfile_name.sql
- 導出一個表:
mysqldump -u user_name -p database_name table_name > outfile_name.sql
- 導出一個數(shù)據庫結構:
mysqldump -u user_name -p -d --add-drop-table database_name > outfile_name.sql
其中当娱,-d: 沒有數(shù)據
,--add-drop-table 在每個create語句之前增加一個drop table
- 帶語言參數(shù)導出:
mysqldump -u -p --default-character-set=latin1 --set-charset=gbk --skip-opt database_name > outfile_name.sql
加深運用
- 根據已有的表創(chuàng)建新表:
create table tab_new like tab_old
(使用舊表創(chuàng)建新表)create table tab_new as select col1,col2… from tab_old definition only
- 增加一個列:
Alter table tabname add column col type
注:列增加后將不能刪除。列加上數(shù)據后類型也不能改變考榨,唯一能改變的是增加varchar類型的長度跨细。 - 添加主鍵:
Alter table tabname add primary key(col)
刪除主鍵:Alter table tabname drop primary key(col)
- 創(chuàng)建索引:
create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
注:索引是不可更改的,想更改必須刪除重新建河质。 - 創(chuàng)建視圖:
create view viewname as select statement
刪除視圖:drop view viewname
- 幾個簡單的基本的sql語句:
- 選擇:select * from table1 where 范圍
- 插入:insert into table1(field1,field2) values(value1,value2)
- 刪除:delete from table1 where 范圍
- 更新:update table1 set field1=value1 where 范圍
- 查找:select * from table1 where field1 like ’%value1%’
- 排序:select * from table1 order by field1,field2 [desc]
- 總數(shù):select count as totalcount from table1
- 求和:select sum(field1) as sumvalue from table1
- 平均:select avg(field1) as avgvalue from table1
- 最大:select max(field1) as maxvalue from table1
- 最屑讲选:select min(field1) as minvalue from table1
- 幾個高級查詢運算詞:
- UNION 運算符: UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)并消去表中任何重復行而派生出一個結果表震叙。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行散休。兩種情況下媒楼,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
- EXCEPT 運算符: EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復行而派生出一個結果表戚丸。當 ALL 隨 EXCEPT 一起使用時(EXCEPT ALL)划址,不消除重復行。
- INTERSECT 運算符: INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復行而派生出一個結果表限府。當 ALL 隨 INTERSECT 一起使用時(INTERSECT ALL)夺颤,不消除重復行。
注:使用運算詞的幾個查詢結果行必須是一致的胁勺。
- 對數(shù)據庫進行操作:
- 分離數(shù)據庫:
sp_detach_db;
- 附加數(shù)據庫:
sp_attach_db
后接表明附加需要完整的路徑名
- 修改數(shù)據庫的名稱:
sp_renamedb 'old_name', 'new_name'