• mysql总结


    mysql命令行:

    如何使用命令行:配置mysql的环境变量path指向mysql的安装目录下的bin文件夹,
    然后在cmd中直接可以调用mysql

    mysql -h localhost -u(usernemw) root -p(password) root.
    -h 可以不写,默认localhost


    show databases; --显示所有的数据库。
    drop database php--删除数据库。

    create database php;--创建一个数据库。
    use php;--选择这个数据库。
    show tables ;--显示选中的数据库中的数据表。
    rename table oldname to newname;--修改表名,数据库的名字不能修改
    drop table tablename.--删除表

    desc tablename;--查看表的结构,描述信息等,相当于设计表时候的样子。
    c 当输入错误时,输入c表示退出当前的编辑行,重新输入


    set names gbk;--设置编码。


    where 常用的运算符;

    比较运算符

    != 或者<>

    in 在某个集合内,

    between and在某个范围内。

    逻辑运算符;

    or或者& 逻辑或

    and或者&& 逻辑与

    not 或者! 逻辑非

    模糊查询

    like

    两个通配符:

    % --匹配任意字符;
    _ --下划线,匹配一个字符;

    group by 分组查询 ,用于配合聚合函数来使用,where 是条件查询,两者本质不同

    注意:
    在select 后面的字段如果没有用聚合函数来包括,则必须出现在group by 后面;

    可以将列的字段名可以当作变量来使用,也就是可以将列名进行加减乘除的运算

    having 子句与where子句的区别:

    1、作用对象不同:where子句作用于表(或视图)中得行,而having子句作用于形成的组; where子句限定查找的行,having子句限定查找的组;

    2、执行顺序不同:若查询语句中同时有where子句和Having子句,执行时先去掉不满足where条件的行,然后分组,分组后再去掉不满足having条件的组;

    3、where子句不能直接使用聚合函数,having子句条件中可以包含聚合函数

      4、where作用于查询结果集出现之前,而having作用于结果集出现之后,所以才称having是对结果集的筛选,


    order by子句 按一个或着两个子句对结果进行排序

    desc 降序排列,asc 升序排列


    示例:查询两门或者两门以上不及格同学的平均分:
    select stu_id ,sum(score<60)as gk,avg(score) from student group by stu_id having gk>=2


    limit 在语句后面 限制条目的作用,,用于分页之用。


    limit [offset][num]


    offset 偏移量,
    num 取出的条目。

    分页查询时,通常offset的取值为(page-1)*num page 为当前的页数
    num 即为num

    三种子查询:

    where子查询:将内层的查询结果作为外层查询的比较条件

    from子查询:将内层查询的结果作为临时表,供外层再次进行sql查询。

    exsits子查询;将外层的查询结果,拿到内层,看内层的查询是否成立


    多表查询:

    不写join left 或者join right 相当于inner join 即取交集。

    内连接是相对于外连接来说的
    内连接和等值连接效果是相同的

    1、等值连接中不要求相等属性值的属性名相同,而自然连接要求相等属性值的属性名必须相同,即两关系只有在同名属性才能进行自然连接。
    如上例R中的C列和S中的D列可进行等值连接,但因为属性名不同,不能进行自然连接。
    2、等值连接不将重复属性去掉,而自然连接去掉重复属性,也可以说,自然连接是去掉重复列的等值连接。
    数据库内连接、左连接、右连接


    1.内连接我们通常用的连接,表表连接只显示交集数据

    2.外连接分左外连接 table1 left outer join on table2

    和右外连接table1 right outer join on table2 和全连接

    table1 full outer join on table2

    2.1左外连接就是在等值连接的基础上加上主表中的未匹配数据
    2.2右外连接是在等值连接的基础上加上被连接表的不匹配数据
    2.3全外连接是在等值连接的基础上将左表和右表的未匹配数据都加上.

    内连接:把两个表中数据对应的数据查出来
    外连接:以某个表为基础把对应数据查出来(全连接是以多个表为基础)

    student表
    no name
    1 a
    2 b
    3 c
    4 d

    grade表
    no grade
    1 90
    2 98
    3 95

    内连接 inner join(查找条件中对应的数据,no4没有数据不列出来)
    语法:select * from student inner join grade on student.no = grade.no
    结果
    student.no name grade.no grade
    1 a 1 90
    2 b 2 98
    3 c 3 95

    左连接(左表中所有数据,右表中对应数据)
    语法:select * from student left join grade on student.no = grade.no
    结果:
    student.no name grade.no grade
    1 a 1 90
    2 b 2 98
    3 c 3 95
    4 d

    右连接(右表中所有数据,左表中对应数据)
    语法:select * from student right join grade on student.no = grade.no
    结果:
    student.no name grade.no grade
    1 a 1 90
    2 b 2 98
    3 c 3 95

    全连接
    语法:select * from student full join grade on student.no = grade.no
    结果:
    no name grade
    1 a 90
    2 b 98
    3 c 95
    4 d
    1 a 90
    2 b 98
    3 c 95


    视图的概念:view

    视图是由查询结果形成的一张虚拟表,

    创建视图:
    create view 试图名 as select 语句

    为什么要建立视图??
    1、简化查询。如果有一个复杂的查询,则可以直接操作view。
    2、大数据分表的时候使用,

    大数据如何分表?
    当一个标的行数大于200万时,可以把一张表分为4张表来存储,
    news表,分为news1 news2 news3 news4 四张表,



    怎么分??
    通过id取模来分id%4+1=[1、2、3、4] id落在1234这个范围内,
    假如取到的id为17,则17%4+1=2 则从news2中进行查询



    触发器的概念:

    监视某种状态并触发某种操作。
    监视某表的变化,当发生某种变化的时候就触发某种操作。


    使用场景:
    完成下单与减少库存的逻辑,
    两个操作联系紧密,所以会用到触发器的概念。


    能监视: 增删改

    能触发: 增删改

    监视对象:table 监视事件: 增删改 触发事件: 增删改 触发时间: before/after.


    触发器的四要素:

    监事事件:
    insert/update/delete
    监视时间:
    before/after
    监视对象:
    table
    触发事件:
    begin
    sql语句;
    end;

    create trigger triggername
    before/after insert/update/delete on table
    for each row #这句在mysql中是写死的,oracle中可能跟这个不同,
    begin
    sql语句;
    end;


    删除触发器?

    drop trigger triggername;

    如何在触发器中引用行的值

    对于insert而言,新增的行用new来表示。
    行中的列用new.列名来表示

    对于delete而言,删除的行用old来表示。
    行中的列用old.列名来表示。

    对于update而言,
    修改前的数据用old来表示,old.列名来引用被修改之前行中的值。
    修改后的数据用new来表示,new.列名来引用被修改之后行中的值。


    什么叫存储引擎??


    数据库对于同样的数据有着不同的存储方式和管理方式,在mysql中叫做存储引擎


    两种常见的存储引擎,myisam 和innoDB区别:

      myisam innoDB
    批量插入的速度 高  
    事物安全 不支持 支持
    全文索引 支持 高版本的mysql是支持的
    锁机制 表锁 行锁

    什么是事物、??

    通俗的说,

    一组操作,要么全部执行成功,要么一个都不执行 --》原子性

    在所有的操作没有执行完毕之前,其他的会话不能够看到中间改变的过程 --》隔离性

    事物发生前 和发生后,数据的总额依然是匹配的 -->一致性

    事物产生的影响是不能够撤销的 --》持久性

    作者:no-npe
    出处:https://www.cnblogs.com/geekdc
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
    由于作者个人水平有限,如果文中有什么错误,欢迎指出。以免更多的人被误导。

  • 相关阅读:
    linux源码方式安装Apache
    linux的chmod,chown命令详解
    2011年10月18日
    mysql检查查询及索引效率方法(explain)
    php中英文字符串的研究
    2011年10月20日
    PHP JSON中文乱码解决方法大全
    解决PHP下载文件名中文乱码
    php字符串学习笔记
    CSU_BMW正式组队纪念赛出题+部分解题报告
  • 原文地址:https://www.cnblogs.com/geekdc/p/5188306.html
Copyright © 2020-2023  润新知