web安全-mysql基础

一、什么是数据库

  数据库(Database)是按照数据结构来组织、存储和管理数据的仓库, 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。 所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

二、关系型数据库

1、关系型数据库管理系统(RDBMS)

(1)RDBMS的特点

  RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
   1.数据以表格的形式出现
   2.每行为各种记录名称
   3.每列为记录名称所对应的数据域
   4.许多的行和列组成一张表单
   5.若干的表单组成数据库(database)

(2)RDBMS专用术语

  在我们开始学习MySQL 之前,让我们先了解下RDBMS的一些术语:
  数据库 : 数据库是一些关联表的集合。
  数据表 : 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
     : 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
     : 一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  冗余  : 存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  主键  : 主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  外键  : 外键用于关联两个表。
  复合键 : 复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  索引  : 使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  参照完整性 : 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

(3)继续理解数据库管理系统概念

  如图画出的是一个数据库管理系统的数据库包含与权限关系。不同颜色的框代表不同的层级、框的大小和交集表示包含关系和权限。主要就是:不同数据库可以分配不同管理员,同一个管理员也可以分配不同数据库。
在这里插入图片描述
  许多条数据构成了一张表,许多张表构成了一个数据库,许多个数据库构成了一个数据库管理系统。日常生活中会经常把数据库管理系统叫做数据库,在此要区分许多表构成的数据库和数据库管理系统叫成的数据库!!两个都叫数据库但是完全不是一个概念。
  接下来继续理解数据库中的专业术语,如下图的两张表:学号这一列在成绩表中为主键,在花名册这一张表中就为外键。以花名册表为例:索引是指用一列或者多列的值来排序,比如以姓名、种族这两列来排序。这两列组合以后叫复合键
在这里插入图片描述

2、mysql数据库管理系统

  开始学习mysql数据库之前简单的介绍了是数据库是什么,我们目前使用的关系型数据库管理系统(RDBMS)是什么以及它的特点和专业术语。
  mysql为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成, 如图所示的一个表格:
在这里插入图片描述
  表头(header): 每一列的名称;
  (row): 具有相同数据类型的数据的集合;
  (col): 每一行用来描述某条记录的具体信息;
  (value): 行的具体信息, 每个值必须与该列的数据类型相同;
  (key): 键的值在当前列中具有唯一性。

  现在正式进入MySQL的学习。MySQ是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 除此以外:
  MySQL 是开源的,所以你不需要支付额外的费用。
  MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  MySQL 使用标准的SQL数据语言形式。
  MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
  MySQL 对PHP有很好的支持,PHP是目前最流行的Web开发语言。
  MySQL 支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
  MySQL 是可以定制的,采用了GPL协议,你可以修改源码来开发自己的 MySQL 系统

三、mysql概述

1、mysql的基础操作

  本文中命令以及函数效果的演示:mysql版本为:5.7.26;操作系统为:Windows。
在这里插入图片描述

(1)登录数据库

  安装数据库本文不再演示,从登录开始。首先打开命令窗口(cmd),输入mysql,可能显示如下图:
在这里插入图片描述
解决方法:
  方法一:在命令窗口中CD到mysql的安装目录的bin目录底下,输入mysql。
  方法二:在系统环境变量中path中添加mysql的bin目录,然后重新打开命令窗口输入mysql。
  显示如图:
在这里插入图片描述
  输入:quit
  到这里我们的数据库安装是没有问题的,我们开始登录。mysql有一个默认且权限最高的管理员账号,它的账号密码在未修改的情况下默认为:root:root。
  以下为登录命令和示例:
登录命令:

mysql -h 主机名 -u 用户名 -p 
参数说明: 
	-h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略; 
	-u : 登录的用户名; 
	-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。 
	如果我们要登录本机的 MySQL 数据库,只需要输入以下命令即可: 
mysql -u root -p 按回车确认, 如果安装正确且 MySQL 正在运行, 会得到以下响应: Enter password: 
	若密码存在, 输入密码登录, 不存在则直接按回车登录。
	登录成功后你将会看到 Welecome to the MySQL monitor... 的提示语。 
	然后命令提示符会一直以
