(本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦)
一、分类
1.MySQL数据库:轻量级数据库,适用于中小型企业,性能好,开源的
2.MSSQL(SQLsever):微软开发,需要安装在NT(Win Ser)系统中,不支持跨平台,适用于中大型企业
3.ACCESS:小巧方便,适用于小型企业和小型项目
4.ORACLE:甲骨文公司开发,收费,适用于大型企业,跨平台,性能高,需要良好的底层硬件支持
二、常用的框架组合
1.MySQL+PHP
2.MSSQL+ASP/ASPX
3.ORACLE+Java
4.ACCESS+ASP
5.JSP(Java服务器页面)+ORACLE
三、数据库模型
1.关系型数据库(结构化数据库) MySQL MSSQL ORACLE DB2等
2.非关系型数据库(非结构化数据库) redis mongodb nosql postgresql Hbase等
四、管理MySQL数据库的方式
1.DOS-MySQL:需要配置MySQL的环境变量mysql -u root -p root
2.phpMyAdmin:基于网页的数据库管理平台
3.MySQL-Front:开源的,基于C/S模式的数据库管理平台
4.Navict:功能强大的数据库管理平台,收费
五、MySQL数据库结构:数据库名 --> 数据表 --> 表头(字段名) --> 数据内容
- 表中有几个字段就会有几列数据
- 一行数据叫记录
六、管理MySQL数据库的常用命令(注意:在DOS_MySQL命令中需要加;)
1.mysql -uroot -p (二进制方式)登录
2.exit 退出数据库
3.show databases; 查看所有数据库
1 +--------------------+ 2 | Database | 3 +--------------------+ 4 | information_schema | 它是5.0以后的MySQL(<5.0)数据库自带的,用来汇总数据库信息 5 | mysql | 存放当前数据库信息,如登录信息、权限设置、安全设置 6 | test | 测试数据库,可删 7 +--------------------+
4.use 数据库名; 使用数据库,表示进入到选择的数据库中
5.show tables; 查看当前数据库中的所有表
6.select * from 数据表名; 查看数据表下所有的数据内容
7.select 字段1,字段2 from 数据表名; 查找数据表中的字段1和字段2中 的数据
8.select version(); 查看当前数据库版本
七、修改密码
1.知道原密码修改:需要进入到数据库中mysql -uroot -p
- 低版本(5.0 5.1 5.5 5.6)修改密码:
1 update mysql.user set password=password(‘新密码’) where user=’root’ (and host=’127.0.0.1’); 2 UPDATE mysql.user SET PASSWORD=PASSWORD('123456Ll.') WHERE USER='root' and HOST='127.0.0.1'; 3 flush privileges; 刷新数据库
- 高版本(5.7 8.0):
1 use mysql; 2 alter user “root”@”localhost” identified by “新密码”; 3 UPDATE mysql.user SET authentication_string 4 =PASSWORD('root'); 5 flush privileges; 刷新数据库
- 注意:查看user里的host的值!!!
3.在MySQL系统之外去修改密码:mysqladmin -u root -p password “新密码”
4.忘记密码修改(Linux):
- 关闭MySQL服务,修改MySQL的配置文件my.ini或my.cnf
- 打开MySQL配置文件,找到[mysqld]在后面添加:skip-grant-tables(跳过密码验证),重启服务
-
-
注:在kali中默认安装了mariadb,配置文件是/etc/mysql/mariadb.conf.d/50-server.cnf
-
-
直接免密码登录MySQL数据库,利用上述方法修改密码:
1 update mysql.user set password=password(‘新密码’) where user=’root’; 2 flush privileges; 刷新数据库
- 修改配置文件,将添加的命令删除或者注释掉,再次重启服务
- 使用新密码登录测试
八、在MySQL数据库中添加账号并授权
1.添加账号:
create user “用户名”@”主机IP” identified by “密码”; 添加账号
- 主机IP:允许哪个主机登录,(localhost 本机可登录 % 任意主机可登录 192.168.1.1表示该IP上的用户可以登录)
2.添加权限:
grent 权限 on 库名.表名 to “用户名”@”主机IP”
- 权限:insert 增 drop 删 update 改 select 查 all所有
- 库名.表名:表示能够操作的数据库和表,*.* 表示所有的数据库以及所有的表
grant all on *.* to “icq”@”192.123.1.1”;
- 注意:配置文件中的bingd 127.0.0.1需要注释掉,或者根据需求进行修改
九、数据库外联(允许远程连接)
1 update user set host=”%” where user=”root” and host=”localhost”; 2 flush privileges;
十、MySQL常用的函数
1.version(); select @@version; 查看版本号
select version();
2.select user(); 查看当前账号
3.select @@hostname; 查看当前用户名
4.select @@tmpdir; 查看临时目录
5.select @@basedir; 数据库服务所在位置
6.select @@datadir; 数据存放的位置
- 数据库文件格式
- .opt 存放编码方式
- .frm 存储表结构(表头)
- .MYD 存储数据,数据内容(可使用WinHex查看)
- .MYI 存储当前数据的配置信息和索引信息
7.mid(被截取的字符串,开始索引,截取长度); 截取字符串
SELECT mid('pentest',1,3);
8.ord(); 显示字符ASCII码(首字母)
SELECT ord("A");
9.concat(); 拼接字符串
SELECT concat("1","shjsdhk","1234321");
10.concat_ws(分隔符,多个参数); 使用分隔符拼接字符串
1 SELECT concat_ws("~","1","asa","12das"); 2 SELECT concat_ws(0x7c,"1","asa","12das"); | 管道符的16进制 0x7c
11.group_concat(); 分组并拼接
12.sleep(1); 让数据库等待1秒钟
SELECT sleep(10);
十一、SQL语法:
1.创建数据库
1 create database 数据库名; 在交互模式下,即命令行模式 2 mysqladmin -uroot -proot create 数据库名; 在DOS命令窗口使用,需要使用mysqladmin.exe程序
2.删除数据库
1 drop database 数据库名; 2 mysqladmin -uroot -proot drop 数据库名;
3. 数据库中数据类型
- int 整型
- bigint 大整型
- float 浮点型,单精度浮点型 0.2
- date 日期
- time 时间
- char 单个字符
- varchar 变长字符
- text 文本
- timestamp 时间戳
- double 双精度浮点型 3.00
- bit 比特(用01表示)
- tinyint 0或者tinyint 1 布尔
4.创建表:use 表;
create table 表名(字段名1 数据类型 primary key ,字段名2 数据类型,......)设置编码;
-
表中需要一个大哥作为代表,该代表是唯一的,能够表示某个人、事物,将该大哥称为主键
-
通过主键能够确定一个记录,PRIMARY KEY ( `id` ) 放在最后
- 注意:字段名不需要加单双引号,数据类型中根据需求说明长度
- auto_increment 表示自增
1 id INT NOT NULL AUTO_INCREMENT, 2 AUTO_INCREMENT=22 设置数字的意思是想要让这条语句在增长的时候,从22开始自增
- not null 表示不允许为空
title VARCHAR(100) NOT NULL,
- 设置编码:default charset=utf8;
- ENGINE=InnoDB:如果不写也可,是默认的,在这里写上是因为可以很清楚的看到这个建表语句用了哪些,而且在创建表的时候,写上也是一个很好的习惯
5.删除表
drop table 表名; 删除需要慎用
6.查看表中字段
1 show create table 表名; 2 或dsec 表名;
7.后续添加主键
alter table 表名 add primary key(字段); 注意主键的字段不为空
8.往表中插入数据
insert into 表名(字段名1,字段名2,......) value(值1,值2,......);
- 注意:数据类型为字符串的,在添加数据时需要加上””,自增的主键可以不用插入数据
9.在表中查询数据
1 select 字段名 from 表名; 2 select 字段名 from 表名 where 字段名=指定的值; 一个条件 3 select 字段名 from 表名 where 字段名1=值1 and或or 字段名2=值2; 多条件
10.限制查询
1 limit a,b; a和b均为数字,a表示记录的索引(索引从0开始),b表示记录的长度 2 select * from 表名 limit 1,2; 3 limit a; 从0开始选择a个记录 4 select * from 表名 limit 1;
11.更新数据
1 update 表名 set 字段1=值1,字段2=值2; 更改所有的字段,将字段1下的所有值都改为值1 2 update 表名 set 字段1=值1,字段2=值2 where 条件;
12.删除表中数据
delete from 表名 where 条件; 慎用!!!
13.like子句:模糊查询
- 通配符:% 匹配任意字符 _ 匹配单个字符
select * from 表名 where name like “字段匹配符”;
14.Union联合查询
- 语法:查询语句1 union 查询语句2 将查询出来的结果放在一张表中显示,查询出来的字段个数必须一致!
1 select 1,2,3; 2 select 1 as a,2 as b,3 as c; 把1放在a字段中 3 select * from 表名; 这个数据表中也只有3个字段 4 selet * from 表名 union select 1 as a,2 as b,3 as c;
- 可以根据查询语句2 的字段数量判断查询语句1的字段数量
select * from mysql.user union select 1,2,3,......,45;
15.Order by
- 语法:order by 条件 根据给定的条件排序,默认情况下表的排序时升序
select * from 表名 order by 字段 [asc或desc]; 根据执行的字段名去排序
- asc升序,desc降序
- 如果数字超过了字段的列数,则会报错,可以根据数字来推断表中的字段数
select * from 表名 order by 数字; 表示对第n列数据进行排序
16.删除字段
alter table 表名 drop 字段名; 删除指定表下的字段名
17.添加字段:
alter table 表名 add 字段名 字段类型;
18.修改表名:
alter table 原表名 rename to 新表名;
19.去重查询:
select distinct 字段 from 表名;
20.注释符:#和--
十二、数据的导入和导出
1.导入数据:
- 方法1:mysql -uroot -proot <需要导入的数据库文件(data.sql)注意:data.sql需要自动创建数据库,并且需要选择该数据库
- 如果data.sql不会自动创建数据库,手动创建数据库
1 mysql -uroot -proot 2 create databases 数据库名; 3 use 数据库名; 4 source 数据库文件;
- 方法2:使用phpmyadmin等平台导入数据,如果导入的文件还是不能自动创建数据库,则需要手动创建
- 方法3:首先需要创建数据库,创建数据表名(表名和导入数据库文件名一致),该表的字段名要和导入的数据的字段保持一致
1 mysqlimport -uroot -proot --local 被导入的数据库名 需要导入的数据库文件 2 --local 表示本地任意位置均可导入数据,加上-L即可
2.导出数据
- 方法1:借助平台(phpMyAdmin、mysql-fornt、navicat等等)
- 方法2:
1 mysqldump -uroot -proot 要导出的数据库名 > 路径./data.sql 导出数据库 2 mysqldump -uroot -proot 数据库名 要导出的数据表名 > 路径 导出数据表
- 方法3:
1 select 字段 from 表名 into outfile “文件名”; 将数据库中的字段内容导入到文件中 2 select * from mysql.user into outfile “./123.txt”; 3 ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
-
- 首次从数据库中导出文件,数据库会运行--secure-file-priv安全机制,会限制导入导出文件。查看该安全项的值:
1 show global variables like ‘%secure_file_priv%’; 2 secure_file_priv为NULL,表示MySQL限制导入导出 3 secure_file_priv没有值,表示MySQL不限制导入导出 4 secure_file_priv值为目录,表示MySQL只能在目录下执行导入导出,其他目录不允许
-
- 修改该安全选项:
- 临时方法:
- 修改该安全选项:
1 set global secure_file_priv=’’; 2 ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable 表示不能通过SQL语句更改
-
-
- 长久方法:修改配置文件,在配置文件中找到[mysqld],在后面添加secure_file_priv=’’,保存退出,重启服务
-