MySQL 简洁速查手册

MySQL 速查手册

文章目录

  • MySQL 速查手册
    • 0. 前言
    • 1. 开启/关闭数据库
    • 2. 数据库操作
    • 3. 数据表操作
    • 4. 字段操作
    • 5. 数据操作
    • 6. 运算符
    • 7. 高级查询(group by、having、order by、limit)
    • 8. 高级插入
    • 9. 高级删除
    • 10. 高级更新
    • 11. 联合查询
    • 12. 连接查询
          • 12.1 左外连接
          • 12.2 右外连接
    • 13. 子查询
      • 13.1 有关子查询的特定关键字

0. 前言

  • 此篇文章的由来是因为我学完MySQL后,发现东西有点多,而实战中真正需要我写的就是基本CRUD语句,所以我决定将学过的记录一下,便于复习。
  • 最近我的一位朋友,他有一个比赛需要用到MYSQL,正好我之前我有整理,在这里分享一下。
  • 此文适合学过MySQL的同学阅读,没学过的同学也可以作为参考。

1. 开启/关闭数据库

开启关闭服务

  1. 手动开启本地服务
  2. 命令行开启
    net  start  mysql
    net  stop  mysql
    

客户端连接

mysql [-h主机名] [-P端口号] -u用户名 -p密码

2. 数据库操作

查看所有数据库

show databases;

创建数据库

create database 数据库名 [charset 字符集] [collate 校对规则];

查看数据库创建语句

show create database 数据库名;

删除数据库

drop database 数据库名;

修改数据库

alter database 数据库名 charset 字符集 [collate 校对规则];

使用数据库

use 数据库名;

3. 数据表操作

创建数据表

create table 表名(
	字段1,
	字段2...
)[charset 字符集] [engine 表类型];

查看所有数据表

show tables;

查看数据表结构

desc 表名;

查看表创建语句

show create table 表名;

删除数据表

drop table 表名;

修改表名

alter table 表名 rename 新表名;

修改表字符集

alter table 表名 charset 字符集;

4. 字段操作

添加字段

alter table 表名 add 字段名 字段类型 [字段属性] [after 某字段名 或 first];

修改字段

alter table 表名 change 旧字段名 新字段名 字段类型 [字段属性...];
-- 不修改字段名且只修改其它信息,则可以使用:
alter table 表名 modify 字段名 字段类型 [字段属性...];

删除字段

alter table 表名 drop 字段名;

5. 数据操作

插入数据

insert into 表名(字段名1,字段名2, ... ) values(数据1, 数据2, ...);
-- 简写:
insert into 表名 values(数据1, 数据2, ...);

查询数据

select * from 表名;

删除数据

delete from 表名 [where];

修改数据

update 表名 set 字段名 = 值 [where];

6. 运算符

distinct(消除重复行)

select distinct 字段 from 表名;

like(模糊查询运算符)

-- 查询“吴”字开头,后面无所谓。
字段 like '吴%';
-- 查询“李”字开头,后面占两个字符
字段 like '吴__';

between and(范围限定符)

between 起始范围 and 结束范围;

in(包含运算符)

in(数据1, 数据2...);

is(判空运算符)

  • 用于判断一个字段中的是“是否存在”(即有没有),只有两个写法
where 字段 is not null;
where 字段 is null;

7. 高级查询(group by、having、order by、limit)

group by子句

  • 含义:
    表示对所取得的数据,以所给定的字段来进行分组。
    最后的结果就是将数据分成了若干组,每组作为一个“整体”成为一行数据。
  • 特别注意:
    分组之后,只有“组信息” ,一行就是一组
  • group by了之后通常只有两种情况:
    1. 分组本身的字段信息.
    2. 一组的综合统计信息.
group by 字段1, 字段2...

having子句

  • 含义:having其实是相当于分组之后“有若干行数据”,然后对这些行再筛选。
having 筛选条件;

order by子句

  • 含义:对数据进行排序,asc(正序), desc(倒序)
order by 字段 [asc 或 desc];

limit子句

  • 含义:某行开始取多少行数据。用于分页查询。
limit  起始行号,行数;
  • MySQL5另一种写法
  limit  行数 offset 起始行号;

8. 高级插入

同时插入

