mysql基础学习笔记

Posted 十九万里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql基础学习笔记相关的知识,希望对你有一定的参考价值。

本文主要分为四部分来写;是学习mysql数据库基础的学习笔记
1、MYSQL基础(1到6)
2、性能优化(7-11)
3、MYSQL锁机制(12-14)
4、主从复制
这里前面几章主要是mysql的基础 实际操作我基础写完之后单独写一篇

一、 MYSQL基础

1、相关概念

数据库常见的概念:

DB:数据库,存储数据的容器
DBMS:数据库管理系统,又称为数据库软件或者数据库产品用于创建或者查询
SQL:结构化查询语言,用于和数据库通信的语言 不是某个数据库特有的,所有主流的数据库语言都能使用

数据库存储数据的特点:

1、数据存放到表中 然后表再放到库中
2、一个库可以有多张表 每张表具有唯一的表名用来标识自己
3、表中有一个或者多个列 列有称为字段 相当于js中的属性
4、表中的每一行数据,相当于js中的对象

win10下安装mysql已经有很多大佬写了,这里我就不单独写
windows下安装mysql

2配置文件

服务端的端口号,数据库文件的存储位置 使用编码方式,数据库的存储引擎等都可以在这里进行配置 http默认端口80 https默认443
最简配置
1、首先在mysql的安装目录下穿件一个叫my.ini的文件,如果有可以直接进行更改
编辑内容:(这里是最简的配置)

[client]  -----客户端
      port=5719 ----端口
      default-character-set=utf8 ----客户端编码

      [mysqld] ----服务端
      basedir="MySQL的安装目录" ----指定MySQL的安装目录
      datadir=" MySQL的安装目录\\data" ----指定MySQL存放数据的目录
      port=5719 ----设置服务器端的端口
      character-set-server=utf8 ----设置服务器端编码

注:更改配置文件 之后 需要重启数据库服务才能生效

linux下:
sudo service mysql restart;
window下:
net stop mysql(停止)
net start mysql(启动)

3、常用命令

mysql启动与停止:

方法一:window服务中找到mysql并启动
方法二:以管理员的身份打开cmd 然后:net stop mysql(停止)
net start mysql(启动)

登录与退出:

登录 格式: mysql -h localhost -P 3306 -u root -p
-h是ip 大写的P是端口号 小写的P是密码 加不加空格都行
如果连接本机 ip和端口号可以省略
退出:exit 或者 Ctrl+c

常见命令:

1创建数据库: create database <数据库名> mysql> create database studentdb;
2显示所有数据库: show databases mysql> show databases;
3删除所有数据: drop database studentdb;
4连接数据库: use<数据库名> mysql > use studentdb
5查看当前使用的数据库: mysql > select database();
6当前数据库包含的信息: mysql> show tables

mysql常用命令大全

4 语法规范

1 不区分大小写 但建议关键字大写 表名 列名小写
2 每条命令使用分号结尾
3每条命令可以根据需要缩进或者换行
4 单行注释: #注释文字
单行注释:-- 注释文字 ,注意, 这里需要加空格
多行注释:/* 注释文字 */

5 sql语言分类

DQL(Data Query Language):数据查询语言 select
DML(Data Manipulate Language):数据操作语言 insert 、update、delete
DDL(Data Define Languge):数据定义语言create、drop、alter
TCL(Transaction Control Language):事务控制语言 commit、rollback

二、DQL 数据查询语言

1、查询基础

语法:

select查询列表from表名
select就类似于:console.log()

特点:

1查询列表可以是字段 常量 表达式 函数 可以是一个或者多个
2查询结果是一个虚拟列表

select关键字:

1 查询单个字段: SELECT ·first_name· FROM employees; 注:字段名的外边是着重号 键盘1旁边的键 不是单引号 加着重号意识这个是个字段
2查询多个字段 查询所有字段
3 查询常量值: SELECT 100; SELECT ‘john
4 查询表达式: SELECT 100%98;
5 查询函数: SELECT VERSION();

别名:

用途是便于理解 当多表查询的时候 如果要查询的字段有重名的情况 可以使用别名区分开来
方法1:使用as
SELECT 100%98 AS 结果;
SELECT last_name AS 姓,first_name AS 名 FROM employees;
方法2:使用空格:
SELECT last_name 姓,first_name 名 FROM employees;

去重:

查询员工表中涉及到的所有部门编号:SELECT DISTINCT department_id FROM employees;

+号:

js中的+号: 运算符和连接字符串
mysql中的+号:只有一个功能运算符 不能拼接字符串
规则:1厉害操作数都是数值型 则做加法运算
2只要其中一方为字符型 先把字符型转化为数字型 在加、
3如果转化失败 则字符型数值转换称为0
只要其中一方为null 则结果肯定为null

concat函数:拼接字符

语法:select concat(字符1 ,字符2, 字符3,…);
SELECT CONCAT(first_name,last_name)AS username FROM employees;
SELECT CONCAT(‘a’,‘b’,‘c’) AS 结果;
注意:NULL和任何字符串拼接,最后的结果都是NULL

ifnull函数:

功能:判断某字符段或表达式是否为null 如果为null返回指定的值 否则放回原本的值
#案例1
select ifnull(commission_pct,0) from employees;
#案例2:查询员工号为176的员工的姓名和部门号和年薪
SELECT last_name,department_id,salary *12 *(1+IFNULL(commission_pct,0)) AS 年薪 FROM employees WHERE employee_id=176

isnull函数:

功能:判断某字段或表达式是否为null 如果是 则返回1 否则放回0
SELECT ISNULL(commission_pct) FROM employees;

2 条件查询

语法:

