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