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)字符表

《MySQL必知必会》总结_主键

 

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)         

《MySQL必知必会》总结_事务处理_02

 (2)日期处理函数

《MySQL必知必会》总结_主键_03

 (3)数值处理函数

《MySQL必知必会》总结_事务处理_04

 (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之后不必撤销整个事务,对于复杂的事务需要部分提交或回退可以在事务处理的合适位置设置保留点。

 

每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