掌握 MySQL 的方法

  1. 掌握基本的数据结构和 SQL 使用方法。
  2. 掌握 MySQL 的基本架构,比如单机的安装部署、主从复制的几种模式,MGR 集群等等。
  3. 解决日常生产环境的问题,积累经验。
  4. 研究 MySQL 源码和分析数据库的性能。

推荐书籍

  1. 《sql 必知必会》
  2. 《mysql 技术内幕》
  3. 《高性能 mysql》

MySQL 命令

mysql

功能: 登录 mysql 系统。

格式:

$ mysql [param] [database]

param:

  • -h [host]:主机。可选项,默认为 localhost。
  • -P [prot]:端口。可选项,默认为 3306。
  • -u[username]:用户名。可选项,默认为 root。
  • -p/-p[passwd]:密码。
    • -p[passwd]:明码模式登录。
    • -p:暗码模式登录,进入交互模式输入密码。
  • -A:禁用预读表功能,加快切换库的速度。
  • [database]:数据库。可选项。
  • -e [sql]: SQL 语句。可选项。

示例:

# 暗码模式登录到指定库并执行 sql 语句
$ mysql -uroot -p -h localhost -P 3306 mysql -e "select host,user from user"

mysqldump

功能:转储工具。

格式:

$ mysqldump [param] [options] > [filename].sql

param:

  • -h [host]:主机。可选项,默认为 localhost。
  • -P [prot]:端口。可选项,默认为 3306。
  • -u[username]:用户名。可选项,默认为 root。
  • -p/-p[passwd]:密码。
    • -p[passwd]:明码模式登录。
    • -p:暗码模式登录,进入交互模式输入密码。

options:

  • [dbname]:导出单个数据库。
  • [dbname] [tablename1] [tablename2] ...:导出指定库中的表。
  • --databases [dbname1] [dbname2] ...:导出多个数据库。
  • --all-database, -A:导出全部数据库。
  • --all-tablespaces, -Y:导出全部表空间。
  • -d [dbname]:导出指定库中的表结构。

示例:

# 导出指定库
$ mysqldump -uroot -p123456 book > /root/test/book_01.sql# 导出所有库
$ mysqldump -uroot -p123456 --all-databases > /root/test/all.sql# 导出所有库及所有表空间
$ mysqldump -uroot -p123456 -A -Y > /root/test/all_tables.sql# 导出 book 库中的 books 表和 caregory 表
$ mysqldump -uroot -p book books category > bools.sql

SQL 语句

create

功能:新建。

格式:

--创建用户
> create user [username]@[host] identified by [passwd];

示例:

-- 创建用户 默认登录权限为'%' 可远程登录
> create user tp404 identified by '123456';-- 创建用户并指定登录权限为只允许本地登录
> create user zhangsanfeng@'localhost' identified by '123456';

update

功能:修改。

格式:

> update [table] set [aimcolumn]=[newvalue] where [condition]

示例:

-- 修改用户名 将 zhangsanfeng 改为 tp110
> update mysql.user set user='tp110' where user='zhangsanfeng';

alter

功能:修改。

格式:

-- 修改用户密码
> alter user [username] identified by [passwd];

示例:

-- 修改密码 将用户 tp404 的密码改为 123456
> alter user tp404 identified by '123456';

select

功能:查询。

格式:

-- 执行函数
> select [func];-- 查询指定字段的值
> select [column] from [table] where [condition]

示例:

-- 查询当前日期和时间
> select now();-- 查询当前日期
> select curdate();-- 查询当前用户
> select user();-- 查看所有用户的登录权限
> select user,user.host from mysql.user;

show

功能:查询。

格式:

> show [options] [condition];

options:

  • variables:系统变量。
  • engines:存储引擎。
  • status:系统状态变量当前值。
  • global status:系统状态变量累计值。

示例:

-- 查询所有系统变量的名称和值
> show variables;-- 查询存储引擎相关系统变量
> show variables like '%storage_engine%';-- 查询存储引擎相关信息
> show engines;-- 查询系统状态变量当前值
> show status;-- 查询线程相关的系统状态变量累计值
> show global status like 'Thread%';

数据类型

基础概念

计量单位:

  • 位:

    • 计算机存储的最小单位
    • 取值 0 或者 1
    • 单位 bit
  • 字节:
    • 单位 byte
    • 1 byte = 8 bit
    • 1 kb = 1024 b
    • 1 M = 1024 kb

