1、MYSQL入门
1.1、什么是数据库
百度百科的介绍:数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。 [2]
数据库是一个按数据结构来存储和管理数据的计算机软件系统。数据库的概念实际包括两层意思:
(1)数据库是一个实体,它是能够合理保管数据的“仓库”,用户在该“仓库”中存放要管理的事务数据,“数据”和“库”两个概念结合成为数据库。
(2)数据库是数据管理的新方法和技术,它能更合适的组织数据、更方便的维护数据、更严密的控制数据和更有效的利用数据。
总而言之 数据库就是用来存放数据的仓库
1.2、数据库的分类
关系数据库(SQL)
关系型数据库,存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。 常见的关系型数据库有Mysql,SqlServer等。在轻量或者小型的应用中,使用不同的关系型数据库对系统的性能影响不大,但是在构建大型应用时,则需要根据应用的业务需求和性能需求,选择合适的关系型数据库。
非关系型数据库(NoSQL)
指的是分布式的、非关系型的、不保证遵循ACID原则的数据存储系统。NoSQL数据库技术与CAP理论、一致性哈希算法有密切关系。所谓CAP理论,简单来说就是一个分布式系统不可能满足可用性、一致性与分区容错性这三个要求,一次性满足两种要求是该系统的上限。而一致性哈希算则指的是NoSQL数据库在应用过程中,为满足工作需求而在通常情况下产生的一种数据算法,该算法能有效解决工作方面的诸多问题但也存在弊端,即工作完成质量会随着节点的变化而产生波动,当节点过多时,相关工作结果就无法那么准确。这一问题使整个系统的工作效率受到影响,导致整个数据库系统的数据乱码与出错率大大提高,甚至会出现数据节点的内容迁移,产生错误的代码信息。但尽管如此,NoSQL数据库技术还是具有非常明显的应用优势,如数据库结构相对简单,在大数据量下的读写性能好;能满足随时存储自定义数据格式需求,非常适用于大数据处理工作。
1.3、数据库管理系统
数据库管理系统是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。数据库管理系统可以依据它所支持的数据库模型来作分类,例如关系式、XML;或依据所支持的计算机类型来作分类,例如服务器群集、移动电话;或依据所用查询语言来作分类,例如SQL、XQuery;或依据性能冲量重点来作分类,例如最大规模、最高运行速度;亦或其他的分类方式。不论使用哪种分类方式,一些DBMS能够跨类别,例如,同时支持多种查询语言。 [1]
数据库管理系统是数据库系统的核心组成部分,主要完成对数据库的操纵与管理功能,实现数据库对象的创建、数据库存储数据的查询、添加、修改与删除操作和数据库的用户管理、权限管理等。
1.4、MySQL简介
MySQL是一个关系型数据库管理系统
前世:瑞典MySQL AB 公司
今生:属于 Oracle 旗下产品
MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件
之一。
开软的数据库软件~
体积小、速度快、总体拥有成本低,招人成本比较低,所有人必须会~
中小型网站、或者大型网站,集群!
官网:https://www.mysql.com
官网下载地址:https://dev.mysql.com/downloads/mysql/
1.5、SQLyog 简介
SQLyog 是一个快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库,由业界著名的Webyog公司出品。
使用SQLyog可以快速直观地让您从世界的任何角落通过网络来维护远端的MySQL数据库。
2、操作数据库
2.1、数据库的基本指令
- 创建数据库
CREATE DATABASE IF NOT EXISTS 小菜一碟 :如果这个数据库不存在 就创建名为“小菜一碟的数据库”
- 删除数据库
DROP DATABASE IF EXISTS 小菜一碟:如果该数据库存在就删除这个数据库
使用数据库
USE `肺炎患者库
2.2、数据库的数据类型
数值型:
tinyint 十分小的数据 1个字节
smallint 较小的数据 2个字节
mediumint 中等大小的数据 3个字节
int 标准的整数 4个字节 常用的 int
bigint 较大的数据 8个字节
flfloat 浮点数 4个字节
double 浮点数 8个字节 (精度问题!)
decimal 字符串形式的浮点数 金融计算的时候,一般是使用decimal
常用的为 int
字符串型 :
char 字符串固定大小的 0~255
varchar 可变字符串 0~65535 常用的变量 String
tinytext 微型文本 2^8 - 1
text 文本串 2^16 -1 保存大文本
常用的 varchar
时间日期型
date YYYY-MM-DD , 日期格式
time HH:mm:ss 时间格式
datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
timestamp 时间戳, 1970.1.1 到现在的毫秒数! 也较为常用!
year 年份表示
2.3、字符串的字段属性
Unsigned :
无符号的整数
声明了该列不能声明为负数
zerofifill:
0填充的
不足的位数,使用0来填充, int(3) , 5 — 005
自增:
通常理解为自增,自动在上一条记录的基础上 + 1(默认)
通常用来设计唯一的主键~ index,必须是整数类型
可以自定义设计主键自增的起始值和步长
非空 NUll not null
假设设置为 not null ,如果不给它赋值,就会报错!
NUll ,如果不填写值,默认就是null!
默认:
设置默认的值!
sex,默认值 为 男,如果不指定该列的值,则会有默认的值![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WHXp2C7H-1581176508409)(C:\Users\磊酱嘤~1\AppData\Local\Temp\1581174068443.png)]
2.4、创建数据库中的表
创建表的格式如下
CREATE TABLE [IF NOT EXISTS] 表名
(
‘字段名’ 列类型 [属性] [索引] [注释],
‘字段名’ 列类型 [属性] [索引] [注释],
…
‘字段名’ 列类型 [属性][索引] [注释]
)[表类型][字符集设置][注释]
示例如下:
CREATE TABLE IF NOT EXISTS 确诊患者表
(
姓名
VARCHAR(20) NOT NULL ,
性别
VARCHAR (8) NOT NULL DEFAULT ‘男’,
年龄
INT(4) NOT NULL ,
确诊日期
DATETIME NOT NULL,
家庭住址
VARCHAR (20) NOT NULL ,
PRIMARY KEY (姓名
)
)ENGINE =INNODB DEFAULT CHARSET = utf8
通过上述一句 我们就能创建一个名叫“确诊患者表”的表格
其中表格有 姓名、性别、年龄、确诊日期、家庭住址、这五个字符段。
其中表的主键设置为姓名,引擎默认为INNODB 默认字符集 为utf8.
2.5、修改和删除表
修改:
– 修改表名 : ALTER TABLE 旧表名 RENAME AS 新表名
实例:ALTER TABLE 确诊患者表 RENAME AS 重症病人表 :把确诊患者表改名为重症病人表
– 增加表的字段 : ALTER TABLE 表名 ADD 字段名 列属性
实例:ALTER TABLE 重症病人表 ADD id INT(4) :给重症病人表加一个 名为id 的int型字段
3、MySQL数据管理
3.1、DML语言
数据库意义:数据存储,数据管理
DML 语言: 数据操作语言
Insert :添加
update 更改
delete 删除
3.2、添加
添加语句 INSERT INTO
作用: 给指定字段添加指定的值
INSERT INTO 重症病人表
(性别
,年龄
,确诊日期
,家庭住址
) VALUES(‘男’,‘21’,‘2020-02-04 20:58:12’,‘北影’)(‘女’,‘22’,‘2020-02-04 20:58:12’,’西安‘)
语法: insert into 表名([字段名1,字段2,字段3])values(‘值1’),(‘值2’),(‘值3’,…)
注意事项:
\1. 字段和字段之间使用 英文逗号 隔开
\2. 字段是可以省略的,但是后面的值必须要要一一对应,不能少
\3. 可以同时插入多条数据,VALUES 后面的值,需要使用,隔开即可 VALUES(),(),…
3.3、修改
修改语句 UPDATE
update 修改谁 (条件) set 原来的值 = 新值
UPDATE 重症病人表
SET 年龄
=90 WHERE 姓名
= ‘丁象’ :(在重症病人表中把名字叫丁象的人的年龄修改成九十岁)
语法:
– UPDATE 表名 set colnum_name = value,[colnum_name = value,…] where [条
件]
3.4、删除
delete 命令
语法: delete from 表名 [where 条件]
TRUNCATE 命令
作用:完全清空一个数据库表,表的结构和索引约束不会变!、
4、DQL查询数据(最重要的)
4.1、DQL
(Data Query LANGUAGE : 数据查询语言)
所有的查询操作都用它 Select
简单的查询,复杂的查询它都能做~
数据库中最核心的语言,最重要的语句
使用频率最高的语句
4.2、查询指定字段
语法: SELECT 字段 FROM 表
从表中查询字段
– 查询全部的学生 SELECT 字段 FROM 表
SELECT * FROM student
– 查询指定字段
SELECT StudentNo
,StudentName
FROM student
去重 :distinct
SELECT DISTINCT 年龄
FROM 重症病人表
: 从重症病人表中查询年龄字段 去除重复年龄的
4.3、where 条件子句
作用:检索数据中 符合条件 的值
逻辑运算符 语法 描述
and && a and b a&&b 逻辑与,两个都为真,结果为真
or || a or b a|| b 逻辑或,其中一个为真,则结果为真
Not ! not a !a 逻辑非, 真为假,假为真!
从表格中查询年龄在21到89岁之间的病人!
SELECT 年龄
,姓名
,性别
FROM重症病人表
WHERE 年龄
>=21 AND 年龄
<=89
从表格中查询名字不叫王虫的病人资料
SELECT 姓名
,年龄
,性别
FROM 重症病人表
WHERE 姓名
!= ‘王虫’
比较运算符
运算符 语法 描述
IS NULL a is null 如果操作符为 NUll, 结果为真
IS NOT NULL a is not null 如果操作符不为 null,结果为真
BETWEEN a between b and c 若a 在 b 和c 之间,则结果为真
Like a like b SQL 匹配,如果a匹配b,则结果为真
In a in (a1,a2,a3….) 假设a在a1,或者a2…. 其中的某一个值中,结果为真
– =================== 模糊查询 ======================
– 查询姓刘的同学
– like结合 %(代表0到任意个字符) _(一个字符)
SELECT StudentNo
,StudentName
FROM student
WHERE StudentName LIKE ‘刘%’
– 查询姓刘的同学,名字后面只有一个字的
SELECT StudentNo
,StudentName
FROM student
WHERE StudentName LIKE ‘刘_’
– 查询姓刘的同学,名字后面只有两个字的
SELECT StudentNo
,StudentName
FROM student
WHERE StudentName LIKE ‘刘__’
– 查询名字中间有嘉字的同学 %嘉%
SELECT StudentNo
,StudentName
FROM student
WHERE StudentName LIKE ‘%嘉%’
– ====== in (具体的一个或者多个值) =====
– 查询 1001,1002,1003号学员
SELECT StudentNo
,StudentName
FROM student
WHERE StudentNo IN (1001,1002,1003);
– 查询在北京的学生
SELECT StudentNo
,StudentName
FROM student
WHERE Address
IN (‘安徽’,‘河南洛阳’);
– ==== null not null====
– 查询地址为空的学生 null ‘’
SELECT StudentNo
,StudentName
FROM student
WHERE address=’’ OR address IS NULL
– 查询有出生日期的同学 不为空
SELECT StudentNo
,StudentName
FROM student
WHERE BornDate
IS NOT NULL
– 查询没有有出生日期的同学 为空
SELECT StudentNo
,StudentName
FROM student
WHERE BornDate
IS NULL
4.4、联表查询
通过两张表中相同的一个字段来查询出其关联的字段
SELECT s.studentNO,studentName,SubjectNo,StudentResult
FROM student AS s
INNER JOIN result AS r
ON s.studentNO = r.studentNO
– Right Join
SELECT s.studentNO,studentName,SubjectNo,StudentResult
FROM student s
RIGHT JOIN result r
ON s.studentNO = r.studentNO
– Left Join
SELECT s.studentNO,studentName,SubjectNo,StudentResult
FROM student s
LEFT JOIN result r
ON s.studentNO = r.studentNO
4.5、分页和排序
排序
: 升序 ASC , 降序DESC
– ORDER BY 通过那个字段排序,怎么排
– 查询的结果根据 成绩降序 排序
SELECT * FROM 重症病人表
ORDER BY 年龄
ASC
按照年龄的升序排列 重症病人表
分页
为什么要分页? :缓解数据库压力,给人的体验更好, 瀑布流
语法: limit 起始值,页面的大小
SELECT * FROM 重症病人表
ORDER BY 年龄
ASC
LIMIT 0,6
从第零页分页查询 页面大小为 6
5、MySQL函数
5.1、常用函数
– ==================== 常用函数 =============================
– 数学运算
SELECT ABS(-8) – 绝对值
SELECT CEILING(9.4) – 向上取整
SELECT FLOOR(9.4) – 向下取整
SELECT RAND() – 返回一个 0~1 之间的随机数
SELECT SIGN(10) – 判断一个数的符号 0-0 负数返回-1,正数返回 1
– 字符串函数
SELECT CHAR_LENGTH(‘即使再小的帆也能远航’) – 字符串长度
SELECT CONCAT(‘我’,‘爱’,‘你们’) – 拼接字符串
SELECT INSERT(‘我爱编程helloworld’,1,2,‘超级热爱’) – 查询,从某个位置开始替换某个长
度
SELECT LOWER(‘KuangShen’) – 小写字母
SELECT UPPER(‘KuangShen’) – 大写字母
SELECT INSTR(‘kuangshen’,‘h’) – 返回第一次出现的子串的索引
SELECT REPLACE(‘狂神说坚持就能成功’,‘坚持’,‘努力’) – 替换出现的指定字符串
SELECT SUBSTR(‘狂神说坚持就能成功’,4,6) – 返回指定的子字符串 (源字符串,截取的位置,截
取的长度)
SELECT REVERSE(‘清晨我上马’) – 反转
– 查询姓 周的同学,名字 邹
SELECT REPLACE(studentname,‘周’,‘邹’) FROM student
WHERE studentname LIKE ‘周%’
– 时间和日期函数 (记住)
SELECT CURRENT_DATE() – 获取当前日期
SELECT CURDATE() – 获取当前日期
SELECT NOW() – 获取当前的时间
SELECT LOCALTIME() – 本地时间
SELECT SYSDATE() – 系统时间
SELECT YEAR(NOW())
SELECT MONTH(NOW())
SELECT DAY(NOW())
SELECT HOUR(NOW())
SELECT MINUTE(NOW())
SELECT SECOND(NOW())
– 系统
SELECT SYSTEM_USER()
SELECT USER()
SELECT VERSION()
5.2、聚合函数
1.COUNT() 计数函数
2.SUM() 求和函数
3.AVG() 求平均值函数
4.MAX() 求最大值函数
5.MIN() 求最小值函数
5.3、数据库级别的MD5加密
主要增强算法复杂度和不可逆性。
MD5 不可逆,具体的值的 md5 是一样的
SELECT CURRENT_DATE() – 获取当前日期
SELECT CURDATE() – 获取当前日期
SELECT NOW() – 获取当前的时间
SELECT LOCALTIME() – 本地时间
SELECT SYSDATE() – 系统时间
SELECT YEAR(NOW())
SELECT MONTH(NOW())
SELECT DAY(NOW())
SELECT HOUR(NOW())
SELECT MINUTE(NOW())
SELECT SECOND(NOW())
– 系统
SELECT SYSTEM_USER()
SELECT USER()
SELECT VERSION()
5.2、聚合函数
1.COUNT() 计数函数
2.SUM() 求和函数
3.AVG() 求平均值函数
4.MAX() 求最大值函数
5.MIN() 求最小值函数
5.3、数据库级别的MD5加密
主要增强算法复杂度和不可逆性。
MD5 不可逆,具体的值的 md5 是一样的
MD5 破解网站的原理,背后有一个字典, MD5加密后的值 ,加密的前值