导图社区 MySQL
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。
编辑于2020-01-09 03:19:36MySQL
数据的基本操作
删除数据记录
使用delete删除数据:删除的是整条记录,不会只删除单个列
使用truncate table会删除表中所有的行,但表的结构,约束,列,索引不会改动;不能用于有外间约束的表
truncate table 比delete 执行速度块 使用的系统资源个日志文件更少,并且删除后表的表的表示列会重新编号;但是删除的数据不能恢复
常用函数
AVG()返回某子段的平均值
COUNT()返回某字段的行数
MAX()返回某字段的最大值
MIN()返回某字段的最小值
SUM()返回某字段的和
日期函数
curdate()获取当前日期
curtime()获取当前时间
now()获取当前时间和时间
week(date)返回日期date为一年的第几周
year(date)返回日期date的年份
hour(time)返回时间time的小时值
minute(time)返回时间time的分钟值
datediff(date1,date2)返回日期参数date1和date2之间相隔的天数
adddate(date,n)计算日期参数date加上n天后的日期
数学函数
ceil(x)返回大于或等于数值x的最小整数
floor(x)返回小于或等于数值x的最大整数
rand()返回0~1 的随机数
order by
ASC 升序
DESC降序 ;默认
LIMIT【位置偏移量,行数】
位置偏移量从结果集中第几条数据开始显示 ;可选;默认从第1条记录开始显示
行数指显示记录的条数
IN子查询
使用IN关键字可以使父查询匹配子查询返回的多个但字段值
当子查询跟随在=,!=,<,<=,>,>=之后时,不允许子查询返回多条记录
数据查询
exists子查询
exists子查询用来确认后边的查询是否继续晋西,返回值是true和false
select * from 表名 where exists(子查询)
not esists 子查询
和IN一样 ,同样允许添加 not 关键字实现去反操作
not esists 表示不存在对应查询条件的记录
子查询
子查询语句可以嵌套在SQL语句中任何表达式出现的位置
子查询可以被嵌套在 select语句的列,表,和查询条件中 where字句
子查询结果为但列,但不必指定列别名
子查询嵌套在from字句中必须为表指定别名,一般返回多行多列数据记录,可以当作一张临时表
group by 分组查询
使用group by 关键在 select 后面只能是 groupby 字句后的列,聚合函数计算出的列
左连接查询 left join 。。。on 外连接查询中参与连接的表有从之分, 以主表的每行数据匹配从表的数据列,将符合 连接条件的数据直接返回到结果集中 ,对那些不符合连接条件的列,将被填上 null值
右链表查询:要包含右表中所有匹配的行,若右表中有的项在左表没有对应的项,则以null填充
MySQL的事物,视图,索引,备份,恢复
事务: 作为单个逻辑工作单元执行的一系列操作
原子性:事务是一个完整的操作。事务的个元素是不可分(原子的)
一致性:当事务完成时,数据必须处一致状态
隔离型:对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,他不应以任何方式依赖或影响其他事务
持久性事务的持久性指不管系统是否发生啦故障,事务处理的结果都是永久的
开始事务
begin
starttransaction
提交事务:commit
事务回滚:rollback
视图
视图是一种查看数据库中一个或多个表中数据的方法
视图是一张虚拟表,通常是作为来自一个或多个表的行或列的子集创建的
视图充当着查询中表筛选器的角色
定义视图的查询可以基于一个或多个表,也可以基于其他视图,当前数据库或其他数据库
子主题
视图的好处
对最终用户的好处
结果更容易理解
获取数据更简单
对开发人员的好处
限制数据检索更容易
维护应用更方便
创建视图语句
create view 视图名 as select 语句
使用视图注意事项
每个视图中可以使用多个表
与查询类似,一个视图可以嵌套另一个视图 ;不要超过三层
对视图数据进行添加,更新和删除操作直接影响原表中的数据
当视图数据来自多个表时,不允许添加和删除数据
索引
索引的作用是通过使用索引,大大提高数据库的检索速度,改善数据库性能
索引分类
普通索引
唯一索引
主键索引
复合索引
全文索引
空间索引
建立索引的标准
经常用作查询选择条件的列
经常排序,分组的列
经常用作链表的列
优化SQL语句
查询减少使用* 返回全部的列
索引应尽量小,在字节数小的列加上索引
where 字句 中有多个条件表达式时,包含索引列的表达式放在其他条件之前
避免在order by 字句中使用表达式
备份
使用mysqldump 命令备份数据库
username:表示用户名
host:表示登录用户的主机名城
password :表示登录密码
dbname:需要备份的数据库
tbname:需要备份的表
filenamesql:表示需要备份文件的名称
数据库规范设计
数据库设计的步骤
收集信息
标识实体
标识每个实体需要存储的详细信息
标识实体之间的关系
实体-关系模型
关系性数据库模式
数据库三大范式
第一范式确保每列的原子性
第二范式要求每个表只描述一件事情
第三范式要求表中各列必须和主键直接相关,不能间接相关
什么是存储过程
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快
使用call命令调用
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由个事件来触发,比如当对一个表
触发事件 : insert,delete, update
触发时机 : after, before
索引的作用?和它的优点缺点是什么
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
可以大大加快数据的检索速度,这也是创建索引的最主要的原因
可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间
通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能
普通索引
基本索引类型
允许在定义索引的列中插入重复值和空值
唯一索引
索引列数据不重复
允许有空值
主键索引
主键列中的每个值是非空、唯一的
一个主键将自动创建主键索引
复合索引:将多个列组合作为索引
全文索引
支持值的全文查找
允许重复值和空值
空间索引:对空间数据类型的列建立的索引
drop,delete与truncate的区别
1、delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,truncate 会初始化自增列的初始值
2,delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚
3、执行的速度上,drop>truncate>delete
主题