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

    安装:https://blog.csdn.net/qq_37350706/article/details/81707862

    mysql8.0官方中文文档:https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html

    窗口函数学习:https://blog.csdn.net/m0_38063172/article/details/83789830

    窗口函数运用:https://blog.csdn.net/zhangshk_/article/details/82756557

    一千行sql详细学习笔记:http://mp.weixin.qq.com/s?__biz=MzIwMTY0NDU3Nw==&mid=2651937786&idx=1&sn=8608b5fd933a551d784ac0388343d708&chksm=8d0f34b4ba78bda267c6674379f20359195d25985f5ed1cc2b2743b760941018e70568bb1d32&scene=0#rd

    事务:在mysql中只有使用了Innodb的数据引擎的数据库才支持

      保证成批的SQL语句(insert,update,delete)要么全部执行,要么全部不执行

      事务的满足条件(ACID):原子性,一致性、隔离性、持久性

      原子性:一个事务中操作要么全完成、要么全部不完成,发生错误时Rollback到事务开始前状态

      一致性:事务开始前,和开始之后,数据库的完整性没有被破坏,表示写入的资料必须完全符合预设规则

      隔离性:允许多个并发事务同事对数据进行读写和修改能力

      持久性:事务处理结束后,对数据的修改是永久的

      mysql中默认是自动提交事务,可通过set autocommit =0 来禁止自动提交

                       set autocommit=1 启动自动提交

      begin开启事务

      rollback回滚事务,回到事务开启之前

      commit提交,确认事务

    存储过程:

    格式create procedure pro_name (参数) 特性描述  routine_body

    参数:in、out、inout name type

    特性描述:language sql 说明后面部分是sql语句组成

         [not] deterministic说明执行结果是确定的,not deterministic说明执行结果是非确定的

         contains sql说明子程序包含sql语句

         no sql说明子程序不包含sql语句

         reads sql date 说明子程序中包含读数据语句

         modifies sql date说明子程序包含写数据语句

         sql security 指明谁有执行权限,definer只有定义者有,invoker调用者有

    例:

    create procedure num_from_employee(in emp_id int, out count_num int) reads sql date

    begin

      select count(*) into count_num from employee where d_id=emp_id;

    end

    执行过程

    说明:mysql的默认结束符是;,存储过程中的sql语句需要用分号;来结束,为了避免冲突可以用delimiter 改变sql的结束符,如delimiter &&,存储过程执行完之后再改变回来

    函数

    格式:create function name(参数)returns type 特性描述 routine_body

    参数:name type

     变量的使用:

    使用 declare定义变量:declare name[...] type [default value]

     DECLARE关键字是用来声明变量的;var_name参数是变量的名称,这里可以同时定义多个变量;type参数用来指定变量的类型;DEFAULT value子句将变量默认值设置为value,没有使用DEFAULT子句时,默认值为NULL

    如:declare a int default 10;

    为变量赋值:使用set ,一个set语句可以为多个变量赋值,使用,分开

    如set a=10,b=20;

    定义条件和处理程序:用于事先定义执行过程中可能遇到的问题,并在处理程序中定义解决问题的办法

    格式:declare condition_name condition for condition_value

    condition_value:

    sqlstate sqlstate_value、mysql_error_code

    定义处理程序:

    mysql中的用户变量:

    mysql变量分为两类:用户变量、系统变量

    用户变量:局部变量、会话变量

    系统变量:全局变量、会话变量

    ps:用户定义的会话变量和系统定义的会话变量有什么区别?

    局部变量用于SQL的语句块中,如存储过程中的begin和end中,作用域仅限于改语句块,生命周期也限于该存储过程

    如:create procedure add(in a int ,out b out)

    begin

      declare c int default 0;#局部变量

      set c=a+b;

      select c as c;

    end&&

    会话变量:服务器对每个客户端连接维护的变量,作用域和生命周期限于当前客户

    。。。。。

    窗口函数:

    语法:函数名(变量) over子句

     over关键字用于指定函数的窗口范围,支持一下四种语法来设置窗口

    window给窗口指定一个别名

    partition指定分组字段

    order by指定排序字段

    frame当前分区的一个子集,子句用来定义子集的规则,通常用来作为滑动窗口使用

    select* from (select row_number() over  w as row_num,order_id,user_no,amount,create_date from order_tab window w as (partition by user_no order by amount desc))t;

    https://www.cnblogs.com/DataArt/p/9961676.html

    索引

      mysql索引:可以提高检索速度

      单列索引:一个索引只包含一列,一个表可以有多个单列索引

      组合索引:一个索引包含多个列

    临时表

      只对当前连接有效,关闭连接之后自动删除并释放空间:create temporary table tmp_table1(int id,string name);

      使用show tables无法查看到临时表,断开此次连接之后,临时表自动删除

    匹配模式:like 或 not like

    _匹配单个字符

    %匹配任意数量字符

    -------------------------------------------------------------

    正则表达式:REGEXP_LIKE

    .    匹配任意单个字符

    [xyz]  匹配[ ]中的任意字符,如[0-9]表示匹配数字,[a-z]表示匹配字母

    *    匹配任意个数量,如a*表示匹配任意个数量的a,[0-9]*表示匹配任意个数字,.*表示匹配任意个数量的字符

    ^b   匹配以b开头

    $b   匹配以b结尾

    select *  from pet where regexp_like(name,'^b');  表示查询所有名字以b开头的

    order by 根据某个记录进行排序   desc 降序,asc 升序

    group by 根据某个记录进行分分组

    partition by

    having:对前面筛选出的结果再次进行筛选

    select distinct Email from Person group by Person.Email having count(Email)>1;

    where

     列属性:

    primary 主键   :create table tab(id int,name varchar(10),primary key(id));

    unique 唯一约束,使某字段的值不能重复复

    null:当前列可以为空

    default默认值:create table tab (add_time timestamp default current_timestamp);

    auto_increment自动增长,必须为primary或者unique,且只能存在一个列自动增长

    comment注释内容:create table tab(id int)comment "注释内容";

    foreign key外键约束:用于限定主表与从表数据完整性  alter table tab constraint 't1_t2_fk' foreign key(t1_id) references t2(t2_id)

    将t1的外键t1_id关联t2_id,外键还可以通过constraint指定名字

    存在外键的表为从表,外键指向的表为主表

    指定主键的删除(on delete)和更新(on uodate)时外键的操作,如果不指定,主表的操作是拒绝的

    1.cascade,级联操作,主表更新,从表更新,主表删除,从表删除

    2.set null:主表主键更新时从表的外键被设置为null,主表主键删除时,从表外键设置为null,此时从表的外键不能有not null约束

    3.restrict:拒绝主表的删除和更新操作

    范式:

    第一范式:字段具有原子性,不能再分

    第二范式:满足第一范式为前提,不能出现部分依赖

    第三范式:满足第二范式,不能出现传递依赖

     MYSQL中的表连接方式:外连接、内连接、交叉连接、自连接

    https://blog.csdn.net/qiushisoftware/article/details/80489128

    外连接分为:左外连接、右外连接、全外连接

    1.左外连接:将左边表的数据全部显示,右外表中条件不符合的显示为null

    2.右外连接:将右边表的数据全部显示,左外表中条件不符合的显示为null

    3.全连接:所有表的所有行、列都会显示,彼此条件不满足的值为null(mysql不支持,但可以通过union实现)

    内连接:查询结果仅仅包含满足条件的行,内连接inner join 可简写为join

    交叉连接:笛卡尔积连接,左右表的元组任意组合,一般情况没有意义

    连接过程中的on和where

    on表示建立连接的关系

    where对建立连接关系进行筛选

    数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。 在使用left jion时,on和where条件的区别如下:

    1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。

    2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉

    以下为练习:

    IFNULL的使用:

    IFNULL(exp1,exp2),如果查询结果为空返回exp2,不为空时返回exp1

     使用DATEDIFF来表示来个日期类型的数据的天数差:DATEDIFF(date1,date2)=n

    hiving对聚合函数的操作结果进行筛选,where在聚合函数之前进行筛选

    判断奇数以及不等于

    使用case then 来判断:

    case的使用格式:

    case case_expression

      when exp1 then com1

      when exp2 then com2

      else com

    end

    例如将男改为1,女改为2

    case sex

      when "男" then 1

      when "女" then 2

    end

    ________________________________

    case score

      when score>90 then "优秀"

      when score<60 then "及格"

      else “良好”

    end

    if(exp,exp1,exp2)如果exp为真则返回exp1,否则返回exp2

    select a.Name as Employee from Employee a join Employee b on a.ManagerId=b.Id where a.Salary > b.Salary;

  • 相关阅读:
    ASP.NET CORE MVC验证码
    高效工作必备黑科技软件和网站
    asp.net core 新建area使用asp-action,asp-controller不管用
    add-migration : 无法将“add-migration”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次
    entity framework core + SQLite Error 1: 'no such table: Blogs'.
    abp去掉AbpUser中的Name,Surname
    PIE SDK去相关拉伸
    PIE SDK频率域滤波
    PIE SDK均值滤波
    PIE SDK聚类
  • 原文地址:https://www.cnblogs.com/chengdonghui/p/10404570.html
Copyright © 2011-2022 走看看