| |
|
开发:
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基础学习笔记 |
一、简介1.SQL、DB、DBMS分别是什么,他们之间的关系? DB:DataBase数据库实际上在硬盘上以文件的形式存在 DBMS:DataBase Management System数据管理系统,常见的有MySQL Oracle DB2 Sybase SqlServer... SQL:结构化查询语句,是一门标准通用的语言,标准的sql语句,SQL 属于高级语言。SQL 语句在执行的时候,实际上内部也会先进行编译,然后再执行 sql。(sql 语句的编译由 DBMS 完成。) DBMS执行SQL语句,通过执行SQL语句来操作DB 2.什么是表? table是数据库的基本组成单元,所有的数据都以表格的形式组织,目的是可读性强。 行被称为数据/记录,列被称为字段 每个字段应该包括字段名、数据类型、相关的约束的属性。 3.SQL语句分类 DQL(数据查询语言):查询语句,凡是select语句都是DQL DML(数据操作语言):insert delect update,对表中的数据进行增删改。 DDL(数据定义语句):creat drop alter,对表结构的增删改。
TCL(事务控制语言):commit 提交事务,rollback 回滚事务。(TCL 中的 T 是 Transaction)
DCL(数据控制语言): grant 授权、revoke 撤销权限等。
二、数据库操作命令(Mysql命令)登录Mysql数据库管理系统:dos命令窗口:mysql-uroot-p333 查看有哪些数据库:show database; 创建属于自己的数据库:create database powernode; 使用powernode:user powernode; 查看当前使用的数据库有哪些表:show tables; 初始化数据:mysql> source D:\course\05-MySQL\resources\powernode.sql 删除数据库:drop database powernode; 查看表结构:desc emp; 查看当前使用的是那个数据库:select database(); 查看mysql:查看mysql版本号
\c 命令,结束一条语句
exit 命令,退出 mysql
三、查询语句(DQL)1、简单的查询语句 语法格式:select 字段名 1,字段名 2,字段名 3,.... from 表名; 注:任何一个sql语句都以;结尾,sql语句不区分大小写 给查询结果的列重命名:select ename,sal * 12 as yearsal from emp; 2、条件查询 语法格式:select? 字段,字段... from? 表名 where 条件;
select ename,sal from emp where sal
between
1100
and
3000; // between...and...是闭区间 [1100 ~ 3000]。between and 在使用的时候必须左小右大。
空不是一个值,不能用等号衡量,必须使用 is null 或者 is not null。select ename,sal,comm from emp where comm is null; or:找出工作岗位是 MANAGER 和 SALESMAN 的员工? select ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
and 和 or 联合起来用。找出薪资大于 1000 的并且部门编号是 20 或 30 部门的员工。
select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno =30);
当运算符的优先级不确定的时候加小括号
in 后面的值不是区间,是具体的值 。select ename,job from emp where sal
in
(800, 5000);
not in: 不在这几个值当中。select ename,job from emp where sal
not in
(800, 5000);
like 模糊查询 ,%代表任意多个字符,_代表任意 1 个字符。select ename from emp where ename like '%O%';
3、排序
默认是升序。怎么指定升序或者降序呢?asc 表示升序,desc 表示降序
select ename , sal from emp
order by
sal asc; // 升序
select ename , sal from emp order by sal desc; // 降序。
当工资相同的时候再按照名字的升序排列
select ename,sal from emp order by sal desc , ename asc;
越靠前的字段越能起到主导作用。只有当前面的字段无法完成排序的时候,才会启用后面的字段。
4、分组函数
分组函数还有另一个名字:多行处理函数。 多行处理函数的特点:输入多行,最终输出的结果是 1 行。
count 计数 、sum 求和 、avg 平均值 、max 最大值 、min 最小值
5、单行处理函数
使用 ifnull 函数:select ename,(sal+ifnull(comm,0))*12 as yearsal from emp;
6、group by 和 having
group by : 按照某个字段或者某些字段进行分组。
having : having 是对分组之后的数据进行再次过滤。
当一条语句中有 group by 的话,select 后面只能跟分组函数和参与分组 的字段。
总结一个完整的 DQL 语句
select? ? ? ? ?5
..
from? ? ? ? ? ?1
..
where? ? ? ? ?2
..
group by? ? ?3
..
having? ? ? ? 4
..
order by? ? ? 6
..
四、事务(Transaction)1、什么是事务? 事务是一个完整的业务逻辑单元,不可再分。例如,两条DML语句必须同时成功,或者同时失败,不允许出现一条成功,一条失败。 2、和事务相关的语句只有:DML语句(insert delete update)为什么? 因为这三句话都是和数据库表中的“数据“”相关的。事务的存在是为了保证数据的完整性,安全性。 3、事物的特性 事务包括四大特性:ACID A:原子性:事务是最小的工作单元,不可再分。 C:一致性:事务必须保证多条DML语句同时成功或者同时失败。 I:隔离性:事务A和事务B之间具有隔离 D:持久性:持久性是最终数据必须持久化到硬盘文件,事务才算成功的结束。 4、事物之间的隔离性 理论上隔离级别包括4个: 第一级别读未提交:对方事务还没有提交,当前事务可以读取到对方未提交的数据。读未提交存在脏读现象,表示读到了脏的数据。 第二级别读已提交:对方事务提交之后的数据我方可以读取到。这种隔离级别解决了: 脏读现象没有了。 读已提交存在的问题是:不可重复读。
第三级别可重复读(repeatable read)这种隔离级别解决了:不可重复读问题。 这种隔离级别存在的问题是:读取到的数据是幻象。
第四级别:序列化读/串行化读(serializable) 解决了所有问题。 效率低。需要事务排队。
oracle 数据库默认的隔离级别是:读已提交。 mysql 数据库默认的隔离级别是:可重复读。
5、演示事务
怎样关闭自动提交start transaction?
回滚
mysql> rollback;
持久化到硬盘mysql> commit;
五、索引1、什么是索引?有什么用?为什么可以提高索引效率?
索引就相当于一本书的目录,通过目录可以快速的找到对应的资源。 在数据库方面,查询一张表的时候有两种检索方式: 第一种方式:全表扫?第二种方式:根据索引检索(效率很高),根本原理是缩小了扫描的范围。索引虽然可以? 高检索效率,但是不能随意的添加索引,因为索引也是数据库当中的对象,也需要数据库不断的维护。表中的数据经常被修改,就不适合添加索引。
2、怎样创建索引对象?怎样删除索引对象
创建索引对象: create index 索引名称 on 表名(字段名);
删除索引对象: drop index 索引名称 on 表名;
3、什么时候考虑给字段添加索引?(满足什么条件)
* 数据量庞大。(根据客户的需求,根据线上的环境)
* 该字段很少的 DML 操作。(因为字段进行修改操作,索引也需要维护)
* 该字段经常出现在 where 子句中。(经常根据哪个字段查询)
注意:主键和具有 unique 约束的字段自动会添加索引。 根据主键查询效率较高。尽量根据主键检索。
添加索引
4、索引底层采用的数据结构是:B+tree
5、索引的实现原理:
通过Btree缩小扫描范围,底层索引进行排序,分区,索引会携带数据在表中的“物理地址”
最终通过索引检索到数据之后,获取关联的物理地址,通过物理地定位表中的数据,效率是最高的
6、索引的分类
单一索引:给单个字段添加索引
复合索引: 给多个字段联合起来添加 1 个索引
主键索引:主键上会自动添加索引
唯一索引:有 unique 约束的字段上会自动添加索引
7、索引什么时候失效?
select ename from emp where ename like '%A%';
模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 3:50:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |