| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> MySQL数据库学习总结 -> 正文阅读 |
|
[大数据]MySQL数据库学习总结 |
连接:mysql -h 主机地址 -u 用户名 -p / mysql -u root -p root DB database 数据库 DBMS 数据库管理系统 (Oracle mysql DB2 sybase sqlserver) DBMS->(执行)->SQL->(操作)->DB sql 语句分类: DQL(数据查询语言):select 查询语句 DML(数据库操作语言): inset delect update DDL(数据定义语言/修改表结构):create? drop? alter TCL(事务控制语言):commit 提交事务 rollback 回滚事务 DCL(数据控制语言):grant授权 revoke 撤销权限 source 路径(路径中不能有中文); //初始化表格(去公司用的到) 注意:直接使用source 可以执行SQL脚本 SQL脚本数量太大时,无法打开,请使用source命令完成初始化 \c 终止一条语句 exit退出 优先级加() show tables from ....;查看别的数据库中的表格 show create table...;查看创建表的语句 DQL1、简单的查询语句 select * from 表名; <!--查询表名中的所有字段,缺点:效率低,可读性差,尽量不要写在程序中--> desc 表名;<!--查看表结构--> select database(); <!--当前使用的数据库--> select version(窝神)(); <!--查看数据库版本号--> select 字段名 from 表名;<!--查询一个字段--> select 字段名 ,字段名as 字段名 。。。。from 表名;<!--给字段名重命名(as关键字可以省略,或者用单引号或双引号括起来,一般使用单引号)--> 2、条件查询 <>或!= 不等于 between ...and ...两个值之间等同于 >= and <= select 字段名... from 表名 where 条件 ; is null 为空(is not null 不为空 ) and 并且 or 或者 and 和or 同时出现 优先级问题 <!--and 比or的优先级高,如果想先执行 or 用括号分割--> in(包含 )等同于or not in 可以取反 select 字段名 from 表名 where 字段名=or select 字段名 from 表名 where 字段名 in ( , );<!-- 括号里不是区间而是或的关系 --> 模糊查询 like % 表示任意多个字符 下划线_ 表示任意一个字符 eg select 字段名 from 表名 where 字段名like ‘ %o_ ’; 查询含有下划线的数据的时候,需要使用转义字符 \转义 3、排序 排序(指定升序asc、降序desc)默认升序 select 字段名 from 表名 order by 字段名 asc;升序 select 字段名 from 表名 order by 字段名 desc;降序 select 字段名 from 表名 order by 字段名 asc,字段名 desc;<!--升序起的主导作用大 相同时启动后面--> 查询加排序 select 字段名 from 表名 where 条件 order by 字段名 asc; 3 1 2 4 4、数据处理函数 单行处理函数:一行输入对应一行输出 常见的单行处理函数: lower() 转换小写 upper () 转换大写 substr() 取子串{substr(被截取的字段,起始下标(从1开始),截取长度)} concat() 字符串拼接 length(字段名) 取长度 trim() 去空格 str_to_data 将字符串varchar类型转换为日期data类型 date_format 将日期data类型转换为字符串varchar类型 设置千分位 case ... when ...then ...when...then...else...end round() 四舍五入 rand()生成随机数 ifnull(数据,被当作那个值) 可以将null转换成一个具体值 常见的多行处理函数(分组函数) 多行处理函数:多行输入对应一行输出 count 计数 avg 平均值 sum 求和 max 求最大值 min 求最小值 分组函数使用时的注意事项:
5.分组查询???? 分组查询:先进行分组,然后再对每一组的数据进行查询 group by: 按照某个字段或者某些字段进行分组,group by后不能有where having : having 是对分组之后的数据进行再次过滤,不能单独使用,必须与group by组合使用 where与 having 优先使用where,where后面不能有分组函数 select .. from..where..group by...having...orderby... 5 1 2 3 4 6排序 为什么分组函数不能在where后面执行? 因为select 在group by 之后执行 而where在group by 之前执行 distinct去除重复记录
6.连接查询????? 笛卡尔积现象:两张表进行连接查询,没有任何条件限制的时候最终查询条数,是两张表条数的乘积。 怎样避免笛卡尔积现象? 连接时加条件,满足这个条件的记录被筛选出来 根据语法出现的年代来划分的话, 包括: SQL92(比较老,几乎不用) 语法:select...fromA , B on where ... SQL99(比较新的语法) 根据表的连接方式来划分 SQL99语法更清晰,表连接条件和后来的where条件分离了。(更常用) 语法:select...from A (inner ) join B on 连接条件 where ... <!--inner 可以省略--> 内连接:假设A和B进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录查询出来,这就是内连接。AB两张表没有主副之分,两张表是平等的.
外连接:假设A和B进行连接,使用外链接的话AB两张表中有一张表是主表,一张表是附表,主要查询主表中的数据,捎带查询附表,当附表中的数据没有和主表的数据匹配上,附表自动模拟出null与之匹配。
外连接的查询结果条数一定是>= 内连接的查询结果条数 三张表,四张表怎么连接? select ... from a join b on ...(a和b的连接条件) join c on ... (a 和 c 的连接条件) join on ... (a和d的连接条件) 总结:一条SQL中内连接和外连接可以混合,都可以出现 子查询 子查询先执行(select嵌套select语句,被嵌套的select语句称为子查询) 语法:select ....(select) from ....(select) where ......(select) union(可以将查询结果相加合并) 使用union效率更高(union把乘法变成了加法,减少次数) union注意事项?
7、limit(分页查询全靠它) limit是mysql中有特有的 完整用法 :limit startIndex, length startIndex 表示起始位置,从0开始,0表示第一条数据。 length 表示取几个 缺省用法:limit 5 ;这是取前五 语法:select ... from ... order by limit ....; 分页公式: 第pageNo页 :limit(pageNo -1)*pageSize,pageSize pageSize每页显示多少条记录 pageNo 显示第几页 DQL语句总结 select .. from..where..group by...having...orderby... limit 5 1 2 3 4 6排序 7 char和varchar怎么选择? varchar (最长255):可变长度的字符串、比较智能节省空间,会根据数据长度自动分配空间,节省空间。 缺点:动态分配空间,速度慢 char(最长255): 定长字符串。优点:速度快 缺点:使用不当造成资源空间浪费 在实际的开发中,当某个字段中的数据长度不发生改变的时候,是定长的,例如:性别、生日等都是采用char。 当一个字段的数据长度不确定,例如:简介、姓名等都是采用varchar。 关于MySQL当中字段的数据类型?以下只说常见的 int 整数型(java中的int) bigint 长整型(java中的long) float 浮点型(java中的float double) char 定长字符串(String) varchar 可变长字符串(StringBuffer/StringBuilder) date 短日期类型 (包含年月日信息)%Y-%m-%d datatime 长日期类型 (包含年月日时分秒信息)%Y-%m-%d %h:%i:%s BLOB ( Binary Large OBject ) 二进制大对象(存储图片、视频等流媒体信息) 在使用时必须使用IO流 CLOB (Character Large OBject) 字符大对象(存储较大文本,比如,可以存储4G的字符串。)(超过255 就用它) 8、表的创建(建表DDL) 表名:建议t_ 或 tbl_开始
9、约束
注意:在MySQL当中,凡是标识符是可以使用飘号括起来的。最好别用,不通用。 建表的时候可以指定存储引擎,也可以指定字符集。 mysql默认使用的存储引擎是InnoDB方式。 默认采用的字符集是UTF8 查看当前mysql支持的存储引擎? show engines \G MySQL支持九大存储引擎,版本不同支持情况不同。
10、事务
11、索引 Mysql在查询方面主要有两种方式?
索引之前必须先排序,这个索引的排序和TreeSet数据结构相同。TreeSet底层是一个自平衡的二叉树,在MySQL当中索引是一个B—Tree数据结构。 遵循左小右大的原则存放,采用中序遍历的方式遍历取数据。 mysql当中主键上自动创建索引,unique约束的字段也自动创建索引。 索引的实现原理? 每一行记录在硬盘上都有物理的存储标编号 其实最根本的原理是缩小了扫描的范围。 什么条件下给字段添加索引?
索引怎么创建 语法:创建索引 create index 字段别名 on 表名(字段名); 删除索引 drop index 索引字段 on 表名 ; MySQL 中索引的底层是 B-Tree ; B-Tree 底层: 二叉树 查看sql语句是否用了索引? explain 查询语句。。。 索引有失效的时候,什么时候索引失效? 失效的第1种情况: select ename from emp where ename like '%A'; 模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。 失效的第2种情况: 使用or的时候会失效,如果使用or那么要求or两边的条件字段都要有索引,才会走索引,如果其中一边有一个字段没有索引,那么另一个字段上的索引也会失效。所以这就是为什么不建议使用or的原因。 失效的第3种情况: 使用复合索引的时候,没有使用左侧的列查找,索引失效什么是复合索引? 两个字段,或者更多的字段联合起来添加一个索引,叫做复合索引。 失效的第4种情况: 在where当中索引列参加了运算,索引失效。 失效的第5种情况: 在where当中索引列使用了函数,索引失效。 索引是各种数据库进行优化的重要手段。优化的时候优先考虑的因素就是索引。 索引在数据库当中分了很多类 单一索引: 一个字段上添加素引。 复合索引: 两个字段或者更多的字段上添加索引。 主键索引: 主键上添加素引。 唯一性索引:具有unique约束的字段上添加索引。 注意:唯一性比较弱的字段上添加索引用处不大。 12、视图(view) 视图:站在不同的角度去看到数据。(同一张表的数据,通过不同的角度去看待)。
create table emp_bak as select * from emp; create view myview1 as select empno,ename,sal from emp_bak; update myview1 set ename='hehe',sal=1 where empno = 7369; // 通过视图修改原表数据。 delete from myview1 where empno = 7369; // 通过视图删除原表数据 视图的作用? 方便、简化开发、利于维护 视图可以隐藏表的实现细节。保密级别较高的系统,数据库只对外提供相关的视图,java程序员只对视图对象进行CRUD。 13、DBA命令
14.数据库设计三范式 第一范式:任何一张表都应该有主键,并且每一个字段原子性不可再分。 第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。 多对多,三张表,关系表两个外键 第三范式:建立在第二范式的基础之上,所有非主键字段直接依赖主键,不能产生传递依赖. 一对多,两张表,多的表加外键 设计表的时候,根据三范式进行,可以避免表中的数据冗余。 一对一 怎么设计? 主键共享,外键唯一(一对一,外键唯一)。 提醒: 在实际的开发中,以满足客户的需求为主,有的时候会拿冗余换执行速度。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 2:52:11- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |