最新MySQL入门篇
一、SQL简介
SQL:结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
通常包含三个部分:
- DML
Data Manipulation Language 数据操作语言
用于检索或更新数据库:insert delete update select 增删改查
- DDL
Data Definition Language 数据定义语言
用于定义数据的结构:create drop alter truncate
- DCL
Data Control Language 数据控制语言
用于定义数据库用户的权限:grant revoke commit rollback
二、MySQL简介
1.介绍
MySQL:作为SQL的一个产品,是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,增加了速度并提高了灵活性。
特点:支持多种语言、开源,中小型网站一般都使用MySQL数据库
2.安装MySQL
2.1版本
分平台:Windows、Linux、Mac
分版本:5.x 6.x 7.x 8.x
2.2安装
- 下载安装包
首先在mysql官网下载mysql,根据系统型号选择对应的包下载,这里选择的版本号为5.7.25
下载完之后,查看压缩包内是一个标准的mysql文件,如图

- 配置环境变量
配置系统环境变量,桌面→我的电脑→右键"属性"→高级系统设置→环境变量→系统变量→新建

在path目录下配置

- 手动配置文件
下载的mysql文件中没有默认的配置文件,需要手动添加,一般命名为my.ini,文件内容为:
[Client]
port = 3306
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录,注意\\,不是\
basedir = D:\\software\\mysql-5.7.25-winx64
# 设置mysql数据库的数据的存放目录
datadir = D:\\software\mysql-5.7.25-winx64\\data
# 允许最大连接数
max_connections = 200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server = utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine = INNODB
# 文件读写设置
secure_file_priv=''
[mysql]
# 设置mysql客户端默认字符集
default-character-set = utf8
- 准备安装mysql
管理员身份启动cmd ,命令如下: mysqld -install
- 初始化
mysqld --initialize-insecure
- 启动服务
命令: net start mysql
- 本地服务查看
启动mysql服务后,打开本地服务,看到服务已经启动

- 设置账号
新版本初次安装好不需要密码可以直接进入,但是为了安全和方便还是需要密码的,需要设置,设置步骤参考如下:
1、cmd进入MySQL:mysql -u root -p;然后回车
2、set password=password('root');//以设置root为例,如下图