数值类型

类型 大小(byte) 范围(有符号) 范围(无符号) 描述
TINYINT 1 (-128, 127) (0, 255) 小整数值
SMALLINT 2 (-32 768, 32 767) (0, 65 535) 大整数值
MEDIUMINT 3 (-8 388 608, 8 388 607) (0, 16 777 215) 大整数值
INT/INTEGER 4 (-2 147 483 648, 2 147 483 647) (0, 4 294 967 295) 大整数值
BIGINT 8 (-9 233 372 036 854 775 808, 9 233 372 036 854 775 807) (0, 18 446 744 073 709 551 615) 极大整数值
FLOAT 4 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0, (1.175 494 351 E-38,3.402 823 466 E+38) 单精度浮点数值
DOUBLE 8 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0, (2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度浮点数值
DECIMAL 对 DECIMAL(M,D) ,如果M>D,为M+2 否则为 D+2 依赖于 M 和 D 的值 依赖于 M 和 D 的值 小数值

BOOL:布尔类型。

  • 等价于 TINYINT(1)。
  • 取值:“真”或“假”。

DECIMAL :以字符串形式表示的浮点数。

日期类型

类型 大小(byte) 范围 格式 描述
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/‘838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’ YYYY-MM-DD hh:mm:ss 混合日期和时间值
TIMESTAMP 4 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-19 03:14:07’ UTC 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYY-MM-DD hh:mm:ss 混合日期和时间值,时间戳

字符串类型

类型 大小(byte) 描述
CHAR 0-255 定长字符串
VARCHAR 0-65535 变长字符串
TINYBLOB 0-255 二进制字符串
TINYTEXT 0-255 短文本字符串
BLOB 0-65 535 二进制形式的长文本数据
TEXT 0-65 535 长文本数据
MEDIUMBLOB 0-16 777 215 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215 中等长度文本数据
LONGBLOB 0-4 294 967 295 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295 极大文本数据

枚举类型:

  • 字段中实际存储的是成员索引。
  • 成员全部用字符表示。
  • 成员字符不可重复。
类型 大小 取值
SET (value1, value2,…) 每个成员占 1bit,不足 1byte 按 1byte 计算,最多占 4byte 可取单个成员或多个成员的组合
ENUM (value1, value2,…) 每 255 个成员占 1byte,不足 1byte 按 1byte 计算,最多占 2byte 只能取单个成员

运算符

逻辑运算符

运算符 作用
and 逻辑与
or 逻辑或
not 逻辑非

示例:

-- 查询价格是 30,40,50,60的书
> select bName,publishing,price from books where price=30 or price=40 or price=50 or price=60;

算术运算符

运算符 作用
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
in 在集合中
not in 不在集合中
between and 在两值之间
not between and 不在两值之间
like 模糊匹配
not like 模糊不匹配

示例:

-- 查询价格等于 60 的书籍
> select bName,price from books where price = 60;-- 查询价格大于 60 的书籍
> select bName,price from books where price > 60;-- 查询价格不等于 60 的书籍
> select bName,price from books where price <> 60;-- 查询价格是 50,60,70 的书
> select bName,price from books where price in (50,60,70);-- 查询价格不是 50,60,70 的书
> select bName,price from books where price not in (50,60,70);-- 查询价格不在 30 与 60 之间的书 查询结果以降序排列
> select bName,price from books where price not between 30 and 60 order by price desc;
-- 等效于
> select bName,price from books where price<30 or price>60 order by price desc;-- 查询价格在 30 与 60 之间的书 查询结果以降序排列
> select bName,price from books where price between 30 and 60 order by price desc;
-- 等效于
> select count(*) from books where price>=30 and price<=60 order by price desc;-- 查询书名中包含"程序"的书
> select bName from books where bName like '%程序%';-- 查询书名中不包含"程序"的书
> select bName from books where bName not like '%程序%';

排序

asc

功能:升序排列。
格式:

> select [columns] from [table] where [condition] order by [column] asc;

示例:

-- 查询价格不在指定集合中的书 查询结果以升序排列
> select bName,price from books where price not in (50,60,70,80,90,100) order by price asc;
-- 或
> select bName,price from books where price not in (50,60,70,80,90,100) order by price;

desc

功能:降序排列。
格式:

> select [columns] from [table] where [condition] order by [column] desc;

示例:

-- 查询价格不在指定集合中的书 查询结果以降序排列
> select bName,price from books where price not in (50,60,70,80,90,100) order by price desc;-- 查询价格在指定集合中的书 查询结果以降序排列 相同价格按照 bId 升序排列
> select bId,bName,price from books where price in (50,60,70,80,90,100) order by price desc,bId asc;

查询语句进阶

嵌套查询

格式:

> select [columns1] from [table1] where [condition1] = (select [columns2] from [table2] where [condition2]);

示例:

-- 查询类型是网络技术的书
> select bName,bTypeId from books where bTypeId=(select bTypeid from category where bTypeName='网络技术');

分页查询

格式:

> select [columns] from [table] limit [offset],[rows];

解析:

  • offset:偏移量。
  • rows:条目数。

示例:

-- 从结果集首条开始返回两条结果
> select * from category limit 0,2;-- 从结果集第二条开始返回四条结果
> select * from category limit 1,4;-- 查询电子工业出版社出版的最便宜的书
> select bName,price from books where publishing='电子工业出版社' order by price asc limit 0,1;-- 查询比电子工业出版社出版的最便宜的书还要便宜的书
> select bName,price from books where price < (select price from books where publishing='电子工业出版社' order by price asc limit 0,1);

联合查询

内连接

格式:

> select [columns] from [table1] inner join [table2] on [table1].[column]=[table2].[column];

示例:

-- 查询书名、价格、类目
> select a.bName,a.price,b.btypename from books a inner join category b on a.btypeid=b.btypeid;

聚合查询

格式:

-- 查询字段综和
> select sum([columns]) from [table] where [condition];-- 查询字段平均值
> select avg([columns]) from [table] where [condition];-- 查询字段最大值
> select max([columns]) from [table] where [condition];-- 查询字段最小值
> select min([columns]) from [table] where [condition];

示例:

-- 查询所有书的总价
> select sum(price) from books;-- 查询 bId 小于等于 3 的所有书的平均价格
> select avg(price) from books where bId <= 3;-- 查询最贵的书
> select bName,price from books where price=(select max(price) from books);-- 查询最便宜的书
> select bName,price from books where price=(select min(price) from books);

备份还原

实例:备份数据库

数据库文件:/root/book_utf8.sql

方法一:

  1. 创建数据库:$ mysql -e 'create database book' -uroot -p'123456';
  2. 导入库:$ mysql -uroot -p'123456' book < /root/book_utf8.sql

方法二:

  1. 登录数据库:$ mysql -uroot -p123456
  2. 创建数据库:> create database book;
  3. 进入数据库:> use book;
  4. 导入库:> source /root/book_utf8.sql;

实例:还原数据库

命令:$ mysqldump -uroot -p123456 book > /root/test/book_01.sql

工具解析

mysqldump

备份方式:逻辑备份,冷备份。

适用场景:数据量较小时适用,常用于增量备份。

缺点:

  • 数据量较大(超过 20G)时,备份数据比较慢。
  • 一定程度上会影响数据库本身的性能。
  • 备份过程中 cpu 占用较高。
  • 还原速度较慢,需要加载解释语句,重建引擎,转化存储格式等。

优点:

  • 还原操作比较简单。
  • 与存储引擎没有关系,兼容性较好。

xtrabackup

备份方式:物理备份,热备份。

适用场景:数据量较大时适用,常用于全量备份。

缺点:还原时要注意备份文件的路径,版本,配置等与源文件是否一致,否则可能造成数据丢失。

优点:

  • 基于文件的物理备份。
  • 容易跨平台,跨操作系统和 MySQL 版本。
  • 还原较快,不需要执行任何的 mysql 语句,不需要构建索引,innodb 表无需完全缓存到内容。

vip2-day23 SQL 语句进阶相关推荐

  1. Mysql数据库——sql语句进阶

    SQL语句进阶 1.查询字段: ----查询所有字段 select * from 表名; ----查询指定字段 select 字段名,字段名- from 表名; ----多数据表连接查询时 selec ...

  2. sql语句进阶教程(学习sql这一篇就够了)

    转载自:http://blog.csdn.net/u011001084/article/details/51318434 最近从图书馆借了本介绍SQL的书,打算复习一下基本语法,记录一下笔记,整理一下 ...

  3. MysQL高级SQL语句|进阶语句|select语句(一)【图文细解】

    MysQL高级SQL语句 一.SQL语句的概述 SELECT DISTINCT WHERE AND.OR IN BETWEEN 通配符 LIKE ORDER BY GROUP BY HAVING 二. ...

  4. Mysql 数据库 -------- SQL语句进阶查询 ------- 后部分

    Mysql ---- SQL高级查询 连接查询 内连接 外连接 数据库函数 数学函数 聚合函数(给数据表用的) 字符串函数(字符串用''格式) 日期时间函数 存储过程 创建存储过程 创建存储过程中的传 ...

  5. 【MySQL】SQL语句进阶-创建sql练习环境

    开始之前先来学习一个数据库查询命令 select 1)打印当前日期和时间 mysql> select now(); +---------------------+ | now() | +---- ...

  6. Database之SQLSever:SQLSever数据库管理学习并深入理解SQL命令语句进阶综合篇《初级→中级→高级》(持续更新,建议收藏)

    Database之SQLSever:SQLSever数据库管理学习并深入理解SQL命令语句进阶综合篇<初级→中级→高级>(持续更新,建议收藏) 目录 SQLSever数据库管理学习并深入理 ...

  7. mysql 进阶到高级_MySQL 高级(进阶) SQL 语句精讲(一)

    MySQL 高级(进阶) SQL 语句精讲 一.高级语句详解 (一).创建两个表 创建两个表方便实现下面的语句结果 use cw; create table localtion (Region cha ...

  8. mysql查询某一时间段之后数据的sql_mysql进阶(十九)SQL语句如何精准查找某一时间段的数据...

    SQL语句如何精准查找某一时间段的数据 在项目开发过程中,自己需要查询出一定时间段内的交易.故需要在sql查询语句中加入日期时间要素,sql语句如何实现? SELECT * FROM lmapp.lm ...

  9. MySQL(6)数据库中的高级(进阶) SQL 语句

    文章目录 一.SQL高级语句 1.1 SELECT 1.2 DISTINCT 1.3 WHERE 1.4 AND OR 1.5 IN ----显示已知的值的资料 1.6 BETWEEN 1.7 通配符 ...

  10. mysql进阶(十九)SQL语句如何精准查找某一时间段的数据

    SQL语句如何精准查找某一时间段的数据 在项目开发过程中,自己需要查询出一定时间段内的交易.故需要在sql查询语句中加入日期时间要素,sql语句如何实现? SELECT * FROM lmapp.lm ...

最新文章

  1. 每日一皮:鼓励师招到了,原来是这样的...
  2. 瑞星linux u盘引导盘杀毒教程,瑞星杀毒U盘怎样用U盘启动电脑
  3. JavaWeb学习总结(十三):使用Session防止表单重复提交
  4. python之禅星号_Python基础1
  5. JavaScript学习杂记--对象和数组
  6. stringbuffer常用方法_第八讲:常用类库API
  7. 会写helloworld,不等于入门
  8. unet服务器向客户端发消息,unet
  9. 团体程序设计天梯赛-练习集L1-023. 输出GPLT
  10. Android 第三方应用接入微信平台(2)
  11. 维修手册 html 打开,戴尔Dell Latitude E6410/E6510官方拆机图解维修手册
  12. 相册批量下载 前版本为v3.5 支持:雅虎相册、谷歌相册、网易相册、yupoo相册、百度相册、QQ相册
  13. 疾病诊断归一化---附加编码
  14. 2020-1024=996(程序员节)
  15. 解决通过无线路由上网,但有些网站打不开的问题
  16. 4kvideodownloader视频下载工具
  17. 基于Halcon的高精度圆拟合算法思路
  18. Day754.Pika键值对数据库 -Redis 核心技术与实战
  19. dede织梦后台页面及功能修改及精简操作方法
  20. 成功安装fbprophet(没有坑也没有眼泪,世上最详细步骤)

热门文章

  1. 扩展功能中新增身份证号码查询功能
  2. Iptables#Iptables加固服务器安全
  3. unity前端架构之定时器完整代码实现
  4. 微信删除的好友还能找回来吗?盘点5种超实用的方法!
  5. Cocos2d开发系列(九)
  6. 10款手机网页模板_手机wap网站模板_html5手机网站模板源码下载(二)
  7. vant+vue 上传身份证正面和反面 Ocr识别校验反显
  8. Wad和cchardet
  9. 幼儿园 计算机课教案,幼儿园烹饪课教案.doc
  10. Orcad capture导出bom相关设置