MYSQL的回忆录(适合有基础的小伙伴看,没基础的看着估计够呛)
SQL分类
MYSQL的数据类型
Text 类型
| 数据类型 | 描述 |
|---|---|
| CHAR(size) | 保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。 |
| VARCHAR(size) | 保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。注释:如果值的长度大于 255,则被转换为 TEXT 类型。 |
| TINYTEXT | 存放最大长度为 255 个字符的字符串。 |
| TEXT | 存放最大长度为 65,535 个字符的字符串。 |
| BLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。 |
| MEDIUMTEXT | 存放最大长度为 16,777,215 个字符的字符串。 |
| MEDIUMBLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。 |
| LONGTEXT | 存放最大长度为 4,294,967,295 个字符的字符串。 |
| LONGBLOB | 用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。 |
| ENUM(x,y,z,etc.) | 允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。注释:这些值是按照你输入的顺序存储的。可以按照此格式输入可能的值:ENUM('X','Y','Z') |
| SET | 与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。 |
Number 类型:
| 数据类型 | 描述 |
|---|---|
| TINYINT(size) | -128 到 127 常规。0 到 255 无符号*。在括号中规定最大位数。 |
| SMALLINT(size) | -32768 到 32767 常规。0 到 65535 无符号*。在括号中规定最大位数。 |
| MEDIUMINT(size) | -8388608 到 8388607 普通。0 to 16777215 无符号*。在括号中规定最大位数。 |
| INT(size) | -2147483648 到 2147483647 常规。0 到 4294967295 无符号*。在括号中规定最大位数。 |
| BIGINT(size) | -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号*。在括号中规定最大位数。 |
| FLOAT(size,d) | 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
| DOUBLE(size,d) | 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。 |
| DECIMAL(size,d) | 作为字符串存储的 DOUBLE 类型,允许固定的小数点。 |
* 这些整数类型拥有额外的选项 UNSIGNED。通常,整数可以是负数或正数。如果添加 UNSIGNED 属性,那么范围将从 0 开始,而不是某个负数。
Date 类型:
| 数据类型 | 描述 |
|---|---|
| DATE() | 日期。格式:YYYY-MM-DD注释:支持的范围是从 '1000-01-01' 到 '9999-12-31' |
| DATETIME() | *日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' |
| TIMESTAMP() | *时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC ………………不写的话自动生成当前系统时间 |
| TIME() | 时间。格式:HH:MM:SS注释:支持的范围是从 '-838:59:59' 到 '838:59:59' |
| YEAR() | 2 位或 4 位格式的年。注释:4 位格式所允许的值:1901 到 2155。2 位格式所允许的值:70 到 69,表示从 1970 到 2069。 |
* 即便 DATETIME 和 TIMESTAMP 返回相同的格式,它们的工作方式很不同。在 INSERT 或 UPDATE 查询中,TIMESTAMP 自动把自身设置为当前的日期和时间。TIMESTAMP 也接受不同的格式,比如 YYYYMMDDHHMMSS、YYMMDDHHMMSS、YYYYMMDD 或 YYMMDD。
DDL
数据定义语言,用来定义数据库对象;数据库,表,列等,关键字,create,drop,alter等
操作数据库(CRUD)
1,C(Create):创建
创建数据库:
create database 数据库名;
第二种,先判断是否存在同名数据库:
create database if not exists 数据库名;
第三种,指定字符集的创建方法:
create database 数据库名 character set 字符集;
第二种和第三种可以连起来用
练习:
创建一个名叫db1的数据库,判断是否存在,并设置字符集为gbk
create database if not exists db1 character set gbk;
2,R(Rertieve):查询
查询所有数据库的名称:
show databases;
查看创建某个数据库的语句(字符集):
show create datebase 数据库名;
3,U(Update):修改
修改数据库的字符集
alter database 数据库名 character set 字符集;
这里做个小说明,utf-8 只能写成 utf8
4,D(Delete):删除
删除数据库:
drop database 数据库名;
这里也可以和创建哪里一样,先判断一下存不存在,再进行删除
5,使用数据库
查询当前正在使用的数据库名称
select database();
使用数据库
use 数据库名;
操作表
C(create):创建
创建表语法:
create table 表名(
列名1 数据类型,
列名2 数据类型,
…………
列名n 数据类型
);
最后一个列不需要加逗号复制一个表:
create table 表名 like 被复制的表名;R(Retrieve): 查询
查询某个数据库中所有的表名称:
show tabales;查询表结构:
desc 表名;U(Update): 修改
修改表名
alter table 表名 rename to 新得表名修改表的字符集
alter table 表名 character set 字符集;添加一列
alter table 表名 add 列名 数据类型;修改列名称 类型
alter table 表名 change 列名 修改后的新列名 新数据类型只改数据类型
alter table 表名 modify 列名 新的数据类型删除列
alter table 表名 drop 列名;D(Delete): 删除
删除表:
drop table 表名;同样可以先判断是否存在
drop table if exists 表名;
DML
数据操作语言,用来对数据库中表的数据进行增删改,关键字,insert,delete,updata等
添加数据:
语法:
insert into 表名(列名1,列名2,……列名n) values(值1,值2,……值n);
注意事项:
列名和数据要一一对应
如果表名后,不定义列名,则默认给所有列添加值,例
insert into 表名 values(值1,值2,……值n)输了数字类型,其他类型都需要使用引号引起来,单双引号都可以
删除数据:
语法:
delete from 表名 where 条件;
注意事件:
如果不加条件,则删除表中所有数据,
如果真的有这种删除所有数据的需求也请不要这样用,
因为表中有多少条数据,计算机就会执行多少次命令,如果数据太多,会导致很卡,
建议使用:
truncate table 表名
意思是删除表,然后创建一个一模一样的空表 这样的话计算机的执行次数就会少很多!效率高
修改数据:
语法:
update 表名 set 列名1 = 值1 , 列名2 = 值2 , …… where 满足的条件
注意事项:
如果不加条件,会将表中,列的值全部修改!
DQL
数据查询语言,用来处查询数据库中表的记录(数据),关键字:select,where
查询的具体语法:
select
字段列表(列名)
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
基础查询:
查询表内所有数据
select * from 表名;
查询多个字段
select
列名1,
列名2,
…………
列名n
from
表名;
去除重复的结果集
select distinct
列名
from
表名;
-------------------------------
查询结果完全相同时,才会去重,查多个列的时候,同一排必须有所字段都一样才能去重!
列计算
select
准备做计算的列名1,
准备做计算的列名2,
准备做计算的列名1+准备做计算的列名2
from
表名;
------------------------------------
如果存在有null的数据
建议使用
ifnull(准备做计算的列名2,如果有null替换的数据)
替换上面的代码为:
select
准备做计算的列名1,
准备做计算的列名2,
准备做计算的列名1+ifnull(准备做计算的列名2,0)//这里如果有null替换成0
from
表名;
起别名
select
列名1 AS 想展示的新列名1,
列名2 AS 想展示的新列名2
from
表名
条件查询
where子句后跟条件 ,运算符
>,<,<=,>=,=,<>
between……and
in(集合)
LIKE
IS NULL
AND 或 &&
or 或 ||
not 或 !
查询 age 字段大于20的数据
select * from 表名 where age>20;查询 age 字段不等于20的数据
select * from 表名 where age!=20;
select * from 表名 where age<>20;
----------------------------
这两个都是不等于查询 age 等于 20 的数据
select * from 表名 where age=20;查询age 大于等于20 ,小于等于30
select * from 表名 where age>=20 && age<=30;
select * from 表名 where age>=20 AND age<=30;
select * from 表名 where age BETWEEN 20 AND 30;
---------------------------------
这三个都可以查到条件上面的查询 age 为 19 , 25 , 22岁的数据
select * from 表名 where age =19 OR age=25 or age=22;
select * from 表名 where age in(19,25,22);
-----------------------------------
还是一样,两个都能查到查询age 为null的数据
这里要注意的是,null值不能用 = !=去判断,所以只能用is
select * from 表名 age is null;
如果查询不为null
select * from 表名 age is not null;模糊查询LIKE
占位符:
_ :单个字符
% : 多个任意字符
假设查询name字段,姓马的人
select * from 表名 where name like '马%';查询name字段 第二个是 化 的人
select * from 表名 where name like '_化%';查询name 字段 是三个字的人
select * from 表名 where name like '___';//这里是三个_号查询 name 字段包涵 马 的人
select * from 表名 where name like '%马%';排序查询
语法: order by 子句
order by 排序字段 排序方式
也可以多个字段排序
order by 排序字段1 排序方式1,排序字段2 排序方式2
例1:按age排序
select * from 表名 order by age;
在不写排序方式的时候默认为升序
ASC 升序,默认额的
DESC 降序
select * from 表名 order by age DESC;例2:按age排序,如果age相同,按math排序
select * from 表名 order by age DESC, math DESC;聚合函数
将一列数据作为一个整体,进行一个计算
1,count : 计算个数
2,max :计算最大值
3,min : 计算最小数
4,sum :计算和
5,avg : 计算平均数
注意:聚合函数的计算,会排除null值
例1:判断 name 一共有多个条数据
select
count(name)
from
表名;因为有可能存在空值,所以最好还是用ifnull 则为:
select
count(ifnull(name,'无'))
from
表名;这里我把name字段里为null的值替换成了'无'
例2:找出 age 字段里的最大值和最小值
最大值:select max(age) from 表名;
最小值:select min(age) from 表名;例3:计算 math 字段所有数据的和
select sum(math) from 表名;例4:计算 age 字段的平均年龄
select avg(math) from 表名;分组查询
语法: group by 分组字段;
注意,分组后的字段,只能写 分组字段 和 聚合函数字段
例1: 按照sex分组,然后查分组后的age的平均值
select
sex,
avg(age)
from
表名
group by sex;例2:按sex分组,然后查看男女的人数
select
sex,
count(sex)
from
表名
group by sex;例3:按例1分组,但age大于18才能参与分组
select
sex,
avg(age)
from
表名
WHERE
age>18
group by sex;例4:按例1分组,并且查看男女人数,而且age大于18才能参与,并且在分组后,人数大于2才能显示
select
sex,
avg(age),
count(sex)
from
表名
where
age>18
group by sex
Having count(sex)>2;where 和 having 的区别
where在分组之前进行判断,如果不满足,则不会参与分组。
having在分组之后判断,如果不满足,则不会显示出来
where不能进行聚合函数的判断,having可以进行聚合函数的判断
分页查询
语法: limit 开始的索引,每页查询的条数
例1: 每页显示3条记录
select * from 表名 limit 0,3;公式:开始的索引=(当前页码-1)* 每页显示的条数
分页的操作是一个"方言",现在这个分页的语法,只在MYSQL里才能使用
约束
概念:对表中的数据进行限定,保证数据的完整性,正确性,有效性
约束的分类
主键约束:primary key
非空约束: not null
唯一约束:unique
外键约束: foreign key
非空约束的使用方法
1,创建表时使用约束,例
create table 表名(
id int,
name varchar(20) not null ----name不能为空
);2,删除非空约束
alter table 表名 modify 列名 对应的数据类型;3,创建表后添加非空约束
alter table 表名 modify 列名 对应的数据类型 not null;唯一约束的使用方法
1,创建表时使用
create table 表名(
id int unique,
name varchar(20)
);2,创建表后使用
alter table 表名 modify 列名 对应的数据类型 nuique;
这里有可能会因为已经存在重复数据,导致添加不进去,所以得注意一下3,删除唯一约束
alter table 表名 drop index 列名;注意:
唯一约束可以有null,但只能又一条为null
主键约束
注意:添加主键约束,则表示非空且唯一!
一张表只能又一个主键!
主键就是表中的唯一标识
1,在创建表的时候添加主键约束
create table 表名(
id int primary key, ------给id添加主键约束
name varchar(20)
);2,在创建后添加主键约束
alter table 表名 modify 列名 int primary key;3,删除主键
alter table 表名 drop primary key;自动增长
概念:如果某一列是数字类型,使用 auto_increment 可以来完成自动增长
例:在创建表的时候可以使用自动增长
create table 表名(
id int primary key auto_increment,
name varchar(20)
);注意:自动增长是根据上一条数据进行的判断,如果手动输入一个数,下一个数会根据上一个数加1
删除自动增长
alter table 表名 modify 列名 对应的数据类型;添加自动增长
alter table 表名 modify 列名 对应的数据类型 auto_increment;外键约束
外键可以为null,但不能为不存在的外键值
在创建表时可以添加外键
create table 表名(
……
外键列,
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);这里的主表得先创建才行!
删除外键
alter table 表名 drop FOREIGN KEY 外键名;
这个外键名不是例名,在自己起的那个名称!添加外键
alter table 表名 ADD constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称);级联操作
这个需要在添加的时候设置级联
级联更新:
在上面那个添加外键后面添加 on update cascade ;
效果:修改主键值后,对应关联列,也会改变
添加代码如下:
alter table 表名 ADD constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)on update cascade ;级联删除:
效果:删除主键后,对应关联列,也会删除(那一排都删除了)
在添加外键后面添加 on delete cascade;
alter table 表名 ADD constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)on delete cascade ;级联更新和级联删除可以一起用
代码如下:
xxxxxxxxxx alter table 表名 ADD constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)on delete cascade on update cascade ;中间没有逗号!
MYSQL的回忆录(适合有基础的小伙伴看,没基础的看着估计够呛)的更多相关文章
- 深入浅出DOM基础——《DOM探索之基础详解篇》学习笔记
来源于:https://github.com/jawil/blog/issues/9 之前通过深入学习DOM的相关知识,看了慕课网DOM探索之基础详解篇这个视频(在最近看第三遍的时候,准备记录一点东西 ...
- 入门python有什么好的书籍推荐?纯干货推荐,你值得一看 python基础,爬虫,数据分析
Python入门书籍不用看太多,看一本就够.重要的是你要学习Python的哪个方向,或者说你对什么方向感兴趣,因为Python这门语言的应用领域比较广泛,比如说可以用来做数据分析.机器学习,也可以用来 ...
- Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)
转自:Mysql数据库优化技术之配置篇.索引篇 ( 必看 必看 ) (一)减少数据库访问对于可以静态化的页面,尽可能静态化对一个动态页面中可以静态的局部,采用静态化部分数据可以生成XML,或者文本文件 ...
- 15个初学者必看的基础SQL查询语句
本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...
- [SQL基础教程] 2-1 SELECT语句基础
[SQL基础教程] 2-1 SELECT语句基础 列的查询 Syntax SELECT<列名>,..... FROM<表名>; SELECT col_1, col_2 FROM ...
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
- C#_02.13_基础三_.NET类基础
C#_02.13_基础三_.NET类基础 一.类概述: 类是一个能存储数据和功能并执行代码的数据结构,包含数据成员和函数成员.(有什么和能够干什么) 运行中的程序是一组相互作用的对象的集合. 二.为类 ...
- Java基础16:Java多线程基础最全总结
Java基础16:Java多线程基础最全总结 Java中的线程 Java之父对线程的定义是: 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进 ...
- laravel基础课程---4、Laravel基础网站结构搭建
laravel基础课程---4.Laravel基础网站结构搭建 一.总结 一句话总结: 1.搭建网站前后台路由:在路由组Route::group()中设置好命名空间和前缀 2.搭建控制器:比如1)新建 ...
- ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我们将介绍 A ...
随机推荐
- JavaScript根据参数获取url中参数名的值
//假设ulr如下var localhost="http://127.0.0.1?name=tom&sex=男&id=1";//正则方法封装function Get ...
- 关于csh-C-shell的记录
csh,由柏克莱大学的 Bill Joy 设计的,语法有点类似C语言,所以才得名为 C shell ,简称为 csh Bill Joy 是一个风云人物,他创立了 BSD 操作系统,开发了 vi 编辑器 ...
- Java学习之路:Dos命令
2022-10-08 10:25:42 (一)打开CMD的方式 开始+系统+命令提示符 Win+R 输入cmd打开控制台 在任意的文件夹下面,按住Shift+鼠标右键,点击在此打开命令行窗口 资源 ...
- 齐博x1更新了 提供一个部分用户期待已久的功能,修改主题后变为待审
如下图所示,你可以设置哪些用户组修改主题后,就会把原来已审核通过的主题,变为未审核.适合所有频道.
- 第2-1-1章 FastDFS分布式文件服务背景及系统架构介绍
目录 1 背景 1.1 为什么需要分布式文件服务 1.1.1 单机时代 1.1.2 独立文件服务器 1.1.3 分布式文件系统 1.2 什么是FastDFS 2 系统架构 2.1 Tracker集群 ...
- MySQL数据库的性能分析 ---图书《软件性能测试分析与调优实践之路》-手稿节选
1 .MySQL数据库的性能监控 1.1.如何查看MySQL数据库的连接数 连接数是指用户已经创建多少个连接,也就是MySQL中通过执行 SHOW PROCESSLIST命令输出结果中运行着的线程 ...
- Vue2 到 Vue3,重温这 5 个常用的 API
距离Vue3发布已经过去一年多时间了,从Vue2到Vue3是一个不小的升级,包括周边生态等.虽然目前大多数开发者们在使用的仍旧以Vue2为准,但Vue3显然是Vue开发者们未来必须面对的,而且前不久V ...
- 2022春每日一题:Day 10
题目:CF1110E Magic Stones 每次操作 c[i]变成c[i-1]+c[i+1]-c[i],那么显然,c[1]和c[n]是不会改变的,因此只要c[1]和t[1],c[n]和t[n]不相 ...
- PS2023下载安装保姆级教程中文汉化完整版
PS2023Windows安装教程退出安全软件①:下载PS2023安装包 ②:打开下载好的文件,鼠标右键把安装包解压③:打开解压好的"PS 24.0.0"文件夹,找到并选中&quo ...
- openssh编译rpm包(防火防盗防漏扫)
参考链接:https://www.jianshu.com/p/0882b0502960 openssh下载链接: wget https://cdn.openbsd.org/pub/OpenBSD/Op ...