欢迎各位大佬找我聊sao,一起探讨技术
这篇文章是为了后面的sql注入写的,因为我昨天想写,但是发现这样似乎有点不妥,于是就睡觉了
主要是我有女朋友,每天得聊聊天~~
这一篇文章主要讲解mysql数据库的增、删、改、查
目录
前言
正文
数据库术语
0x01.数据库的“增”(创建库,表,字段,数据)
1. 首先我们得创建一个库名叫做hello的库(库名随意)
3. 创建表
4.添加字段
5.插入数据
0x02 数据库的"修"
0x03 数据库的“删“
删除表
删除数据
0x04.数据库中的 "查"
1.基本查询 select*from 表;
2.字段查询 select 字段1,字段2 from 表;
3.条件查询 select*from 表 where 条件
4.结果排序
5.结果分页
6.连接查询
7.联合查询
8.子查询
1.服务器:用于接收并处理其它程序发出的请求的程序(软件),或者是安装此类程序的设备(计算机)。
2.客户端:向服务器发出请求的程序(软件),或者是安装此类程序的设备(计算机)。
3.表(table):类似 Excel,由行和列组成的二维表。
4.字段:表的列(垂直方向)。
5.记录:表的行(水平方向)。【注意】关系数据库必须以行为单位进行数据读写。
6.单元格:行列交汇处。【注意】与 Excel 不同,一个单元格只能输入一个数据
这里的交叉处就是单元格
关系: 库 -> 表 -> 字段 -> 记录 -> 记录与字段的交界处就是单元格
进入命令行模式
点击这里命令行模式,进入这里进行操作增、删、改、查
因为我是在虚拟机里面,所以我不慌,用的依然是2016版本的,因为2016版本爆过有后门,如果你们是在宿主机里面
的话,你们就用最新版本的吧
输入数据库的账号密码进入
也就是创建
create database hello charset=utf8;
2. 使用 show databases; 进行查看有几个数据库。然后使用use hello,来进入这个名字叫做hello的数据库
(mysql5.0以上和5.0以下的区别就是有个 information_schema)
show databases;
use hello;
里面没有表,所以这里我创建个表
create table user(username varchar(255) not null PRIMARY KEY) charset utf8;
当然,这里还是建议PRIMARY KEY 大写吧。养成好习惯
上面那段命令就是 create table 表名(字段名 varchar(255) not null primary key) charset=utf8;
就这样,你可以看成固定格式吧
这个时候再show 一下表
发现了我们刚刚创建的一个叫user的表了
这时候可以使用 desc user; 可以查看表的内容格式
比如这个user表里面就一个字段,叫做username
因为上面这个表里就一个username一个字段,有username就肯定有passowrd
所以用下面这个命令,创建一个password字段
alter table user add password varchar(255);
然后我们先用 select*from这个命令,查看数据
发现这个表没有数据
insert into user values('用户名','密码')
这时候查询表就发现有数据了
这就是创建一个库,到一个字段的流程
修改也很简单,就是对数据的修改
看w3c的介绍
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
其实很简单,我演示一下,通过下面这条语句,就可以把young的用户名改成 root
update user set username='root' where username='young';
也可以用来修改密码,例如我们要把young的这个账户密码改成 1314520
update user set password='1314520' where username='root';
这个我就不演示了,跟修改账号一样
drop table 表名;
例如要删除一个user的表,就可以 drop table user; 这样就可以删除了吧
例如我要删除刚刚创建的那个 数据,也就是root的那个账号和密码
因为正常情况下不可能只有一条数据,所以我们要指定一下
delete from 表名 where username='root';
这里我又创建了一个叫admin的账户,方便接下来的操作
1.基本查询
select*from 表;2.字段查询
select 字段1,字段2 from 表;也可以只查询一个账号
select username from user;
3.条件查询
select*from 表 where 条件4.结果排序
select*from 表 order by 字段 asc; 从小到大排序,默认是asc,所以asc可以不用写select*from 表 order by 字段 desc; 从大到小排序
order by password就是以 password这个字段排序,order by username 就是以用户名排序
5.结果分页
select*from 表 limit n,m;
n表示从第几行开始,m表示取第几条然而n是从0开始,学过编程的都知道,0也就是平时中的1
然后与正常的查询语句就可以看出了区别
多种查询可以合并,先后顺序
条件>排序 = 分组>分页(限制)
这个东西理解拗口,可以点击这里,进行查看
表的内容无重复:
select * from 表1 union select * from 表2;
表的内容有重复:
select * from 表1 union all select * from 表2;
注意事项:
两次查询的列数必须一致
这里我在创建一个表,叫做world,方便演示
1)如果字段不一样的话,就无法执行
如果字段一样的话就可以执行
关于这个联合查询我会在后面的sql注入仔细讲解
由于想网上找一篇,结果我发现网上的不详细~~ 于是我还是写吧
子查询的介绍,就是有先执行括号里面的
例如 1+(2*2) = 5
分类:
①标量子查询(返回一个结果)
select*from 表1 where 表1.id=(select id from 表2 where 条件 limit 0,1)
②列子查询(指子查询返回的结果集是n行一列)
select * froim 表1.id in (select id from 表2 where 条件)
③行子查询(指子查询返回的结果集是一行n列)
select*from 表1 where (列1,列2)=(select 列1,列2 from 表2 where 条件 limit 0,1)
④表子查询(指子查询返回的结果集是n行n列 的一个表数据)
select*from 表1 where (列1,列2) in (select 列1,列2 from 表2 where 条件)
一些子查询不怎么常用,所以简单理解操作一下就可以了~~~~