黑马程序员MySQL学习笔记
MySQL数据库关系型数据库概念建立在关系模型基础上由多张相互连接的二维表组成的数据库特点1.使用表存储数据结构清晰格式统一便于维护2.使用SQL语言操作使用方便SQLSQL通用语法1.SQL语句可以单行或者多行并线以分号为结尾2.SQL语句可以使用空格或者缩进增强代码的可读性3.MYSQL数据库的SQL语句不区分大小写但关键字建议使用大写4.注释单行--多行/**/SQL分类DDL数据定义语言用来定义数据库对象数据库表字段定长字符串char(10)------性能更好参数里面规定为10那会数据长度必须为10适用于固定的字段长度比如手机号身份证变长字符串char(10)------性能较差字段长度不确定比如密码用户名日期值年月日DATE时间值时分秒(TIME)年份值年(YEAR)混合日期和时间值年月日时分秒(DATETIME)有符号signed可以有负数无符号unsigned不能有负数DML数据操作语言用于对表中的数据进行增、删、改操作update如果没有where条件语句则会修改整张表的字段insertdelete删除整一条数据语句不能删除某一个字段的值若要删除某一个字段的值可以使用update把字段值设置为null如果没有where条件会将表中数据全部删除DQL数据查询语言用于查询数据库表中的数据selectSQL编写顺序select distinct去除重复的字段DQL-条件查询1.语法2.条件DQL-聚合函数1.介绍将一列数据作为一个整体进行纵向的计算2.常见聚合函数3.语法注意所有的null值是不参与聚合函数运算的DQL-分组查询1.语法2.where和having的区别注意执行顺序Where 聚合函数 having分组之后查询的字段一般为聚合函数跟分组的字段查询其他的字段无任何意义DQL-排序查询1.语法2.排序方式注意如果是多字段的排序当第一个字段相同的时候才会根据第二个字段进行排序DQL-分页查询1.语法注意起始索引从0开始。起始索引 查询页码 - 1* 每页显示记录数分页查询是数据库的方言不同的数据库有不同的实现MYSQL是limit如果查询的是第一页的数据其实索引可以省略直接简写为limit 10DQL-执行顺序SQL执行顺序DCL数据控制语言主要用来管理数据库用户控制数据库的访问权限注意主机名可以使用 % 通配这类SQL开发人员操作的比较少主要是数据库管理员使用函数是指一段可以直接被另一段程序调用的程序或代码函数分类字符串函数1.语法2.常用函数注意MYSQL中字符串的起始索引为1截取的长度包含起始索引数值函数常用函数模即是余数日期函数常用函数流程控制函数在SQL语句中实现条件筛选从而提高语句的效率常用函数注意ifnull只判断是否为null如果第一个值为一个空字符串 也会返回一个空字符串约束概述1.概念约束是作用于表中字段上的规则用于限制存储在表中的数据2.目的保证数据库中数据的正确有效性和完整性3.分类注意约束是作用在表中的字段上的可以在创建 / 修改表的时候添加约束外键约束概念外键用来让两张表的数据之间建立联系从而保证数据的一致性和完整性注意约束一般写在字段类型后语法1.添加外键2.删除外键3.删除 / 更新行为多表查询多表关系项目开发中在进行数据库表结构设计时会根据业务需求及业务模块之间的关系分析并设计表结构。由于业务之间相互关联所以各个表结构之间也存在着各种联系基本上分为三种一对多多对一多对多一对一多表查询概述指从多张表中查询数据笛卡尔积是指在数学中两个集合集合A跟集合B的所有组合情况在多表查询时需要消除无效的笛卡尔积多表查询分类内连接内连接查询语法外连接外连接查询语法自连接自连接查询语法注意自连接查询可以是内连接查询也可以是外连接查询-- 查询员工及其所属领导的名字-- 表结构emp把一张表看成两张表联合查询对于union查询就是把多次查询的结果合并起来形成一个新的查询结果集union将查询后的结果去重union all不会将查询的结果去重注意对于联合查询的多张表的列数必须保持一致字段类型也需要保持一致子查询SQL语句中嵌套select语句称为嵌套查询又称子查询注意子查询外部的语句可以是insertupdate, delete, select的任何一个列子查询子查询返回结果是一列可以是多行。这种子查询称为列子查询常用的操作符innot inanysomeall行子查询子查询返回的结果是一行可以是多列的这种子查询称为行子查询常用的操作符INNOT IN表子查询表子查询返回的结果是多行多列常用的操作符in事物事物简介事物是一种操作的集合它是一个不可分割的工作单位。事物会把所有的操作作为一个整体一起向系统提交或者撤销操作这些操作要么同时成功要么同时失败事物操作第一种操作1.查看 / 设置事务提交方式Autocommit0表示设置为手动提交事务2.提交事物3.回滚事物第二种操作1.开启事务2.提交事务3.回滚事物事物四大特性面试原子性Atomicity事物是不可分割的最小操作单元要么全部成功要么全部失败原子性一致性Consistency事物完成时必须使所有的数据都保持一致状态隔离性Isolation数据库系统提供的隔离机制保证事物在不受外部并发操作影响的独立环境下运行持久性Durability事务一旦提交或回滚它对数据库中的数据的改变就是永久的并发事务问题脏读A事物执行了update语句但是还没有提交在B事物进行select语句的时候查出了A事物没有提交的数据不可重复读事物A第一次查询ID为1的数据时得到一行数据然后事物B对ID为1的数据进行了修改并且提交了。然后事物A在进行查的时候发现跟原先查到的数据不一样幻读读数据插入的时候无法插入(提示已经存在),但读取又无法读取的情况,就是一种错觉按理论来说事务B它是没有提交的因为提交了之后事务A它是可以查到这一条数据事物隔离级别注意事物隔离级别越高数据越安全但是性能就越低MYSQL进阶存储引擎存储引擎就是存储数据、建立索引、更新、查询数据等技术的实现方式。存储引擎是基于表的而不是基于库的所以存储引擎也可被称为表类型。存储引擎特点InnoDB介绍InnoDB是一种兼顾高可靠性和高性能的通用存储引擎在MySQL5.5之后InnoDB是默认的MySQL存储引擎。特点DML操作遵循ACID模型支持事务行级锁提高并发访问性能支持外键约束保证数据的完整性跟正确性MyISAM介绍MyISAM是MySQL早期的默认存储引擎特点不支持事务不支持外键支持表锁不支持行锁访问速度极快Memory介绍Memory引擎的表数据是存储在内存中的由于受到硬件问题或断电问题的影响只能将这些表作为临时表或缓存使用特点内存存放hash索引存储引擎选择在选择存储引擎时应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统还可以根据实际情况选择多种存储引擎进行组合。索引索引是帮助MYSQL高效获取数据的数据结构。在数据之外数据库系统还维护着满足特定查找算法的数据结构这些数据结构以某种方式指向数据这样就可以在这些数据结构上实现高级查找算法。这种数据结构就是索引索引概述索引结构索引分类SQL优化插入数据主键优化Order by优化Group By优化Limit优化Count优化Update优化SQL性能分析工具主要关注typepossible_keyskeykey_lenrowsExtra索引使用最左边的字段必须存在字段放在第一列、第二列、第三列都无所谓跟顺序无关但是不能中断锁行级锁全局锁表锁InnoDB引擎MySQL管理