MySQL数据库学习

1.MySQL:是一个数据库,专门用于存放数据

2.SQL语言:是用来操作数据库的简单命令。(大小写无影响)

(1)进入MySQL数据库

打开小皮开启MySQL5.7.26;

win+R输入cmd,进入命令行界面,输入:

mysql -uroot -proot

(2)创建数据库和表

创建study数据库:

create database IF NOT EXISTS study;

 使用study数据库:

USE study;

创建xsb表(学生表):

create TABLE IF NOT EXISTS xsb (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) NOT NULL,
        gender CHAR(1) CHECK (gender IN ('M', 'F')),
        age INT,
        major VARCHAR(50),
        enrollment_date DATE
);

 (3)向表中添加5条数据

插入5条学生记录:

insert into xsb (name, gender, age, major, enrollment_date) VALUES
('张三', 'M', 20, '计算机科学', '2022-09-01'),
('李四', 'F', 19, '数学', '2023-09-01'),
('王五', 'M', 21, '物理', '2021-09-01'),
('赵六', 'F', 20, '化学', '2022-09-01'),
('钱七', 'M', 22, '生物', '2020-09-01');

 (4)表的“增删改查”

查询操作select

查询所有学生:

select * from xsb;

查询计算机科学专业的学生:

 select * from xsb where major = '计算机科学';

查询年龄大于20的学生:

 select name, age, major from xsb where age > 20;

按年龄升序排列 (order by语句):

select * from xsb ORDER BY age ;

order by语句通常用来做排序,默认按照升序排序,在SQL注入中主要用来判断当前表有多少,配合联合查询(union)来爆数据。

例如http://172.172.3.250/cms/show.php?id=35利用order by查看当前列表有多少列

http://172.172.3.250/cms/show.php?id=35 order by 10  --回显正常

http://172.172.3.250/cms/show.php?id=35 order by 15  --回显正常
http://172.172.3.250/cms/show.php?id=35 order by 16  --回显不正常

则说明当前表有15列。 

union(联合查询):联合多个表进行查询。

利用联合查询把2个表数据合在一个表中:

select * from 表1 union all select *from 表2;

DESCRIBE(DESC):用于显示表的结构信息

 DESC 表名;

 插入操作insert

添加新学生:

insert into xsb (name, gender, age, major, enrollment_date)
VALUES ('孙八', 'M', 19, '历史', '2023-09-01');

 更新操作updat

将李四的专业改为“计算机科学”:

UPDATE xsb SET major = '计算机科学' where name = '李四';

将所有的学生年龄加1:

UPDATE xsb SET age = age + 1;

 删除操作delete

删除名为钱七的学生记录:

delete from xsb where name = '钱七';

 删除年龄大于等于22的学生:

delete from xsb where age >= 22;

3.MySQL系统数据库

SQL注入中最常见利用的系统数据库,经常利用系统数据库配合union查询来获取数据库信息。所有的数据库名、所有的表名、列名以及列名的数据库类型等。

主要关注MySQL系统数据库information_schema,关注系统数据库的表columns(给出了表中的列信息)、表schema(提供了关于数据库的信息)、表tables(给出了关于数据库中的表的信息)

(1)schemata表

这个表存放了数据库信息,最关键的在于schema_name列,这里存放了所有数据库名称,查询这个列所有的值即可拿到所有数据库名:

select distinct schema_name from schemata;

(2)columns表

这个表给出了所有表中的所有列信息,同时也包含了数据库名,所有表名,所有列名值对应的列column_name,所有数据库名值对应列table_schema,所有表名值对应table_name列

columns表查询数据库名

查询columns表中的table_schema列也可以得到所有数据库名:

select distinct table_schema from information_schema.columns;

columns表查询列名

查询当前数据库所有列:

select distinct column_name from information_schema.columns;

columns表查询表名

查询当前所有表名:

select distinct table_name from information_schema.columns;

(3)tables表

这个表给出了所有表的信息,但是同时也包含了数据库名,所有表名,所有数据库名值对应列table_schema,所有表名值对应table_name列。

tables表查询数据库名

查询tables表中的table_schema列也可以得到所有数据库名:

select distinct table_schema from information_schema.tables

tables表查询表名

从tables表里面查询所有表名:

select distinct table_name from information_schema.tables;

4.MySQL函数

经常利用SQL函数来判断数据库的版本,当前用户,当前用户权限以及数据库的安装路径等。

常用MySQL函数如下(前加select):

– system_user()系统用户名
– user()用户名
– current_user() 当前用户名
– session_user() 连接数据库用的用户名
– database()数据库名
– version()mysql数据库版本
– load_file()mysql读取本地文件的函数
– @@datadir 数据库路径
– @@basedir mysql安装路径
– @@version_compile_os 操作系统

数据库注释语法

5.静态页面(html或htm):不需要服务器解析其中脚本,不依赖数据库,在功能上有较大限制。但是安全,不存在SQL注入漏洞。

6.动态页面(asp、aspx、php、jsp等):由相应的脚本引擎来解释执行,根据指令生成静态网页。

——依赖数据库;

——灵活性好,维护简便;

——交互性好,功能强大;

——存在风险,可能存在SQL注入漏洞。

web应用工作原理图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值