insert into 表名 (字段1, 字段2...) values
(数据1, 数据2...), ... 
(数据1, 数据2...);

set插入

insert into 表名 set 字段1 = 值, 字段2 = 值 ... ;

蠕虫复制

  • 含义:用于压力测试。
-- 将查询的结果插入到指定表中
insert into 表名1 (字段1, 字段2...) select 字段1, 字段2... from 表名2;
-- 蠕虫复制,也就是查询本身,然后再将数据插入到本身。
insert into 表名 select * from 表名;

主键冲突

  • 方案1: 忽略; 终止插入,数据不变;
insert ignore into 表名 values (数据1, 数据2...);
  • 方案2: 替换; 删除原纪录,插入新纪录;
replace into 表名 values (数据1, 数据2...);
  • 方案3: 更新; 更新原有的数据
insert into 表名 values (数据1, 数据2...)
	on duplicate key update XX字段=新的值 ... ;

9. 高级删除

按指定顺序删除指定数量的数据

delete from 表名 where ... [order  by 字段名, ...] [limit 数量n];

truncate清空

  • 含义:表示清空指定表中的所有数据并将表恢复到“初始状态”(就类似刚刚创建一样)
  • 对比“delete from 表名”,这个不会恢复“初始状态”。
truncate 表名;

10. 高级更新

update 表名 set 字段名1 = 字段值1 ... 
	where ... [order by 字段名, ...] [limit 数量n];

11. 联合查询

  • 含义:联合查询是指将2个或2个以上的字段数量相同的查询结果,“纵向堆叠”后合并为一个结果。
select查询1
union [all或distinct]
select查询2
union [all或distinct]
select查询3
... 
[order by 字段 [asc或desc] ]
[limit 起始行号,数量];
  • 注意:
    1. 查询表的字段的列数需要一致(名字可以不同)。
    2. 查询表的字段类需要一致。
    3. 最后的查询结果的列名是第一张表的列名。
    4. order by 和 limit 是对联合之后的结果进行排序和数量限定的。
    5. order by 排序的字段应该要使用第一张表的列名。

12. 连接查询

  • 连接(join)查询是将两个查询的结果以“横向对接”的方式合并起来的结果。

笛卡尔积

from 表1 [cross] join 表2;
  • 还有一种写法:from 表1, 表2;

内连接

from 表1 [inner] join 表2 on 连接条件;

外连接

12.1 左外连接
from 表1 left [outer] join 表2 on 连接条件
  • 特点与注意:
    1. 左外连接其实是保证左边表的数据都能够取出的一种连接。
    2. 左外连接其实是在内连接的基础上,再加上左边表中所有不能满足条件的数据
    3. 关键字“outer”可以省略。
12.2 右外连接
from 表1 right [outer] join 表2 on 连接条件
  • 特点与注意:
    1. 右外连接其实是保证右边表的数据都能够取出的一种连接。
    2. 右外连接其实是在内连接的基础上,再加上右边表中所有不能满足条件的数据。
    3. 关键字“outer”可以省略。

自连接

  • 含义:自连接不是一种新的连接,只是一个表“自己跟自己连接”。
from 表1 as a [连接形式] join 表1 as b on a.字段1 = b.字段2;
  • 特点与注意:
    1. 自连接其实还是两个表连接,只是将一个表用不同的别名,当做两个表。
    2. 自连接适用于一个表中的某个字段的值“来源于”当前表的另一个字段的情况。

13. 子查询

  • 含义:子查询就是指一个“正常查询语句”中的某个部分(比如select部分,from部分, where部分)又出现了查询的一种查询形式
  • 此时,子查询所在上“上层查询”,就被称为主查询。

标量子查询

  • 含义:标量子查询就是指子查询的结果是“单个值”(一行一列)的查询。

列子查询

  • 含义:列子查询查出的结果为“一列数据”
  • 通常用来代替in运算符

行子查询

  • 含义:行子查询查出的结果通常是一行
  • 使用:
    行子查询的结果通常跟“行构造符”一起,在where条件子句中做为条件数据,类似这样:
where  [row](字段1,  字段2 )  = (行子查询);