mysq> 加一个闪烁的光标等待命令的输入, 
输入 exit 或 quit 退出登录。

  忘记密码请转点击:刷新mysqlroot密码
示例:
在这里插入图片描述
  到这里就登录成功了。登陆成功我们可以干嘛呢?在操作之前我们还得了解一些东西,在这里我们主要说明一下增删改查中的,其他的会在接下来再说。

(2)数据库整体结构

  登录成功我们现在处于的位置是如图,在这里我们可以查看这个管理员账号下有哪些数据库,命令如下:

mysql> show databases;
查看当前管理员账号下的所有数据库名


示例展示:
在这里插入图片描述
  此时我们可以看到此账户下的所有数据库,接下来我们进入某个数据库。命令如下:

mysql> use security;
进入名为security的数据库

  此时我们处于的位置如下:
在这里插入图片描述
示例展示:
在这里插入图片描述
  这里我们就可以查看security数据库下有哪些表,命令如下:

mysql> show tables;
查看当前数据库中的所有表名

示例展示:
在这里插入图片描述
  这时候我们可以查看某张表的数据、表的结构等信息。我们主要说明表的结构,查看命令如下:

mysql>desc users; 
查看表名为users的表结构

示例展示:
在这里插入图片描述
  在上图中我们可以看到表(users)中共有三列,分别为:id、username、password;Type中有int、varchar,这是啥呢?
  这就是的数据类型!!!

2、mysql数据类型

  MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

(1)数值类型

  MySQL支持所有标准SQL数值数据类型。 这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION) 。
在这里插入图片描述
在这里插入图片描述

(2)日期/时间类型

  表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。TIMESTAMP类型有专有的自动更新特性。
在这里插入图片描述

(3)字符型

  字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
在这里插入图片描述
注意:
MySQL 5.0 以上的版本:
  一个汉字占多少长度与编码有关:
     UTF-8:一个汉字=3个字节;MySQL在5.5.3之后增加了这个UTF-8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。
     GBK:一个汉字=2个字节
  CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
  BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
  BLOB是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

四、mysql常用命令

1、create语句(创建数据库)

  增删改查我们先解决增、删、部分查的问题,命令如下:

mysql> create database db_name;  -- 创建数据库
mysql> show databases;           -- 查看所有的数据库
mysql> drop database db_name;    -- 删除数据库
mysql> use db_name;              -- 选择数据库
mysql> create table tb_name (字段名 varchar(20), 字段名 char(1));   -- 创建数据表模板
mysql> show tables;              -- 显示数据表
mysql> desc tb_name;            -- 查看表结构
mysql> drop table tb_name;      -- 删除表

示例展示:

mysql> create database db_sql;
Current database: security
-- 创建数据库成功

mysql> use db_sql;
Database changed
Query OK, 1 row affected (2.01 sec)
--选择数据库

mysql> create table tb_user(
    -> id int not null,
    -> user_name varchar(100),
    -> password char(4),
    -> age int(4)
    -> );
Query OK, 0 rows affected (0.14 sec)
--创建表格

2、insert into语句(插入数据)

  insert into 语句用于向表格中插入新的行:

/*第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:*/
mysql> insert into tb_user values (value1,value2,value3,...);
/*第二种形式需要指定列名及被插入的值:*/
mysql> insert into tb_user (column1,column2,column3,...) values (value1,value2,value3,...);

示例:
第一种:
mysql> insert into tb_user values (01,‘aql’,‘qw’,1);
第二种:
mysql> insert into tb_user (id,user_name,password,age)values (02,‘ys’,‘er’,2);
注意:
	在插入数据时若数据类型是字符型,需要英文符‘’将数据放进去。

示例展示:
在这里插入图片描述
  上面的示例展示我们查看表内容时可以看到:select * from tb_user;,这就是我们的查询语句!

