mysql学习笔记

由于毕设的需要,最近不得不广泛学习一些前端、后台的知识,为了以后复习整理方便,也希望能给一些需要对这方面有所了解的朋友们一点点帮助,特将最近的学习笔记上传,小白上路,请各路大仙支持,如有不妥请指正!(学习内容来源于CCtalk云和数据 H5191201ZK(下午)课程,张老师讲得非常详细!)
用到的软件是MySQL和Navicat,编译器能用都行,我目前使用的是Visual Studio Code

<-- MySQL 基本操作 -->

//重点说明
/对表名的操作均需要对其使用反引号``/

<-- 数据库操作 -->

使用数据库
    use masql;

创建数据库
    create database 数据库名;
    例如:创建auto数据库
        create database auto;
    
显示所有数据库
    show databases;

删除数据库
    drop database 数据库名;
    例如:删除auto数据库
        drop database auto;

使用数据库
    use 数据库名;

查询当前连接数据库
    select database();

显示当前连接数据库所有表
    show tables;

<-- 数据库表操作 -->

创建表
    创建单个数据
        create table 表名(字段名 类型(长度));
            例如:创建auto数据库  
                create table class(id int(20));

    创建多个数据
        create table 表名(字段名 类型(长度) ,字段名 类型(长度),......)

(增)表内数据插入 //插入现有字段下单独的一行数据,不能对没有的字段进行设置
    insert into 表名(字段名1,字段名2,...,字段名n)values(值1,值2,...,值n),(值1,值2,...,值n);

    //在已有字段名下添加
    insert into 表名 value(值1,值2,...,值n),(值1,值2,...,值n);

    /*decimal(n,m)表示数值*有n位数,其中整数n-m位,小数m位*/

(删)删除表
    drop table 表名;

    删除当前表中指定数据
        delete from 表名 where 表达式;
        例如:删除当前表中id为3的数据
            delete from `neo-7n-0-002-gps` where id=3;

(改)更改表中数据
    opdate 表名 set 字段=新值1,...新值n where 条件;
    例如:更改id为1的longitude值为104.564234
        update `neo-7n-0-002-gps` set longitude=104.564234 where id=1;

    在已有的数据库表中添加表中字段
        alter table 表名 add 字段名 类型(长度);
    
    修改字段(修改字段名、字段类型、长度)
        修改字段名:
            alter table 表名 change 旧字段名  新字段名

        修改字段类型
            alter table 表名 modify 字段名 字段类型(字段长度)

    删除字段
        alter table 表名 drop 字段名   

(查)显示表信息
    desc 表名   /*或者*/    show cowlmns from 表名
    
    查询所有数据(基本语句格式(列))
        select 字段1,字段2,...,字段n from 表名;
        例如:查询id列
            select id from `neo-7n-0-002-gps`;

        如果查询当前表中所有数据(使用通配符*表示所有)
            select * from 表名;
    
    查询前几行数据
        select * from 表名 order by 字段名 limit 限制条件;
        例如:按照id查询neo-7n-0-002-gps表中前四个数据
            select * from `neo-7n-0-002-gps` order by id limit 0,4;   //0代表起始行但不包含起始行,4代表结束行,包含当前行

    /*增加说明*/
        where 用来筛选数据(条件查询)
            select * from 表名 where 表达式;
        where语句后面可以跟多个条件,从而显示查询的数据,多个条件之间使用and或者or连接
            select * from 表名 where 表达式1 and (表达式2 or 表达式3);

        group by 用来分类汇总
            后面跟着要汇总的字段,可以跟多个字段,中间以逗号分隔
            例如:
                group by id表示按照id进行数据分类汇总

            //常用的汇总
                count(*或者字段) 按照记录或者字段统计记录数   //count(*)包含所有的数据  count(字段)会忽略null的字段
                例如:统计id的记录数
                    select id,count(*) as num from `neo-7n-0-002-gps` group by id;   //以指定别名num查询,通过id进行分组

                sum(字段) 对字段进行求和

                avg(字段) 对字段求均值

                max(字段) 求字段中的最大值

                min(字段) 求字段中的最小值
            
        having 用来筛选分类汇总结果 /*只能以指定别名操作*/
            一般和group by配合使用,表示在得到分类汇总的基础上,进一步筛选记录
            having后面只能是汇总的字段或者聚合的函数

            例如:通过id进行分组,对latitude指定别名lat,并在分类基础上筛选latitude大于30.124536的数据
                select id,count(*),max(latitude) as lat from `neo-7n-0-002-gps` group by id having lat>30.124536;

        order by 用来排序(有升序和降序两种排列方式)
            desc 表示降序  asc表示升序(可省略,默认升序)
                例如:按照id进行降序排列
                select * from `neo-7n-0-002-gps` order by id desc;

                //如果数据类型是int类型排序直接比较大小,如果是字符串,里面有数字或者字母,会按照字符串的顺序进行排序

                order by需要在where后面,limit前面
                    如果后台指定多个排序字段,中间可以逗号分隔
                        select * from `neo-7n-0-002-gps` order by id desc,longitude desc;

        limit 用来取出指定的记录数
            取得一定范围的记录集,此函数通常用分页
            用法:
                select * from 表名 limit 起始位置,长度;
                //如果起始位置为0,那么第二个参数可以作为行或者长度
                //如果第一个参数为非0,那么第二个参数代表长度

                所以第二个参数综合可以作为长度

                eg: select * from `neo-7n-0-002-gps` limit 2;   //如果只有一个数字,那么该数字表示长度

                /*limit写在查询语句的最后*/