表子查询

  • 含义:
    当一个子查询查出的结果是“多行多列”的时候,就是表子查询。
    表子查询的结果相当于一个表,可以直接当做一个表来使用。
  • 使用:
    表子查询通常用在主查询的from子句中,作为一个“数据源”。
  • 注意:
    需要给该子查询设置一个别名,类似这样:
    from (select … 子查询 ) as tab1

exists子查询

  • 含义:
    该子查询如果“有数据”, 则该exists()的结果为“true”, 即相当于 where true (恒真)
    该子查询如果“没有数据”,则该exists()的结果为“false”,即相当于where false(恒假)
where exists(任何子查询);
  • 特点与注意:
    1. 此子查询语句通常需要用到主查询语句中的字段作为查询条件。
    2. 有意义exists子查询不能单独执行
    3. 之前的4种子查询都可以单独执行

13.1 有关子查询的特定关键字

any关键字

  • 包含任意一个

all关键字

  • 全部包含
还有视图、事务、变量、存储过程等内容,后面看情况补上...

热门文章

暂无图片
编程学习 ·

SSCMS部署Linux

一、进入手册:https://sscms.com/ 二、在首页点击,如下位置:三、点击快速上手,进入页面如下:四、点击linux中运行SSCMS https://sscms.com/docs/v7/getting-started/using-linux.html#_1%E3%80%81%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96%E5%8C%85 根据里面的步骤一步步进行…
暂无图片
编程学习 ·

machine learning基础知识(Leetcode)

机器学习 machine learning是机器通过已知的内容,类似于人类一样进行学习,并对同类型数据进行判断的过程。 例如训练图片模型就是将每个像素点转为0到255之间的值,利用机器发现不同种类的图片之间存在的映射。 有监督与无监督模型监督学习是F(x)= sum 并且sum已知,可以通…
暂无图片
编程学习 ·

树莓派4B介绍及其系统安装 入门教程(一)

树莓派4B介绍及其系统安装 入门教程(一)树莓派介绍系统下载安装连接外设启动后续计划入门进阶扩展参考资料 树莓派介绍 树莓派介绍可以参考链接: 树莓派介绍。里面介绍的很详细了,这里就不重复讲了,也可以去树莓派官方网站下载它的参数资料,里面也有很多利用树莓派设计制作…
暂无图片
编程学习 ·

LeetCode_Everyday:021 Merge Two Sorted Lists

LeetCode_Everyday:021 Merge Two Sorted Lists题目:示例:代码参考此外 LeetCode Everyday:坚持价值投资,做时间的朋友!!! 题目: 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:示例 1:输入:1->2->4, 1-…
暂无图片
编程学习 ·

redis集群springboot连接

谢谢参考:https://blog.csdn.net/CNZYYH/article/details/85696674一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式。利用redis这两种场景的消息队列都能够实现。 定义:生产者消费者模式 :生产者生产消息放到队列里,多个消费者同时监听队列…
暂无图片
编程学习 ·

异步FIFO学习

这里写自定义目录标题一、概述二、异步FIFO的设计基础2.1 FIFO指针2.2 格雷码的使用2.2.1 二进制码存在的问题2.2.2 格雷码计数器2.3 空满条件的判断三、异步FIFO设计实现3.1 fifo13.2 fifomem3.3 sync_r2w3.4 sync_w2r3.5 rptr_empty3.6 wptr_full 一、概述 在大规模ASIC或FPG…
暂无图片
编程学习 ·

Linux磁盘管理与文件系统

Linux磁盘管理与文件系统磁盘结构1.硬盘的物理结构2.硬盘的数据结构3.硬盘的接口fdisk命令mkfs命令mkswap 命令挂载、卸载文件系统 前言:管理磁盘是管理员的重要工作内容之一,此次将从磁盘的分区和格式化操作等方面,学习在linux系统中的磁盘和管理技术。除此之外,文件系统也…
暂无图片
编程学习 ·

ITEST考试助手 --- 记一次我与ITEST的拉锯战

文章目录0x0 前言0x1 1.0版本 -- 解除限制我方进攻0x2 2.0版本 - 自动翻译与解析听力我方进攻ITEST方防御0x3 3.0版本 -- 解除切屏限制与添加翻译助手反制防御我方进攻ITEST防御0x4 4.0版本 - 全随机与ajax拦截反制防御我方进攻ITEST防御0x5 5.0版本 - 只读属性的胜利反制防御我…
暂无图片
编程学习 ·