select:要查询的字段|表达式|常量值|函数
from 表
where 条件;

分类:
1 按条件表达式筛选

2 按逻辑表达式筛选
逻辑运算符:

3 模糊查询
模糊运算符主要有五个:

like:一般和通配符搭配使用 :% 任意多个字符,包含0个字符
eg:#案例1:查询员工名中包含字符a的员工信息
select * from employees where last_name like ‘%a%’;#abc
between and:使用between and 可以提高语句的简洁度 包含临界值 临界值不能调换位置 只能大于等于左边的值并小于等于右边的值
in : 判断某字段的值是否属于in列表中的某一项
特点:提高简洁度 in列表的值类型必须一致或者兼容 in列表不支持通配符
eg:#案例:查询员工的工种编号是 IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
SELECT last_name, job_id FROM employees WHERE job_id IN( ‘IT_PROT’ ,‘AD_VP’,‘AD_PRES’);
is null 或is not null:=或<> 不能用于判断null值
is null或is not null 可以判断null值
安全等于 <=>:IS NULL:仅仅可以判断NULL值,可读性较高,建议使用
<=> :既可以判断NULL值,又可以判断普通的数值,可读性较低,用得较少
eg:#案例2:查询工资为12000的员工信息
SELECT last_name, salary FROM employees WHERE salary <=> 12000;

3 排序查询

语法:

select
要查询的东西
from

where
条件
orderby 排序的字段|表达式|函数|别名【asc|desc】

特点:

asc代表的是升序 默认 可以省略 desc代表的是降序
order by 句子可以支持 单个字段 别名 表达式 函数 多个字段
order by 子句在select查询句的最后,处理limit子句

案列:

1按单个字段排序:SELECT * FROM employees ORDER BY salary DESC;
2按表达式排序:
4 按别名排序:
5按函数排序:

6多个字段排序:

4常见函数(多)

分类:
单行函数: 如concat length ifnull等
分组函数:功能:做统计使用 统计函数 聚合函数 组函数

单行函数:
1字符函数

2数学函数

3日期函数

1、当前日期 #now 返回当前系统日期+时分秒;#curdate 返回当前系统日期(不包含时分秒) #curtime(返回当前时分秒)
2获取指定部分日期:
3日期转化格式:
4 日期相减 datediff

4流程控制函数

if函数和case语句

5其他函数:

分组函数
说明:

用做统计使用 又称为聚合函数或统计函数或组函数,给函数传一组值 经过函数处理之后 返回给我们一个值
分类:sum 求和、avg 平均值、max 最大值 、min 最小值 、count 计算个数
特点:

5分组查询

含义:

数据分组就是使用分组函数 对数据进行分组 分组查询就是使用了分组函数进行的查询就是分组查询

语法:

总结:

6连接查询

含义:

又称多表查询 当查询的字段来自多个表内时,就会用到链接查询(笛卡尔现象)

分类:

按年代分:
按功能分:

join原理:

sql92标准(仅支持内链接)

三种分类: 1 等值连接 2 非等值连接 3 自连接

sql99标准:

语法:
分类:

sql92和sql99区别:
sql99支持的功能可能比较多 ;sql99实现连接条件和筛选条件的分离 可读性比较高(推荐使用)

7子查询

概念:

出现在select语句中的额select语句 称为子查询或者内查询;外部的select查询语句 称为主查询或者外查询

分类: 按结果集的行列树不同分类; 按子查询出现主查询中的不同位置
详解:

8 分页查询

语法:

9联合查询

概念:

将多条查询语句的结果合并成一个结果

语法:

总结:

10总结

三 DML数据操作语言

1插入



两种区别:
方法1支持多行输入 方法2不支持; 方法1支持子查询 方法2不支持

2 修改

修改单表数据:

修改多表数据(级联更新):

3 删除

方法一:delete

单表删除

多表删除

方法二 truncate

区别:

四 DDL数据库定义语言

1库的管理

创建:

修改:
删除:

2表的管理

创建:

修改:
删除:
复制:

3数据类型

整数:Tinyint Smallint MediUmint Int integer Bigint
小数:float double DEC DECIMAL
字符型
ENUM枚举
SET集合
日期

4常见约束

用于限制表汇总的数据 为了确保表中的数据的准确和可靠性
语法:

五 TCL事务控制语言

1 概念

事务:一个或一组sql语句组成一个执行单元 这个执行单元要么全部执行 要么全部不执行
一旦开启了事务 ,事务在commit提交之前 在数据库中有一个表示 这个表示决定了事务中的sql语句是否被真正存储到数据库中,相当于事务中的sql语句都在内存中 并没有真正被执行

六Mysql架构介绍

高级部分内容介绍:

mysql内核: mysql内核的编码 优化 改写
sql优化工程师
mysql服务器的优化
mysql配置文件中各种参数设定
查询语句优化
主从复制
软硬件升级
容灾备份
sql编程

1 mysql安装和配置文件

安装我在前面写过了就不在复述
配置:


二进制日志log-bin:主从复制 主要用于记录对数据库的所有操作日志 然后再进行从数据库的复制
错误日志log-error:默认是关闭的 记录严重的警告和错误信息 每次启动和关闭的详细信息等
查询日志log:默认关闭。记录查询的sql语句 如果开启会减低mysql的整体性能 因为记录日志也是需要消耗资源的
数据文件:frm文件 myd文件 myi文件

以上是关于mysql基础学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

DOCKER 学习笔记5 Springboot+nginx+mysql 容器编排

UE5学习笔记——蓝图基础之基础节点知识

mysql基础学习笔记

mysql基础学习笔记

spring学习笔记(19)mysql读写分离后端AOP控制实例

着重基础之—MySql Blob类型和Text类型