/*指定别名查询*/
    select 字段名1 as "新的字段名1",字段名2 as "新的字段名2",...,字段名n as "新的字段名n" from 表名;
    //指定别名只是为了显示更加直观,并不改变标的字段名

<-- like及in关键字 -->

like 表示相似(类似于contain查询,即模糊查询) //多用于search搜索框

语法:
    select * from 表名 where 字段 like "字符及通配符";  

        例如:
        select * from `neo-7n-0-002-gps` where id like "1"   //不加%:查询id为1的数据,等价于where id=1
        select * from `neo-7n-0-002-gps` where id like "1%"   //字符后加%:检索以1开头的数据
        select * from `neo-7n-0-002-gps` where id like "%1%"   //字符前后均加%:完全模糊检索,不管1的位置,标准模糊检索格式

in 表示列表中是否包含此类信息 in() 此信息指in括号中的内容

语法:
    select * from 表名 where 字段 in(字段值1,字段值2,...,字段值n);   //括号中若是字符串,应使用单引号括起来

    例如:
        select * from `neo-7n-0-002-gps` where id in(1,5,7);
    等价于
        select * from `neo-7n-0-002-gps` where id=1 or id=5 or id=7;

<-- 多表查询及子查询 -->

查询表中某一列

select 字段1,字段2,...,字段n from 表名;
    完整语法:
        select 表名.列名1,表名.列名2,...,表名.列名n from 数据库名.表名;
    
字段的别名,表也可以指定别名

    select 别名.列名 from 表名 别名;
    select * from 表名;
    等效于
    ==> select 表名.* from 表名;
    ==> select 别名.* from 表名 别名;
    ==> select 别名.列名1,别名.列名2,...,别名.列名n from 表名 别名;

多表查询
当当前表满足不了当前的需求,此时就需要进行多表查询

语法:
    select 字段1,字段2,...,字段n from 表1,表2,...,表n where 表达式;
    例如:
    select 字段1,字段2 from 表1,表2 where 表1.字段n=表2.字段n;
    等效于:
    select 别名1.字段1,别名2.字段2 from 表名1 别名1,表名2 别名2 where 别名1.字段n=别名2.字段n;
    //select 别名1.*,别名2.* from 表名1 别名1,表名2 别名2 where 别名1.字段n=别名2.字段n;

    select 别名1.字段1,别名2.字段2 from 表名1 别名1 join 表名2 别名2 on 别名1.字段n=别名2.字段n;
    //select 别名1.*,别名2.* from 表名1 别名1 join 表名2 别名2 on 别名1.字段n=别名2.字段n;

2020-04-09 23:14

<-- MySQL字段(数据)类型 -->

大致分为三类
数值
日期/时间
字符串

数值类型

integer  smallint  decimal  numeric
//近似数值的数据类型  
float real double precision
关键字 int dec

日期类型
为表示时间和日期的数据类型

dete  日期值  年-月-日
time  时间值或持续时间  时:分:秒
detetime  混合日期和时间值  年-月-日 时:分:秒
year  年份值  年(2020)
timestamp  混合日期或时间值、时间戳  年-月-日 时:分:秒  /*基本用于js中时间计算,例如博文发表于xxx前*/

字符串类型

char  定长字符串  0-255
varchar  变长字符串  0-65535
text  长文本数据  0-65535
longtext  极大文本数据  0-4294967295
blob  二进制长文本数据  0-255
longblob  二进制极大长文本数据  0-4294967295

//其他类型
binary  varbinary  set  eunm

2020-04-10 10:11

mysql学习笔记

上一篇:Android app option menu


下一篇:LeetCode#453 最小移动次数使数组元素相等