zoukankan      html  css  js  c++  java
  • 《MySQL必知必会》总结

    1、了解

    数据库

    MySQL是数据库管理系统(DBMS),而不是数据库,数据库是DBMS创建的容器,使用DBMS可以访问数据库(DBMS是创建和管理DB的)

    背景

    Oracle性能最好也最稳定但是收费也高,金融公司一般会选择Oracle

    MySQL是免费的

    主键

    唯一标识一个行,没有主键的时候更新和删除表中的特定的行就不能实现。作为主键要保证唯一性和非空

    主键选取的应该是不经常更改的列

    SQL语言分类

    DQL(Data Query Language):数据查询语⾔ select 相关语句 

    DML(Data Manipulate Language):数据操作语⾔ insert 、update、delete 语句 

    DDL(Data Define Languge):数据定义语⾔ create、drop、alter 语句 

    TCL(Transaction Control Language):事务控制语⾔ set autocommit=0、start transaction、savepoint、commit、rollback 

    2、条件查询

    (1)注意点

    AND的优先级要高于OR,当AND与OR一起使用的时候可以用添加括号的方式来表示

    (2)通配符(%和_)的使用

    不能过多地使用通配符,因为带有通配符的搜索性能较低

    不要把通配符放到搜索条件的开始位置

    3、正则表达式

    (1)OR匹配

    SELECT *
    FROM student
    WHERE classno REGEXP '090501|090502'
    studentno   sname      sex                       birthday  classno   point        phone  email         
    ----------  ---------  ------  --------------------------  -------  ------  -----------  --------------
    0922210009  许海冰        男       1989-09-08 00:00:00.000000  090501      789  13623456778  qwe@163.com   
    0922221324  何影         女       1990-10-07 00:00:00.000000  090501      879  13178978999  aaa@sina.com  
    0925121107  梁欣         女       1989-07-07 00:00:00.000000  090502      777  13145678921  bing@126.com  
    0935222201  夏文斐        女       1990-08-09 00:00:00.000000  090502      867  15978945645  tang@163.com  

    (2)匹配几个字符之一

    SELECT *
    FROM student
    WHERE birthday REGEXP '[1989-|1990-]08-09'

    中括号中的内容只要满足一个即可

    (3)匹配范围

    [1-9]范围是1到9,[a,z]的范围是a到z

    (4)匹配特殊字符

    需要使用//,例如:匹配 . 的时候使用//.

    (5)字符表

    4、创建计算字段

    (1)拼接字段

    SELECT studentno,CONCAT(classno,sname) classnoSname
    FROM student
    studentno   classnoSname     
    ----------  -----------------
    0822111208  080601韩吟秋  
    0823210007  080501宿致远  
    0824113307  080601崔岩坚  
    0922210009  090501许海冰  
    0922221324  090501何影     
    0925111109  090801敬秉辰  
    0925121107  090502梁欣     
    0935222201  090502夏文斐  
    0937221508  090802平靖     

    (2)算术运算

    SELECT classno,POINT,classno*POINT chengji
    FROM student
    classno   point   chengji  
    -------  ------  ----------
    080601      666    53680266
    080501      658    52969658
    080601      787    63432987
    090501      789    71405289
    090501      879    79550379
    090801      789    71641989
    090502      777    70320054
    090502      867    78465234
    090802      789    71642778

    5、函数

    (1)文本处理函数

    SELECT studentno,UPPER(email)
    FROM student
    studentno   Upper(email)   
    ----------  ---------------
    0822111208  HAN@163.COM    
    0823210007  SU12@164.COM   
    0824113307  CUI@126.COM    
    0922210009  QWE@163.COM    
    0922221324  AAA@SINA.COM   
    0925111109  JING@SINA.COM  
    0925121107  BING@126.COM   
    0935222201  TANG@163.COM   
    0937221508  (NULL)         

     (2)日期处理函数

     (3)数值处理函数

     (4)聚集函数(汇总数据)

    AVG、COUNT、SUM、MAX、MIN

    6、数据分组

    (1)创建分组,count计算的是每一组的数据的个数

    SELECT sex,COUNT(sex)
    FROM student 
    GROUP BY sex 

    (2)过滤分组

    SELECT sex,COUNT(sex)
    FROM student 
    GROUP BY sex 
    HAVING COUNT(*)>=5

    (3)where与having的混合使用

    SELECT sex,COUNT(sex)
    FROM student 
    WHERE POINT>=700
    GROUP BY sex 
    HAVING COUNT(*)>=2

    where的过滤是在分组前进行的,having的过滤作用是在分组后进行的

    (4)分组排序

    SELECT classno,COUNT(1) num
    FROM student 
    WHERE POINT>=700
    GROUP BY classno 
    HAVING COUNT(*)>=1
    ORDER BY classno

    select子句的顺序是:select、from 、where、group by、having、order by、limit

    7、联结

    (1)内部联结

    SELECT student.studentno,sname,final 
    FROM student,score
    WHERE student.studentno=score.studentno
    SELECT student.studentno,sname,final 
    FROM student INNER JOIN score
    ON student.studentno=score.studentno

    (2)外联结

    SELECT *
    FROM student LEFT JOIN score
    ON student.studentno=score.studentno
    SELECT *
    FROM student RIGHT JOIN score
    ON student.studentno=score.studentno

    左外联结是保留所有的student,即:即使学生没有匹配到分数,依旧会有该学生的信息;右外连接是保留所有的分数信息

    8、组合查询

    SELECT *
    FROM student
    WHERE sex=''
    UNION
    SELECT *
    FROM student
    WHERE classno='080601'

    UNION会自动取出重复行,UNION ALL不会去掉重复行

    9、视图

      视图为虚拟的表。它们包含的不是数据而是根据需要检索数据的查询。视图提供了一种MySQL的SELECT语句层次的封装,可用来简化数据处理(重用sql语句,不用知道具体的实现细节)以及重新格式化基础数据或保护基础数据。

    10、存储过程

    (1)好处

    性能更好

    便于后期维护

    (2)缺点

    编写过程复杂

    11、游标

    (1)好处

    能够对返回的结果集前进或后退一行或多行,游标是一个数据库查询而不是一条select语句,他是select语句检索出来的结果集

    如果我们相对查询到的结果一行行地操作,就要使用游标

       
      DELIMITER $
      CREATE PROCEDURE cursorTest()
       BEGIN 
         DECLARE num INT DEFAULT NULL;
         DECLARE yy INT DEFAULT 0;
         DECLARE test CURSOR FOR SELECT studentno FROM student;
         DECLARE CONTINUE HANDLER FOR NOT FOUND SET yy=1;
         OPEN test;
         REPEAT
         FETCH test INTO num;
         SELECT num;
         UNTIL yy=1
         END REPEAT;
         CLOSE test;
       END$

     一行一行地读取数据

    12、触发器

    在响应delete、update、insert的时候执行的语句,触发器可以在处理前或处理后执行,因此,一个表最多有六个触发器

    CREATE TRIGGER studentTrigger AFTER INSERT ON student
    FOR EACH ROW SELECT 'student add';
        

    13、事务处理

    MyISAM引擎不支持事务处理,InnoDB支持。

    事务处理是一种机制,用来管理必须成批执行的MySQL操作,他们要么都执行要么都不执行

    开启事务:start

    回滚:rollback

    提交:commit

    保留点:savepoint,设置savepoint之后不必撤销整个事务,对于复杂的事务需要部分提交或回退可以在事务处理的合适位置设置保留点。

  • 相关阅读:
    redis hash结构如何设置过期时间
    C# 激活主窗口
    C# 发送消息SendKeys、SendMessage、keybd_event的用法
    【总结】清除webbrowser cookie/session的6种方法
    清除webBrowser 缓存和Cookie的解决方案
    完美解决C#Webbrowser控件设置Cookie问题
    WebBrowser脚本错误的完美解决方案
    c# 控制IE浏览器
    法嵌入互操作类型“SHDocVw.ShellWindowsClass”请改用适用的接口-解决方法
    C# 总结const、 readonly、 static三者区别:
  • 原文地址:https://www.cnblogs.com/zhai1997/p/14044095.html
Copyright © 2011-2022 走看看