最新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 之名取自创 ...
随机推荐
- Activiti6 学习日志(一):整合 SpringBoot2.1.3
本章节记录整合过程和部分问题,目前整合并不完美后续会继续更新... 文档链接: 5.2.1 activiti用户手册 activiti用户手册 activiti6 API 技术栈: springboo ...
- 第m大的身份证号码(局部排序代全局、结构体排序)
第m大的身份证号码(点击) 时间限制: 1 Sec 内存限制: 128 MB ...
- String 类中常用方法
序号 方法定义 类型 描述 1 public String(char[] value) 构造 直接将一个字符数组变为一个字符串 2 public String(char[] value,int off ...
- 如何用Python从海量文本抽取主题?
摘自https://www.jianshu.com/p/fdde9fc03f94 你在工作.学习中是否曾因信息过载叫苦不迭?有一种方法能够替你读海量文章,并将不同的主题和对应的关键词抽取出来,让你谈笑 ...
- SQL常用取整函数
1.Round(column_name,decimals):用于把数值字段舍入为指定的小数位数 2.Floor(column_name): 向下取整,主要用于获得小于等于数值表达式的最大整数. 3.C ...
- 微信小程序之后端处理
首先,来看一下后端的关系图: 这边主要介绍PHP的一些基础语法等等,关于将php代码部署到SAE新浪云,大家可以参考这个链接:https://www.cnblogs.com/dhx96/p/65617 ...
- 定时任务Cron
Linux系统中的定时任务cron,一个很实际很有效很简单的一个工作,在日常的生产环境中,会被广泛使用的一个组件.通过设置时间.执行的脚本等内容,能够让系统自动的执行相关任务,很是方便. cron定时 ...
- Module Error (from ./node_modules/eslint-loader/index.js):解决办法
vue启动项目报如下错误: Failed to compile. ./src/components/Vcontent.vue Module Error (from ./node_modules/esl ...
- JavaWeb网上图书商城完整项目--day02-26.查询所有分类功能之DAO层实现
我们按照表示的设计 以及: package com.weiyuan.goods.category.domain; import java.util.List; public class Categor ...
- 【Model Log】模型评估指标可视化,自动画Loss、Accuracy曲线图工具,无需人工参与!
1. Model Log 介绍 Model Log 是一款基于 Python3 的轻量级机器学习(Machine Learning).深度学习(Deep Learning)模型训练评估指标可视化工具, ...