day_41_mysql
学习目标
01. 数据库的介绍
好处:
持久化存储
读写速度极高
保证数据的有效性
对程序支持性非常好,容易扩展
数据库就是一个由一批分门别类的数据构成的有序集合,这个集合通常被保存为一个或多个彼此相关的文件,
我们可以理解为,数据库就是一种特殊的文件,其中存储着需要的数据。
02. 数据库的类型
关系型数据库(RDBMS)
RDBMS
即关系数据库管理系统(Relational Database Management System)
oracle、mysql、ms sql server、sqlite
关系型数据库:数据库里面的数据全部存在数据表中,而这些表在存储的过程中,各自之间有内在联系。因为这种联系,我们称这样的数据库叫"关系型数据库"
优点:
容易理解,二维表结构
使用方便,通用的SQL语言使得操作关系型数据库非常方便,便于复杂的查询
支持事务等复杂的数据操作功能
非关系型数据库(NoSQL)
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。
MongoDB,Redis
优点:
数据之间无关系,容扩展
结构简单,具有非常高的读写性能,在大数据量下,同样表现优秀
无需事先建立字段,随时可以存储自定义的数据格式
02.1 关系型数据库核心元素
数据行(记录)
数据列(字段)
数据表(数据行的集合)
数据库(数据表的集合)
例: 一个学生表,(表、字段、列、行)
学号 | 姓名 | 性别 |
---|---|---|
1 | 小明 | 男 |
2 | 小红 | 女 |
3 | 大白 | 男 |
4 | 小白 | 男 |
03. MySQL的基本介绍
MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL 软件采用了双授权政策(本词条“授权政策”),它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般网站软件的开发都选择 MySQL 作为网站数据库。
MySQL是一种客户端/服务器端(C/S)的软件,我们要学会如何如何安装服务器端的MySQL,还需要学会如何利用客户端工具操作MySQL数据,常用的客服端工具有: 命令行、pycharm-database、Navicat等
下载:https://dev.mysql.com/downloads/windows
services.msc
04. 常用入门的操作命令
- mysql -uroot -p密码 命令行链接 mysql
status; 查看数据状态信息
exit、quit 退出数据库连接
show databases; 显示所有的数据库
create database data charset=utf8; 新创建一个数据库
use 数据库名; 选择要编辑的数据库,例如是data,则语句就是 use data;
select database(); 查看当前在哪个数据库下
show tables; 展示数据库下所有的表
\c 当你输入有误,想重打的时候可以试试加个 \c 取消
source 数据库文件名.sql; 导入数据库到mysql中
可以把别人事先创建好的数据库文件导入到当前电脑的mysql中
desc `表名`; 查看表结构信息
键盘的上下键,可以快速滚回我们之前输入的代码。
SQL
SQL,指结构化查询语言,全称是 Structured Query Language,是一种 ANSI(American NationalStandards Institute 美国国家标准化组织)标准的计算机语言,可以让我们可以处理数据库。
SQL语句主要分为:
DQL:数据查询语言,用于对数据进行查询,如select
DML:数据操作语言,对数据进行增加、修改、删除,如insert、udpate、delete
DDL:数据定义语言,进行数据库、表的管理等,如create、drop
TPL:事务处理语言,对事务进行处理,包括begin transaction、commit、rollback
DCL:数据控制语言,进行授权与权限回收,如grant、revoke
CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor
基本书写规则
- 1、每一条语句都要以 " ; " 英文分号结尾
2、SQL语句不区分关键字的大小写,但是建议属于SQL语句的语法规则用大写,自建的表、字段小写。
3、字符串跟日期类型的值都要以 单引号括起来
4、单词之间需要使用半角的空格隔开
5、我们可以通过使用 `` 反引号来括起表名跟字段名,避免跟关键字冲突,但是应该数据库设计就已经避免这个问题了。
DQL数据查询语言
查询 SELECT
select 字段1,字段2 from 表名 从指定表中查询所有数据的字段1和字段2信息
按条件查询数据
select 字段1,字段2 from 表名 WHERE 字段名 = 字段值;
- 1、查找学生表的姓名跟年龄
SELECT name,age FROM student;
查找课程表中的id,课程名称和教室编号
select id,course,address from course;
2、查找学生表所有的信息
SELET * FROM student;
3、为字段名设置别名,简化字段名
SELECT name AS n,age AS a FROM student;
4、使用条件查询想要的数据,查学号为14的学生姓名
SELECT name FROM student WHERE id = 14;
使用条件查询名字叫'吴杰'的学生姓名和年龄
SELECT name,age FROM student WHERE name='吴杰';
注意:应该根据你的实际需求查询所要的字段值,而不是使用 * ,使用这个效率很低。
逻辑运算符
运算符 | 含义 |
---|---|
AND | 并列,如果组合的条件都是TRUE,返回TRUE |
OR | 或者,如果组合的条件其一是TRUE,返回TRUE |
NOT | 取反,如果条件是FALSE,返回TRUE |
- 1、查询年龄大于10岁小于18岁的学生
SELECT * FROM student WHERE age<18 ADN age>10;
查询年龄小于18岁 或者性别是女的学生
select name,age,description as des from student where age<18 or sex=2;
查询年龄在18-22之间的女生信息(班级、姓名、年龄和性别)
select class,name,age,sex from student where age>=18 and age<=22 and sex=2;
查询309班的所有男生信息(姓名、年龄、个性签名)
select name,age,description from student where class="309" and sex=1;
查询306班、305班、304班的学生信息(姓名、年龄、个性签名)
select name,age,description from student where class="304" or class="305" or class="306";
范围运算符 (BETWEEN...AND... )
判断字段值是否在指定区间内
- 1、 查询年龄在18-22之间的学生(班级、姓名、年龄和性别)
SELECT class,name,age,sex FROM student WHERE age BETWEEN 18 AND 22;
2、 当然,反过来查的话,查询18-22岁以外的学生
SELECT class,name,age,sex FROM student WHERE NOT age BETWEEN 18 AND 22;
比较运算符
运算符 | 含义 |
---|---|
= | 等于,判断字段名的值是否等于指定值 |
<>、!= | 不等于 |
<= | 小于或等于 |
>= | 大于或等于 |
< | 小于 |
> | 大于 |
- 1、查询小于等于19岁的学生
SELECT * FROM student WHERE age<=18;
IN运算符(多条件值查询)
IN 运算符 允许在 WHERE 子句中规定多个值。
- 1、查询304,305和306班级的学生信息
select name,class,age from student where class IN (304,305,306)
2、查询学号为 1、3、5的学生信息
SELECT * FROM student WHERE id IN(1,3,5);
模糊查询
LIKE 运算符 允许我们针对只知道部分字符串的情况下,查找所有的字符串,进行模糊查找
% 匹配任意多个字符 陈% _ 匹配任意一个字符 陈__
- 1、查询姓陈的学生
SELECT * FROM student WHERE name LIKE '陈%';
查找名字以风字结尾的学生
select * from student WHERE name LIKE '%风';
2、查询姓名中带林的学生
select * from student where name LIKE '%林%';- 查询姓名是2个文字组成的学生
select * from student where name LIKE '__';
聚合运算
AVG 返回指定列的平均值COUNT 返回指定列中非NULL值的个数MIN 返回指定列的最小值MAX 返回指定列的最大值SUM 返回指定列的所有值之和
聚合运算都是写在select 后面
SELECT COUNT("字段") FROM 表名 WHERE 条件;
- 1、查询305班所有的学生数量
select COUNT(id) from student where class="305";
# 上面查询结果中,字段会变成COUNT('id'),可以使用as别名来处理一下。
select COUNT(id) as c from student where class="305";
2、查询所有学生中最小的年龄
SELECT MIN(age) FROM student;
3、查询302班中所有学生的平均年龄。
select AVG(age) from student where class="302";
分组查询
GROUP BY子句, 可以对表进行分组,常常与聚合函数一起使用
GROUP BY 字段名,当前这个字段名在表中出现多少个不同的字段值,那么查询结果就会有多少个组。
- 1、查询表中有多少男女学生
SELECT sex,count(sex) FROM student GROUP BY sex;
2、查询学生表中各个年龄段的学生数量
SELECT age,COUNT(name) FROM student GROUP BY age;
3、查询各个班级的人数各是多少
select class,COUNT(id) FROM student GROUP BY class;
结果排序
ORDER BY 子句,对查询结果排序
ASC表示升序(从小到大),为默认值,
DESC为降序(从大到小)
- 1、对309班级的学生的年龄进行倒叙排序
select name,age,sex from student where class=309 order by age desc;
补充:
结果排序可以多个字段排序
例如:对学生的年龄进行降序排列。
- select id,name,sex from student order by age desc,id asc limit 10;
- # 上面就有2个排序的字段,
# 系统会优先针对 age 进行降序排列,
# 当age的值一致的时候,系统会按照id进行升序排列。
结果限制
LIMIT 子句,可以对查询出的结果进行数量限制,往往我们不想一次取出所有的数据
limit有两个使用方式:
limit后面跟着 一个参数 表示限制结果的数量
limit后面跟诊 两个参数,第一个参数表示取数据的开始下标[在表中下标从0开始],第二个参数表示限制结果的数量。
- SELECT * FROM student LIMIT 3; // 等同于 limit 0,3 # 下标 0,1,2
SELECT * FROM student LIMIT 3,3; // 等同于 limit 3,3 # 下标 3,4,5
SELECT * FROM student LIMIT 6,3; // 等同于 limit 6,3 # 下标 6,7,8
- 1、查询出年级最大的10个学生
select * from student order by age desc,id asc limit 10;
2、从所有学生中,查询年级最大的下标从10-19的学生出来。
select id,name,age from student order by age desc,id asc limit 10,10;
limit 主要用于在项目开发中的分页功能实现。
DML
添加数据(INSERT )
添加一名记录
- INSERT INTO 表名 (字段1,字段2,字段3,....) VALUES (字段值1,字段值2,字段值3,....);
# 也可以省略不写字段名,但是数据的数据项必须和表结构的字段数量保持一致,查询表结构使用 desc 表名;
INSERT INTO 表名 VALUES (字段值1,字段值2,字段值3,....);
- insert into student (id,name,sex,class,age,description) values (101,'刘德华',1,508,17,'给我一杯忘情水~');
# 上面的字段,如果是全部字段,那么字段这一块内容可以省略不写。
# 例如,我们再次添加一个学生,如果省略了字段名,那么填写数据的数据项必须和表结构的字段数量保持一致。
insert into student values (102,'张学友',1,508,17,'爱就像头饿狼~',0,0,0);
添加多名学生
INSERT INTO student(name,sex,class,age,description) VALUES ('周润发',1,508,17,'5个A~'),('周杰伦',1,508,17,'给我一首歌的时间~');
注: 自动增长跟有默认值的字段可以不写。
更新数据(UPDATE)
- UPDATE 表名 SET 字段1=字段值1,字段2=字段值2 WHERE 条件
# 更新操作会影响数据的不可逆操作,所以更新的时候,一定要谨慎,添加条件。如果没有条件,
# 或者条件的判断结果一直是True,则整个表所有的记录都会被更新。
- 修改学生的姓名,年龄
UPDATE student set age=8 where id=104;
删除数据(DELETE)
- DELETE FROM 表名 WHERE 条件
- 删除一个学生
DELETE FROM student WHERE id=104;
注: 修改跟删除数据都要记得加条件。
DELETE FROM table 删除整个表的内容[没有条件则表示删除整个表所有数据]
DDL
- DROP TBALE 表名 删除整个表
删除学生表
DROP TABLE student;
删除学生表的数据
DELETE FROM student;
TRUNCATE table 清空/重置表[表还在数据被清空了]
create database 数据库名 charset=utf8; 创建数据库
drop database 数据库名 删除数据库[一定要谨慎操作]
day_41_mysql的更多相关文章
随机推荐
- Java RSA 公钥加密私钥解密
package com.lee.utils; import java.io.DataInputStream; import java.io.File; import java.io.FileInput ...
- webservice生成客户端代码
wsimport -d C:\Other\WSDL_JAVA_Code -keep -verbose -Xauthfile C:\Other\.txt http://XXXXXX
- OpenCV自带dnn的Example研究(1)— classification
这个博客系列,简单来说,今天我们就是要研究 https://docs.opencv.org/master/examples.html下的 6个文件,看看在最新的OpenCV中,它们是如何发挥作用的. ...
- bzoj 4770 图样 - 概率与期望 - 动态规划
题目传送门 传送门I 传送门II 题目大意 有一个$n$个点的完全图,每个点的权值是$[0, 2^{m})$中的随机整数,两点间的边的权值是两点点权的异或和,问它的最小异或生成树的边权和的期望. 考虑 ...
- caffe特征层可视化
#参考1:https://blog.csdn.net/sushiqian/article/details/78614133#参考2:https://blog.csdn.net/thy_2014/art ...
- 完整的多文件上传实例(java版)
昨天刚刚做了一个文件列表上传,后端很简单,用 MultipartFile[] files 获取文件流数组,后端就当IO流操作就可以,似乎好像没啥好写的,但是!!!!!前端是真的糙单.要是自己写一个前端 ...
- linux下的缓存机制及清理buffer/cache/swap的方法梳理 (转)
一.缓存机制介绍 在Linux系统中,为了提高文件系统性能,内核利用一部分物理内存分配出缓冲区,用于缓存系统操作和数据文件,当内核收到读写的请求时,内核先去缓存区找是否有请求的数据,有就直接返回,如果 ...
- 【做题】UOJ450 - 复读机——单位根反演
原文链接 https://www.cnblogs.com/cly-none/p/UOJ450.html 题意:请自行阅读. 考虑用生成函数来表示答案.因为秒之间是有序的,所以这应当是个指数生成函数.故 ...
- showdoc 自动脚本安装
========================== showdoc 简介==========================在线文档管理系统很多, 比如阿里的语雀.腾讯的 TAPD 平台也包括文档管 ...
- Linux中的wheel用户组是什么?
在Linux中wheel组就类似于一个管理员的组. 通常在Linux下,即使我们有系统管理员root的权限,也不推荐用root用户登录.一般情况下用普通用户登录就可以了,在需要root权限执行一些操作 ...