MySql简单入门_第四篇(2)_存储

5、存储过程:为以后的使用而保存的一条或多条MySql语句的集合存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(…
暂无图片
编程学习 ·

flutter textfield设置高度后内容无法居中

Container(height: 50,width: MediaQuery.of(context).size.width * 2 / 3,alignment: Alignment.center,child: TextField(autofocus: true,decoration: InputDecoration(//这行代码是关键,设置这个之后,居中contentPadding: EdgeInsets.all(2),hintText: 请输入手机号,pref…
暂无图片
编程学习 ·

Java中Date类型数据格式转换

查询数据库datetime类型数据,返回的结果是Mon Jun 22 19:37:29 CST 2020 先转换成yyyy-MM-dd类型的格式。 /** * 获取现在时间 * * @return 返回短时间字符串格式yyyy-MM-dd */ public static String getStringDateShort() { Date currentTime = new Date(); SimpleDateF…
暂无图片
编程学习 ·

视觉SLAM十四讲--1,2章

第一讲 前言 SLAM—simultaneous localization and mapping 同时定位与地图构建—它是指搭载特定传感器的主体,在没有环境先验信息的情况下,与运动过程中建立环境的模型,同时估计自己的运动。 课后题: 1、Ax=bAx=bAx=b 求解xxx 涉及到一个定理: 线性方程组有解的充分必要条…
暂无图片
编程学习 ·

近三位数增长,苏宁银行金融科技之花结出普惠金融之果

文|曾响铃来源|科技向令说(xiangling0815)美联储无限QE,2020年中国不设GDP目标,2万亿直达基层扶危纾困……国内疫情已经基本控制,经济基本面迎来全面复苏阶段,作为市场中最活跃的存在之一,小微企业在复苏过程中,面临的融资难等问题也被热议。在中国有一群喊着帮助小微企…
暂无图片
编程学习 ·

五人分

五人分🐟 """ A、B、C、D、E 五人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉。 日上三杆,A 第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份。 B 第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉拿走自己的一份…
暂无图片
编程学习 ·

jsoncpp的安装与配置

某些项目需要jsoncpp库,那么本文将介绍Ubuntu下安装jsoncpp库具体步骤。安装jsoncpp前必须安装scons。1.scons下载地址:https://sourceforge.net/projects/scons 可以选择对应的版本下载2.jsoncpp下载地址:http://sourceforge.net/projects/jsoncpp/files/3.解压scons-3.1.2…
暂无图片
编程学习 ·

JavaScript从入门到精通复习资料大全(基础知识篇)

JavaScript从入门到精通复习一、JavaScript中的常量和变量1、常量:就是程序运行过程中,保持不变的数据。2、变量:是程序中一个已经命名的存储单元。3、 变量的赋值二:JavaScript中的运算符1、算术运算符2、比较运算符3、赋值运算符4、字符串运算符5、 逻辑运算符6、条件运…
暂无图片
编程学习 ·

Leetcode刷题链表预备知识(C)

Leetcode里的head指针指向实实在在的链表第一个结点,该结点不是哨兵结点。 对链表处理完之后,链表成为空链表,则head指针赋值NULL。 写代码的时候,不要写出p->next->next这种东西,因为如果p->next==NULL,那程序运行就报错了。 用指针的时候,一定要判其是否为NU…
暂无图片
编程学习 ·

你想要的Python面试题都在这里了!

第三部分 数据库和缓存(46题) 1. 列举常见的关系型数据库和非关系型都有那些? 关系型数据库: Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL 非关系型数据库: NoSql、Cloudant、MongoDb、Redis、HBase 2. MySQL常见数据库引擎及比较? 在实际工作中,选择一…
暂无图片
编程学习 ·

ROS学习笔记(十七):rviz之用户指导

1.Troubleshooting 如果您遇到问题并且没有看到下面的答案,请尝试“故障排除”页面 2.Install or build rviz 2.1 Install from debian repository Until fuerte: sudo apt-get install ros-fuerte-visualizationFrom groovy on: sudo apt-get install ros-groovy-rviz # or s…