写在前面
最近在学习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语句找出在服务器上当前存在什么数据库:
show databases;
- 创建一个数据库:
create database database_name;
- 选择所要用的数据库:
use database_name;
(按回车键出现Database changed 时说明操作成功) - 查看现在的数据库中存在什么表:
show tables;
- 创建一个数据库表:
create table table_name (column1 类型 ,column2 类型,... );
- 显示表的结构:
describe table_name;
- 往表中加入记录:
insert into table_name values("value1","value2");
- 用文本方式将数据装入数据库表中(例如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;
- 更新表中数据:
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;
- 创建用户,向表中添加用户:例如
insert into mysql.user(Host,User,Password) values(‘localhost’,'jeecn’,password(‘jeecn’));
记得刷新系统权限表,flush privileges;
这样就创建了一个名为:jeecn 密码为:jeecn 的用户。 - 为用户授权:
- 格式:
grant 权限1,权限2,…权限n on 数据库名称.表名称 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
代替,表示赋予用户全部权限。 - 当
数据库名称.表名称
被*.*
代替,表示赋予用户操作服务器上所有数据库所有表的权限。 - 用户地址可以是
localhost,也可以是ip地址、机器名字、域名。
也可以用%
表示从任何地址连接。 -
连接口令
不能为空,否则创建失败。
- 删除用户:
delete from user where User=”jeecn” and Host=”localhost”;
注意:关于用户的创建,更新,授权,删除等,执行完相应操作后,需要刷新系统权限表,flush privileges;
- 删除数据库
drop database database_name;
全局管理权限
FILE: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限:
ALTER: 修改已存在的数据表(例如增加/删除列)和索引。
CREATE: 建立新的数据库或数据表。
DELETE: 删除表的记录。
DROP: 删除数据表或数据库。
INDEX: 建立或删除索引。
INSERT: 增加表的记录。
SELECT: 显示/搜索表的记录。
UPDATE: 修改表中已存在的记录。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录–其它什么也不允许做。
备份数据库
- 导出整个数据库:
mysqldump -u user_name -p123456 database_name > outfile_name.sql
- 导出一个表:
mysqldump -u user_name -p database_name table_name > outfile_name.sql
- 导出一个数据库结构:
mysqldump -u user_name -p -d --add-drop-table database_name > outfile_name.sql
其中,-d: 没有数据
,--add-drop-table 在每个create语句之前增加一个drop table
- 带语言参数导出:
mysqldump -u -p --default-character-set=latin1 --set-charset=gbk --skip-opt database_name > outfile_name.sql
加深运用
- 根据已有的表创建新表:
-
create table tab_new like tab_old
(使用旧表创建新表) -
create table tab_new as select col1,col2… from tab_old definition only
- 增加一个列:
Alter table tabname add column col type
注:列增加后将不能删除。列加上数据后类型也不能改变,唯一能改变的是增加varchar类型的长度。 - 添加主键:
Alter table tabname add primary key(col)
删除主键:Alter table tabname drop primary key(col)
- 创建索引:
create [unique] index idxname on tabname(col….)
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。 - 创建视图:
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]
- 总数: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),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
- 对数据库进行操作:
- 分离数据库:
sp_detach_db;
- 附加数据库:
sp_attach_db
后接表明附加需要完整的路径名
- 修改数据库的名称:
sp_renamedb 'old_name', 'new_name'
网友评论