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 数据库名;

操作表

  1. C(create):创建

    创建表语法:

    create table 表名(
      列名1 数据类型,
      列名2 数据类型,
      …………
      列名n 数据类型
    );
    最后一个列不需要加逗号

    复制一个表:

    create table 表名 like 被复制的表名;
  2. R(Retrieve): 查询

    查询某个数据库中所有的表名称:

    show tabales;

    查询表结构:

    desc 表名;
  3. U(Update): 修改

    修改表名

    alter table 表名 rename to 新得表名

    修改表的字符集

    alter table 表名 character  set 字符集;

    添加一列

    alter table 表名 add 列名 数据类型;

    修改列名称 类型

    alter table 表名 change 列名 修改后的新列名 新数据类型

    只改数据类型

    alter table 表名  modify 列名 新的数据类型

    删除列

    alter table 表名 drop 列名;
  4. 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 的区别
    1. where在分组之前进行判断,如果不满足,则不会参与分组。

    2. having在分组之后判断,如果不满足,则不会显示出来

    3. 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的回忆录(适合有基础的小伙伴看,没基础的看着估计够呛)的更多相关文章

  1. 深入浅出DOM基础——《DOM探索之基础详解篇》学习笔记

    来源于:https://github.com/jawil/blog/issues/9 之前通过深入学习DOM的相关知识,看了慕课网DOM探索之基础详解篇这个视频(在最近看第三遍的时候,准备记录一点东西 ...

  2. 入门python有什么好的书籍推荐?纯干货推荐,你值得一看 python基础,爬虫,数据分析

    Python入门书籍不用看太多,看一本就够.重要的是你要学习Python的哪个方向,或者说你对什么方向感兴趣,因为Python这门语言的应用领域比较广泛,比如说可以用来做数据分析.机器学习,也可以用来 ...

  3. Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)

    转自:Mysql数据库优化技术之配置篇.索引篇 ( 必看 必看 ) (一)减少数据库访问对于可以静态化的页面,尽可能静态化对一个动态页面中可以静态的局部,采用静态化部分数据可以生成XML,或者文本文件 ...

  4. 15个初学者必看的基础SQL查询语句

    本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...

  5. [SQL基础教程] 2-1 SELECT语句基础

    [SQL基础教程] 2-1 SELECT语句基础 列的查询 Syntax SELECT<列名>,..... FROM<表名>; SELECT col_1, col_2 FROM ...

  6. Java基础学习笔记八 Java基础语法之接口和多态

    接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...

  7. C#_02.13_基础三_.NET类基础

    C#_02.13_基础三_.NET类基础 一.类概述: 类是一个能存储数据和功能并执行代码的数据结构,包含数据成员和函数成员.(有什么和能够干什么) 运行中的程序是一组相互作用的对象的集合. 二.为类 ...

  8. Java基础16:Java多线程基础最全总结

    Java基础16:Java多线程基础最全总结 Java中的线程 Java之父对线程的定义是: 线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进 ...

  9. laravel基础课程---4、Laravel基础网站结构搭建

    laravel基础课程---4.Laravel基础网站结构搭建 一.总结 一句话总结: 1.搭建网站前后台路由:在路由组Route::group()中设置好命名空间和前缀 2.搭建控制器:比如1)新建 ...

  10. ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 基础教程 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 是对 ASP.NET 有重大意义的一次重新设计.本章节我们将介绍 A ...

随机推荐

  1. 把train数据集生成txt(test同理)

    import cv2 import numpy as np import os import sys import pickle data_dir = os.path.join("./&qu ...

  2. 方法的重载(overload)

    1.定义:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可. "两同一不同":同一个类.相同方法名 参数列表不同:参数个数不同,参数类型不同 2.举 ...

  3. 【番外篇】Rust环境搭建+基础开发入门+Rust与.NET6、C++的基础运算性能比较

    前言:突然想打算把Rust作为将来自己主要的副编程语言.当然,主语言还是C#,毕竟.NET平台这么强大,写起来就是爽.缘起:之前打算一些新的产品或者新的要开发的东西,由于没有历史包袱,就想重新选型一下 ...

  4. 在vue中引入elementui

    文章目录 1.下载安装 2.在main.js中引入 3.可以根据封装好的组件自行调用 官网地址:https://element.eleme.cn/#/zh-CN 1.下载安装 npm i elemen ...

  5. 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 ...

  6. springMVC必要jar包

    spring-aop-4.3.2.RELEASE.jar :: 包含在应用中使用Spring 的AOP 特性时所需的类和源码级元数据支持. spring-beans-4.3.2.RELEASE.jar ...

  7. C# String.Empty和""的区别

    个人观点 Empty其实是string类中的一个静态的只读字段,因为是静态成员变量,所以String.Empty是在设计String类的时候就已经在内存上分配好了空间,故在使用Empty这个变量的时候 ...

  8. 云原生之旅 - 5)Kubernetes时代的包管理工具 Helm

    前言 上一篇文章 [基础设施即代码 使用 Terraform 创建 Kubernetes] 教会了你如何在Cloud上面建Kubernetes资源,那么本篇来讲一下如何在Kubernetes上面部署应 ...

  9. 第 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 ...

  10. Spring Boot 中使用 Swagger

    前后端分离开发,后端需要编写接⼝说明⽂档,会耗费⽐较多的时间. swagger 是⼀个⽤于⽣成服务器接⼝的规范性⽂档,并且能够对接⼝进⾏测试的⼯具. 作用 ⽣成接⼝说明⽂档 对接⼝进⾏测试 使用步骤 ...