zoukankan      html  css  js  c++  java
  • mysql学习一

    基础

    数据库的命令:

      查看所有数据库: show databases;

       查看当前使用的数据库:select database();

      切换数据库:use 数据库名;

      创建数据库:create database 数据库名 charset=utf8;

      删除数据库:drop database 数据库名;

    数据表的命令:

      查看所有的表:show tables;

      创建表:create table 表名(id int auto_increment primary key not null,...)

      删除表:drop table 表名;

      修改表:alter table 表名 add | change | drop 列;

    数据的命令:

      查询:select * from 表名;

      增加:insert into 表名 values(...);

      修改:update 表名 set 字段=值 ...

      删除:delete from 表名;

      逻辑删除:在表中增加一个列,比如增加一个列名为isDelete的列,类型为bool类型,将需要删除的记录的该字段值修改为1,而不是正真删除该记录。查询时,只要查询isDelete=0的记录就可以了。

    基本查询:

    select * from 表名;

    select 列名1,列名2,... from 表名;

    distinct 关键字 消除重复的行

    select distinct 列名1,列名2,... from 表名;

    条件查询:

    select * from 表名 where 条件;

    模糊查询:

    like:

    %:表示任意多个字符

    _:表示任意一个字符

    select * from 表名 where 列名 like  'xx%x';

    范围查询:

    in:表示在一个非连续的范围内

      查询id为1或3或4的记录

      select * from 表名 where id in(1,3,4);

    between ... and ... :表示在一个连续的范围内

      查询id在1到4之间的记录

      select * from 表名 where id between 1 and 4;

    空判断:

      注意:null与''(两个单引号之间什么都没有,表示一个空字符串)是不同的

      判断:is null

    聚合:mysql中常用的5个聚合函数

      count(*):计算总行数,括号中写*或列名

        select count(*)  from 表名;

      max(列):表示求此列的最大值

        select  max(id) from 表名;

      min(列):表示求此列的最小值

        select min(id) from 表名;

      sum(列):表示求此列的和

        select sum(id) from 表名;

      avg(列):表示求此列的平均值

        select avg(id) from 表名;

    分组:

      按照字段分组:表示此字段相同的数据会被放到一个组中,分组后,只能查询出相同的数据列,对于有差异的数据列无法出现在结果集中。可以对分组后的数据进行统计,做聚合运算

      select 列1,列2,聚合 ... from 表名 group by 列1,列2...

      分组后的数据筛选:

        select 列1,列2,聚合 ... from 表名

        group by 列1,列2,列3...

        having 列1,...聚合...

      注意:having和where的区别:

        where:是对from后面指定的表进行数据筛选,属于对原始数据进行筛选

        having:表示对group by(分组后)的结果集进行筛选

        原始集---where--->结果集---group--->结果集---having--->

    排序:

      select * from 表名 order by 列1 asc | desc,列2 asc | desc,...

    分页:

      select * from 表名 limit start,count

      表示从start开始,获取count条数据,start索引从0开始

      示例:

        已知:每页显示m条数据,当前显示第n页(n从1开始)

        求总页数:

          查询总条数p1

          使用p1除以m得到p2

          如果整除则p2为总页数

          如果不整除则p2+1为总页数

        求第n页的数据

        首先计算第n页数据的开始索引,计算方法如下:

        n  start

        1  0       第一页,从0开始

        2  m      第二页,从m开始

        3  (n-1)*m  第n页,从(n-1)*m开始  

        select * from 表名 limit (n-1)*m,m

    基础总结:

      完整的select语句的写法:

      select distinct * from 表名

      where ...

      group by ... having ...

      order by ...

      limit start,count

      执行顺序:

        from 表名

        where ...

        group by ...

        select distinct *

        having ...

        order by ...

        limit start,count

    高级:关系,视图,事务,索引

    关系:

    学生表:成绩表:科目表

    id    id    id

    name  score    title

          stuid(对应学生表的id)

          subid(对应科目表的id)

    CREATE TABLE students(
    id INT PRIMARY KEY AUTO_INCREMENT,
    sname VARCHAR(20)
    );
    ALTER TABLE students ADD sname VARCHAR(20);
    CREATE TABLE subjects(
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(20)
    );
    
    CREATE TABLE scores(
    id INT PRIMARY KEY AUTO_INCREMENT,
    stuid INT,
    subid INT,
    score DECIMAL(5,2),
    FOREIGN KEY(stuid) REFERENCES students(id),
    FOREIGN KEY(subid) REFERENCES subjects(id)
    );

    外键的级联操作:

      在删除students表的数据时,如果该id值在scores中已存在,则报错。可以使用上面提到的

      逻辑删除解决该问题;可以在创建表时指定级联操作,也可以在创建表后再修改外键的级联操作

    alter table scores add constraint stu_sco foreign key(stuid) references students(id) on delete cascade;

      级联操作的类型:

        restrict:默认值,抛异常

        cascade:如果主表的记录删除,则从表中相关联的记录都将被删除

        set null:将外键设置为空

        no action:什么都不做

    连接:

    连接查询分类:

      表A inner join 表B:表A和表B匹配的行会出现在结果中

      表A left join 表B:表A和表B匹配的行会出现在结果中,外加表A中独有的数据,未对应的数据使  用null填充

      表A right join 表B:表A和表B匹配的行会出现在结果中,外加表B中独有的数据,未对应的数据  使用null填充

    在查询或条件中推荐使用"表名.列名"的语法

    如果多个表中列名不重复可以省略"表名."部分

    如果表的名称太长,可以在表名后面使用'as 简写名'或'简写名',为表起个临时简写名称

    总结:

      select distinct 列*

      from 表1 inner | left | right join 表2 on 表1与表2的关系

      where ...

      group by ... having ...

      order by ... asc | desc

      limit start,count

      

    自关联:

    视图:

    事务:

      使用事务可以完成回滚的功能,保证业务逻辑的正确性。

      四大特性(ACID)

      原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全不执行。

      一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。

      隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。

      持久性(durability):对于任意已提交的事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。

      要求:表的类型必须是innodb或bdb类型,才可以对此表使用事务

      示例:

        show create table students;

        alter table '表名' engine=innodb;

    索引:

        

      

  • 相关阅读:
    每日站立会议(八)
    第八周学习进度
    每日站立会议(七)
    Failed to get convolution algorithm. This is probably because cuDNN failed to initialize
    Ubuntu系统tensorflow-gpu版本配置
    二值图片批量阈值处理
    提取文件中的每一个mask,并将mask命名为文件名字
    python对图片批量命名
    Win10系统下安装labelme,json文件批量转化
    Win10,Anaconda,tensorflow-gpu安装教程
  • 原文地址:https://www.cnblogs.com/hypnus-ly/p/8277934.html
Copyright © 2011-2022 走看看