3、select语句(查询数据)

  MySQL 数据库使用SQL SELECT语句来查询数据。
  一个基本的select语句可分解成三个部分:查找什么数据(select)、从哪里查找(from)、查找的条件是什么(where)。
  语法格式如下:

  select <目标列表达式列表>
 	[into 新表名]from 表名或视图名
 	[where <条件>]
 	[group by <分组表达式>]
 	[order by <排序表达式>[ASC|DESC]]

  在这里我们只说明最简单的select查询,‘where’、‘group by’、‘order by’会在后面的函数部分详细讲解。

(1)查询指定的列

  a.查询表中所有列
  在select语句指定列的位置上使用*号时,表示查询表的所有列。

模板:
	表格显示:
	mysql> select * from tb_user;
	每条语句显示:
	mysql> select * from tb_user\G

示例展示:
在这里插入图片描述

(2)查询表中指定的列

  查询多列时,列名之间要用逗号隔开。

 模板: 
 	select tb_user.<字符型字段>,<字符型字段> ... from  tb_user;
 示例:
 	mysql> select tb_user.id,username from tb_user;
 --查询tb_user表中的id、username这两列

示例展示:
在这里插入图片描述

(3)给查询的列标题起别名。

  使输出结果更容易被人理解。

模板:
	select <字符型字段> as 列标题1,<字符型字段> as 列标题2 from bt_user;
示例:
mysql> select id as a , username as b from tb_user;

示例展示:
在这里插入图片描述

(4)查询经过计算的列(即表达式的值)

  运算符和我们所熟知的没差:+,-,*,/,%

模板:
	select <字符型字段> + n , <字符型字段> * n from tb_user;
--给某一字段运算求之后的值
	select <字符型字段> +  <字符型字段> as a from tb_user;
--某两列运算之后的值
示例:
	mysql> select id+2,age*2 from tb_user;
--查询id+2,age*2的值
	mysql> select id + age as a from tb_user;
--将id和age求和然后起别名为a,然后查询a

示例展示:
在这里插入图片描述

4、where子句(指定判定任何条件)

  我们知道从 MySQL 表中使用SELECT 语句来读取数据。 如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。
  我们的 tb_user 表中数据有点少,我已经使用 insert into 语句为 tb_user 表添加到10条数据。如图:
在这里插入图片描述