三、基本操作
1.连接MySQL
语法:
mysql -u 用户名 -p 密码 -h 数据库服务器地址 -D 数据库名
注:安装MySQL以后,默认有一个管理员root
2.查看数据库和表
show databases;-- 查看当前所有数据库
use 数据库名; -- 切换数据库
show tables; -- 查看当前数据库中所有的表
select database();-- 显示当前操作的数据库
select user(); -- 显示当前登录的用户
information_schema、mysql、performance_schema这三个数据库为系统自带,不可动(其中mysql库是系统库,包含MySQL的相关系统信息,也不能修改)
3.导入初始数据
3.1导入数据
以.sql结尾的文件是数据库脚本文件
先连接登录MySQL,然后执行如下命令:
source D:\software\mysql\MySQL入门篇\init01.sql
3.2表结构
desc 表名;-- 查看表的结构
select * from 表名;-- 查看表中的所有数据
ter教师表
| 列名 | 类型 | 含义 |
|---|---|---|
| terno | int 整数 | 教师编号 |
| ename | varchar 字符串 | 教师姓名 |
| job | varchar 字符串 | 工作、职位 |
| mgr | int 整数 | 领导(主任)的编号 |
| hirdate | date 日期 | 入职时间 |
| sal | double 小数 | 薪水、工资 |
| comm | int 整数 | 奖金 |
| trgno | int 整数 | 教研组编号 |
注:varchar :英文含义为可变长字符串
trg教研组表
| 列名 | 类型 | 含义 |
|---|---|---|
| trgno | int 整数 | 教研组编号 |
| dname | varchar 字符串 | 教研组名称 |
| location | varchar 字符串 | 教研组位置 |
salarygd工资等级表
| 列名 | 类型 | 含义 |
|---|---|---|
| grade | int 整数 | 等级编号 |
| losalary | int 整数 | 工资下限 |
| hisalary | int 整数 | 工资上限 |
reward奖金表
| 列名 | 类型 | 含义 |
|---|---|---|
| ename | varchar 字符串 | 教师姓名 |
| job | varchar 字符串 | 工作、职位 |
| sal | double 小数 | 薪水、工资 |
| comm | int 整数 | 奖金 |
四、查询操作
1.简介
1.1语法
select 列名1 别名1,列名2 别名2... from 表名;
示例
select ename from ter;-- 查看某一列
select ename,job,hiredate from ter;-- 查看某几列
select * from ter;-- 查看所有列
select ename 姓名,job 职位,hiredate 入职时间 from ter;-- 查看某几列,加别名
select terno,ename,sal "your salary" from ter;-- 别名中包含空格时,需要使用双引号引起来
1.2用法
- 字符串连接concat()
select concat('编号为',terno,'的教师,姓名为',ename,',职位为',job) from ter;
查询结果:编号为10281的教师,姓名为wanggang,职位为CLEAK...
- 四则运算+ - * %
例:查询教师姓名及年薪
select ename 姓名,sal*12 年薪 from ter;
select ename 姓名,(sal+comm)*12 年薪 from ter;-- 有问题的
select ename 姓名,(sal+ifnull(comm,0))*12 年薪 from ter;-- 使用ifnull()
在MySQL中,NULL与任何值进行运算,结果都为NULL
- 使用distinct去除重复列
例:查询所有的职位
select job from ter;
select distinct job from ter;-- 去除重复列
select distinct ename,job from ter;-- 在去除重复列时只有当所有列都相同时才能去除
2.限定查询
语法:
select 列名1 别名1,列名2 别名2...
from 表名
where 条件;
2.1比较运算符
> < >= <= = !=或<>
例:查询工资大于1500的教师信息
select * from ter where sal>1500;
例:查询教师编号不是10281的教师信息
select * from ter where terno!=10281;
例:查询姓名是wanggang的教师编号、姓名、工资、入职时间
select terno,ename,sal,hiredate from ter where ename='wanggang';
注:字符串需使用引号引起来,同时MySQL中不区分大小写(Oracle区分大小写)
2.2 null或not null
例:查询每月可以获得的奖金的教师信息
select * from ter where comm is null;
select * from ter where comm is not null;
注:判断是否为null时使用的是is,不能使用比较运算符=
2.3 and
例:查询基本工资大于1000,并且可以获取奖金的教师姓名、工资、奖金
select ename,sal,comm from ter where sal>1000 and comm is not null;
2.4 or
例:查询教授语文工作,或工资大于等于2000的教师信息
select * from ter where job='yuwen' or sal>=2000;
2.5 not
例:查询教授非语文工作,并且工资不小于1500的教师编号、姓名、职位、工资、入职时间
select terno,ename,job,sal,hiredate from ter where job!='yuwen' and sal>=1500;
select terno,ename,job,sal,hiredate from ter where not(job='yuwen' and sal<1500);-- 有问题
select terno,ename,job,sal,hiredate from ter where (not job='yuwen') and (not sal<1500);-- 两个都not
2.6 between and
例:查询基本工资大于1500,但小于3000的教师信息
select * from ter where sal>1500 and sal<3000;-- 普通写法
select * from ter where sal between 1500 and 3000;-- between用法
注:between and包含临界值,between 小值 and 大值,顺序不能错
例:查询1998年入职的教师编号、姓名、入职时间、所在教研组编号
select terno,ename,hiredate,trgno from ter where hiredate between '1998-1-1' and '1998-12-31';
2.7 in 或not in
例:查询编号为10281、10282、10283的教师信息
select * from ter where terno=10281 or terno=10282 or terno=10283;-- 普通写法
select * from ter where terno in (10281,10282,10283);-- in写法
例:查询姓名为wanggang、lidehua、liaoming的教师编号、姓名、入职时间
select terno,ename,hiredate from ter where ename in('wanggang','lidehua','liaoming');
select terno,ename,hiredate from ter where ename not in('wanggang','lidehua','liaoming');-- not in 用法
2.8 like
用来进行模糊查询,需要结合通配符一起使用
常用通配符:
- % 可以匹配任意长度字符
- _ 只能匹配单个字符
例:查询教师姓名以Z开头的教师信息
select * from ter where ename like 'Z%';
例:查询教师姓名中包含L的教师信息
select * from ter where ename like '%L%';
例:查询教授语文工作,并且姓名长度为2个字符的教师信息
select * from ter where job='yuwen' and ename like '__';-- 2个下划线用法
例:查询1998年入职的教师编号、姓名、入职时间、所在教研组编号
select terno,ename,hiredate,trgno from ter where hiredate like '1998%';-- like用法
3.排序
3.1语法
语法:
select 列名1 别名1,列名2 别名2...
from 表名
where 条件
order by 排序列1 asc|desc,排序列2 asc|desc....;
默认按升序
3.2示例
例:查询所有教师信息,按工资由低到高排序
select * from ter order by sal asc;-- 排序默认为升序
例:查询教研组30的教师信息,按工资由高到低排序,如果工资相同,则按入职时间由早到晚排序
select * from ter where trgno=30 order by sal desc,hiredate asc;
例:查询教师编号、姓名、年薪,按年薪由高到低排序
select terno,ename,(sal+ifnull(comm,0))*12 income from ter order by income desc;-- income别名
五、多表查询
1.简介
同时从多张表中查询数据,一般来说多张表之间会存在某种关系
2.基本用法
2.1语法
select 列名1 别名1,列名2 别名2...
from 表名1 别名1,表名2 别名2....
where 条件
order by 排序列1 asc|desc,排序列2 asc|desc....;
例:将ter表和trg表进行多表查询(笛卡尔积)
select * from ter,trg;
通过将两张表的关联字段进行比较,去掉笛卡尔积,多表查询时一般都会存在某种关系
select * from ter,trg where ter.trgno=trg.trgno;
2.2示例
例:查询教师编号、教师姓名、工资、所在教研组名称及位置(等值连接)
select terno,ename,sal,dname,loc
from ter e,trg d
where e.trgno=d.trgno;
例:查询教师姓名、工资、入职时间、所在教研组编号、教研组名称
select e.ename,e.sal,e.hiredate,e.trgno,d.dname-- 两个列相同时,需指定表名
from ter e,trg d
where e.trgno=d.trgno;
注:如果多张表中出现同名的列,当查询时需要指定前缀,否则出现ambiguous模糊不清
例:查询教师姓名、教师工资、领导姓名、领导工资(自身连接)
select e.ename 教师姓名,e.sal 教师工资,m.ename 领导姓名,m.sal 领导工资
from ter e,ter m
where e.mgr=m.terno;
例:查询教师姓名、教师工资、教研组名称、领导姓名、领导工资
select e.ename 教师姓名,e.sal 教师工资,d.dname 教研组名称,m.ename 领导姓名,m.sal 领导工资
from ter e,trg d,ter m
where e.trgno=d.trgno and e.mgr=m.terno;
例:查询教师姓名、教师工资、教研组名称、工资所在等级(非等值连接)
select e.ename 教师姓名,e.sal 教师工资,d.dname 教研组名称,s.grade 工资等级
from ter e,trg d,salarygd s
where e.trgno=d.trgno and e.sal between s.losalary and s.hisalary order by 工资等级 desc;
例:查询教师姓名、教师工资、教研组名称、教师工资等级、领导姓名、领导工资、领导工资等级
select e.ename 教师姓名,e.sal 教师工资,d.dname 教研组名称,s.grade 教师工资等级,m.ename 领导姓名,m.sal 领导工资,sm.grade 领导工资等级
from ter e,trg d,salarygd s,ter m,salarygd sm
where e.trgno=d.trgno and e.sal between s.losalary and s.hisalary and m.sal between sm.losalary and sm.hisalary and e.mgr=m.terno;
3.内、外连接
3.1内连接
使用inner join...on
语法:
select 列名1 别名1,列名2 别名2...
from 表名1 别名1 inner join 表名2 别名2 on 多表间的关联关系
where 条件
order by 排序列1 asc|desc,排序列2 asc|desc....;
例:查询教师编号、教师姓名、工资、教研组名称
select e.terno,e.ename,e.sal,d.dname
from ter e inner join trg d on e.trgno=d.trgno;
例:查询工资大于2500的教师姓名、工资、教研组名称、领导姓名
select e.ename,e.sal,d.dname,m.ename
from ter e inner join trg d on e.trgno=d.trgno inner join ter m on e.mgr=m.terno
where e.sal>2500;
select e.ename,e.sal,d.dname,m.ename
from ter e,trg d,ter m
where e.trgno=d.trgno and e.mgr=m.terno and e.sal>2500;
3.2外连接
分类:
- 左外连接 left outer join ...on,也称为左连接left join ....on
以左边的表作为主表,无论如何都会显示主表中的所有数据
查询出的数据行为主表和副表并集
- 右外连接right outer join ...on,也称为右连接right join...on
以右边的表作为主表,无论如何都会显示主表中的所有数据
查询出的数据行为主表和副表并集
语法:
select 列名1 别名1,列名2 别名2...
from 表名1 别名1 left join 表名2 别名2 on 多表间的关联关系
where 条件
order by 排序列1 asc|desc,排序列2 asc|desc....;
例:查询教师姓名、工资、领导姓名、领导工资
select e.ename,e.sal,m.ename,m.sal
from ter e,ter m
where e.mgr=m.terno;-- 有问题的
使用内连接
select e.ename,e.sal,m.ename,m.sal
from ter e inner join ter m on e.mgr=m.terno;-- 有问题的
使用外连接-左连接
例:查询教师姓名、工资、领导姓名、领导工资(有的教师没有领导)
select e.ename,e.sal,m.ename,m.sal
from ter e left join ter m on e.mgr=m.terno;
使用外连接-右连接
select e.ename,e.sal,m.ename,m.sal
from ter m right join ter e on e.mgr=m.terno;
例:查询教研组编号、教研组名称、教研组位置、教研组中教师姓名、工资
select d.trgno,d.dname,d.loc,e.ename,e.sal
from trg d left join ter e on d.trgno=e.trgno
order by d.trgno;
六、更新操作
1.insert
语法:
-- 语法1
insert into 表名 (列名2,列名2....) values (值1,值2....);
-- 语法2:一次性插入多条数据
insert into 表名 (列名1,列名2...) values(值1,值2...),(值3,值4...),(值5,值6....);
-- 语法3(注意)
insert into 表名 set 列名1=值1,列名2=值2,....;
示例:
insert into trg values (70,'数学组','北京');--如果是一次插入表中所有的列,此时可以省略列名(顺序和个数都要一致)
2.delete
语法:
delete from 表名 where 条件;
示例:
delete from trg where trgno=80;
delete from trg where dname='物理组';
-- 删除英语组所有工资高于5000的教师
delete from ter where sal>5000 and trgno=(select trgno from trg where dname='英语组');
注:delete from ter会删除整个表
3.update
语法:
update 表名 set 列名1=值1,列名2=值2...where 条件
示例:
update trg set dname='MARKET' where dname='语文组';
update ter set job='director',sal=8888,comm=666 where ename='wanggang';
最新MySQL入门篇的更多相关文章
- 第二章 MySQL入门篇
第一章 MySQL入门篇 一.MySql简介 简言: 和SQL Server数据库相同,MySQl也是一个关系型数据库管理系统.由瑞典的MySQL AB公司开发,2008年被SUN公司收购,2009年 ...
- MySQL入门篇(七)之Xtrabackup备份与恢复
一.Xtrabackup介绍 MySQL冷备.mysqldump.MySQL热拷贝都无法实现对数据库进行增量备份.在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况 ...
- MySQL入门篇(五)之高可用架构MHA
一.MHA原理 1.简介: MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Faceb ...
- MySQL入门篇(四)之MySQL主从复制
一.MySQL主从复制原理 随机站点访问量的鞥集啊,单台的MySQL服务器压力也不断地增加,此时需要对MySQL进行优化,如果在MySQL优化无明显改善时期,可以使用高可用.主从复制.读写分离.分库分 ...
- MySQL入门篇(六)之mysqldump备份和恢复
一.备份单个数据库 1.备份命令:mysqldump MySQL数据库自带的一个很好用的备份命令.是逻辑备份,导出 的是SQL语句.也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备 ...
- MySQL入门篇(三)之my.cnf配置文件详解【转】
转自:https://www.cnblogs.com/panwenbin-logs/p/8360703.html #*** client options 相关选项 ***# #以下选项会被MySQL客 ...
- MySQL入门篇(一)之MySQL部署
MySQL 二进制免编译安装 (1)下载二进制免编译版本mysql 5.6.35 [root@localhost tools]# wget http://mirrors.sohu.com/mysql/ ...
- MySQL入门篇(二)之常见命令管理
一.SQL结构化查询语言 SQL,英文全称Structured Query Language,中文意思是结构化查询语言.它是一种对关系数据库中的数据进行定义和操作的语言方法,是大多数关系数据库管理系统 ...
- MySQL 入门篇
历史 MySQL 是由 David Axmark.Allan Larsson 和 Michael Widenius 3 个瑞典人于 20 世纪 90 年代开发的一个关系型数据库.MySQL 之名取自创 ...
随机推荐
- vsftpd服务器配置与使用
1.ftp简介 网络文件的共享主流的主要有三种,分别为ftp.nfs.samba ftp用于internet上的控制文件的双向传输 上传和下载的操作 下载 上传 将主机中的内容拷贝到计算机上 将文件从 ...
- linux使用组ID(SGID)共享文件
假如你有这样一个需求,一个小组内很多成员共同研究一个项目,为了这个项目我们需要分配一个具体的目录. 所有成员都拥有该目录的使用权限,可以互相操作成员的文件及内容.而且不允许其他人查看. 现在开始操作: ...
- (六)logback.xml 配置详解
原文链接:https://www.cnblogs.com/taiyonghai/p/9290641.html,https://blog.csdn.net/A615883576/article/deta ...
- SpringBoot整合Hibernate Validator实现参数验证功能
在前后端分离的开发模式中,后端对前端传入的参数的校验成了必不可少的一个环节.但是在多参数的情况下,在controller层加上参数验证,会显得特别臃肿,并且会有许多的重复代码.这里可以引用Hibern ...
- Spring Cloud 系列之 Dubbo RPC 通信
Dubbo 介绍 官网:http://dubbo.apache.org/zh-cn/ Github:https://github.com/apache/dubbo 2018 年 2 月 15 日,阿里 ...
- cb06a_c++_顺序容器的定义
/*cb06a_c++_顺序容器的定义顺序容器:vector,数组,尾端操作数据,快速随机访问list 链表,快速插入数据deque数组,双端-首尾操作数据,方便两端的数据访问 顺序容器适配器:sta ...
- Elasticsearch系列---生产集群的索引管理
概要 索引是我们使用Elasticsearch里最频繁的部分日常的操作都与索引有关,本篇从运维人员的视角,来玩一玩Elasticsearch的索引操作. 基本操作 在运维童鞋的视角里,索引的日常操作除 ...
- struct2面试准备
二 工作流程1.客户端浏览器发出HTTP请求.2.根据web.xml配置,该请求被FilterDispatcher接收3.根据struts.xml配置,找到需要调用的Action类和方法, 并通过Io ...
- MySql索引要注意的8个事情
设计好MySql索引可以让你的数据库查询效率大为提高.设计MySql索引的时候,有一些问题需要值得我们注意的: 1,创建MySql索引 对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简 ...
- TCP协议粘包问题详解
TCP协议粘包问题详解 前言 在本章节中,我们将探讨TCP协议基于流式传输的最大一个问题,即粘包问题.本章主要介绍TCP粘包的原理与其三种解决粘包的方案.并且还会介绍为什么UDP协议不会产生粘包. 基 ...