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 ...
随机推荐
- 把train数据集生成txt(test同理)
import cv2 import numpy as np import os import sys import pickle data_dir = os.path.join("./&qu ...
- 方法的重载(overload)
1.定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可. "两同一不同":同一个类.相同方法名 参数列表不同:参数个数不同,参数类型不同 2.举 ...
- 【番外篇】Rust环境搭建+基础开发入门+Rust与.NET6、C++的基础运算性能比较
前言:突然想打算把Rust作为将来自己主要的副编程语言.当然,主语言还是C#,毕竟.NET平台这么强大,写起来就是爽.缘起:之前打算一些新的产品或者新的要开发的东西,由于没有历史包袱,就想重新选型一下 ...
- 在vue中引入elementui
文章目录 1.下载安装 2.在main.js中引入 3.可以根据封装好的组件自行调用 官网地址:https://element.eleme.cn/#/zh-CN 1.下载安装 npm i elemen ...
- python求列表均值,方差,标准差
import numpy as np a = [1,2,3,4,5,6] #求均值 a_mean = np.mean(a) #求方差 a_var = np.var(a) #求标准差 a_std = n ...
- springMVC必要jar包
spring-aop-4.3.2.RELEASE.jar :: 包含在应用中使用Spring 的AOP 特性时所需的类和源码级元数据支持. spring-beans-4.3.2.RELEASE.jar ...
- C# String.Empty和""的区别
个人观点 Empty其实是string类中的一个静态的只读字段,因为是静态成员变量,所以String.Empty是在设计String类的时候就已经在内存上分配好了空间,故在使用Empty这个变量的时候 ...
- 云原生之旅 - 5)Kubernetes时代的包管理工具 Helm
前言 上一篇文章 [基础设施即代码 使用 Terraform 创建 Kubernetes] 教会了你如何在Cloud上面建Kubernetes资源,那么本篇来讲一下如何在Kubernetes上面部署应 ...
- 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)-L Bit Sequence
题意 给你两个数l,m,大小为m的数组a,求[0,l]之间满足以下条件的数x的个数: 对于任何i输入[0,m-1],f(x+i)%2=a[i]:f(k):代表k在二进制下1的个数 m的范围<=1 ...
- Spring Boot 中使用 Swagger
前后端分离开发,后端需要编写接⼝说明⽂档,会耗费⽐较多的时间. swagger 是⼀个⽤于⽣成服务器接⼝的规范性⽂档,并且能够对接⼝进⾏测试的⼯具. 作用 ⽣成接⼝说明⽂档 对接⼝进⾏测试 使用步骤 ...