模板:
	SELECT field1, field2,... FROM table_name1, table_name2... [WHERE condition1 [AND [OR]] condition2.....

示例:
	mysql> select * from tb_user where id > 6;
--查询tb_user表中所有id大于6的数据
	mysql> select * from tb_user where id > 6 and age >9;
--查询tb_user表中所有id大于6而且age大于9的数据
	mysql> select * from tb_user where id > 8 or age < 6 ;
--查询tb_user表中所有id大于8或者age小于6的数据

示例展示:
在这里插入图片描述
  and和or所连接的两个判断语句就是‘且’、‘或’的意思,判断语句的操作符如下所示:
在这里插入图片描述
除了这些操作符以外还可以加:between and ; limit 。

示例:
	mysql> select * from tb_user where id between 2 and 5;
--查询表中id在2到5的所有数据
	mysql> select * from tb_user where id between 2 and 5 limit 0,1;
--查询表中id在2到5的所有数据,但是只显示第1行

注:
	limit m,n
--m表示从可以从n偏移的最大数目
--n表示最大可输出数目
--比如limit 5,2; 它会输出6,7

示例展示:
在这里插入图片描述

  为演示查询两张表的数据,我们又创建了新表 tb_email 并添加了数据,新表如图:
在这里插入图片描述

示例:
	mysql> select * from tb_user,tb_email where name = 'lx' and username = 'lx';
--查询tb_user、tb_email表中‘lx’的所有信息

示例展示:
在这里插入图片描述

5、group by(分组)

  GROUP BY 语句根据一个或多个列对结果集进行分组。 在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

模板:
SELECT column_name, function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name;

示例:
	mysql> select age,count(*) from tb_user group by age;
--查询tb_user表中列age的值出现的次数并根据age分组

实例展示:
在这里插入图片描述
  age其它均只出现了一次,只有9出现了两次。

函数功能
avg()求平均值
count()求记录个数,返回int类型整数
max()求最大值
min()求最小值
sum()求和

6、order by(排序)

  order by语句可根据返回结果对其进行排序。

模板:
	order by {排序表达式[ASC|DESC]}[,...n];

示例:
	mysql> select * from tb_user order by  age asc;
--查询tb_user的所有数据,并将返回结果根据age从小到大排序(默认就是正序,asc可省略不写)
	mysql> select * from tb_user order by  age desc;
--查询tb_user的所有数据,并将返回结果根据age从大到小排序(默认是正序,desc不可省略)

示例展示:
在这里插入图片描述

7、alter(增加表的字段)

  增加表的字段,通俗来讲就是对列进行操作。即:增加列、删除列、修改列名等。

模板:
	alter table 表名 add/drop/change/ 字段 其他
示例:
	mysql> alter table tb_user add x1 int default '0';
--新增一个字段x1,类型为int,默认为0
	mysql> alter table tb_user add x2 int ,add x3 char;
--新增两个字段分别为:字段x2,类型int;x3,类型char
	mysql> alter table tb_user drop column x1 ,drop column x2;
--删除两个字段x1、x2
	mysql> alter table tb_user change username name char(100);
--修改原来字段‘username’为‘name’
	mysql> alter table tb_users rename tb_user;
--修改表名tb_users为tb_user

实例展示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、drop、delete(删除)

  在上文中的create、alter中我们见到过drop,它可以删除某个数据库、删除某张表又或者是删除某一列,这是它的功能。
  与drop不同的是:delete只能删除表中的某一行数据,或者是所有数据,将表清空。

模板:
	delete from tb_user where 列名称 = 某值

示例:
	mysql> delete from tb_user where id = 11;
--删除表tb_user中id=11的数据
	mysql> delete from tb_email;
	mysql> delete * from tb_email;
--删除表tb_email的所有数据

示例展示:
在这里插入图片描述
在这里插入图片描述

9、update(更新数据)

  使用一个新的数据将原来的数据覆盖,原来的值将不存在。

模板:
	update tb_name set 列名称 = 新值 where 列名称 = 某值;
示例:
	mysql> update tb_user set name = 'lb' where name = 'dc';
--将表tb_user中name等于dc的地方替换为lb

示例展示:
在这里插入图片描述

10、concat、group_concat(连接字符串)

  concat是将将多个字符串连接成一个字符串,group_concat是将列转为行。

模板:
	concat(str1,str2,str3)
示例:
	mysql> select concat(name,':',password) from tb_user;
--将name,password的每个结果连接成一个字符串查询返回
	mysql> select group_concat(name,':',password) from tb_user;
--将name,password的所有结果连接成一个字符串查询返回
	mysql> select concat((select name from tb_user where id = 1),';',(select name from tb_user where id = 2));
--将id=1,id=2的name查询的结果连接

示例展示:
在这里插入图片描述
在这里插入图片描述

11、union(联合查询)

  联合查询,它用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据,若不想删除重复的语句可使用 union all。

模板:
	select 1 union (all) select 2 ;

示例:
	mysql> select * from tb_user where id < 4 union select * from tb_user where age < 10 ;
--查询所有id小于4或者age小于10的数据,并删除重复项
	mysql> select * from tb_user where id < 4 union all  select * from tb_user where age < 10 ;
----查询所有id小于4或者age小于10的数据,不删除重复项

示例展示:
在这里插入图片描述

12、like(匹配)

  我们知道在 MySQL 中使用 SELECT 命令来读取数据,同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录。 WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 “runoob_author = ‘RUNOOB.COM’”。 但是有时候我们需要获取 runoob_author 字段含有 “COM” 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。如果没有使用百分号 % , LIKE 子句与等号 = 的效果是一样的。

模板:
	selectfromwherelike '匹配内容'
示例:
	mysql> select * from tb_user where password like '%f3';
--匹配表tb_user中字段password以f3结尾的所有行
	mysql> select * from tb_user where password like '%f%';
--匹配表tb_user中字段password中中间含有f的所有行
	mysql> select * from tb_user where password like 'e%';
--匹配表tb_user中字段password以e开头的所有行

示例展示:
在这里插入图片描述
在这里插入图片描述
mysql数据库基本用法到这里就结束啦!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

先剃度再出家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值