| |
|
开发:
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学习(一) |
数据库概述什么是数据库?存储数据的仓库,其实就是一堆存储了特定格式数据的文件 什么是数据库管理系统?数据库管理系统英文为DataBaseManagement,简称DBMS。 数据库管理系统是专门用来管理数据库中的数据的,可以对数据库中的数据进行增删改查。 程序员编写sql语句,DBMS负责执行sql语句,来实现对数据库中数据的增删改查。 数据库操作1、mysql的启动:
2、mysql的关闭:
3、mysql的连接(登录):
4、mysql的退出:
SQL的分类DDL:数据定义语言,定义数据库对象:数据库,表,列等。主要操作的是表的结构。 CREATE \ ALTER \ DROP \ RENAME \ TRUNCATE 操作数据库1、Create:创建 创建数据库,判断是否存在:
创建数据库,并且指定字符集:
2、Retrieve:查询 查询所有数据库的名称:
查询某个数据库的字符集(查询某个数据库的创建语句):
3、Update:修改 修改数据库的字符集:
4、Delete:删除 删除数据库:
?判断数据库是否存在,存在的话删除:
5、使用数据库 查询当前正在使用的数据库名称:
使用数据库:
操作表1、Create:创建 创建表:
????????int: 整数类型: ????????????????age int ????????double: 小数类型: ????????????????score double(5,2) 表示最多有五位,保留两位小数 ????????date: 日期,只包含年月日: ????????????????datetime: 日期,包含年月日时分秒,yyyy-MM-dd HH:mm:ss ????????????????timestamp: 时间戳类型,包含年月日时分秒,yyyy-MM-dd HH:mm:ss ????????????????不赋值或者赋值为NULL,则默认使用当前系统时间自动赋值 ????????varchar: 字符串类型: ????????????????name varchar(20) 表示姓名最大20个字符 复制表:create table 表名 like 目标表; 2、Retrieve:查询 查询某个数据库中所有的表名称:
查询表结构:
3、Update:修改 修改表名:
修改表的字符集:
添加一列:
修改列名,字符集:
删除列:
4、Delete:删除 删除表:
DCL:数据控制语言,定义数据库的访问权限和安全级别,及创建用户。 COMMIT \ ROLLBACK \ SAVEPOINT \ GRANT \ REVOKE DML:数据操作语言,对表中数据进行增删改。INSERT \ DELETE \ UPDATE \ SELECT 1、增加数据:
默认给所有列添加数据:
除了数字类型,其他类型要用引号(单双都可以) 2、删除数据:
删除表,然后创建一个一模一样的空表:
3、修改数据:
DQL:对表中数据进行查询
1、基础语法(1)多个字段查询:
(2)去除重复:
(3)起别名:
2、条件查询where(1)>、 < 、<=、>=、=、<>(不等于,mysql中也可以用!=) (2)BRTWEEN...AND 查询student表中年龄在20--30岁之间的人:
(3)IN(集合) 查询student表中年龄为18,22,25岁的:
(4)LIKE 模糊查询 *? ?_?表示单个任意字符 ????????查询student表中姓名中第2个字是三的:
????????查询student表中名字是三个字的人:
*? %表示多个任意字符(或空字符) ????????查询student表中姓王的人:
????????查询姓名中包含王的人:
(5)IS NULL ????????查询没有英语成绩的人:
(6)AND 或者 && (7)OR 或者 || (8)NOT 或者 ! 3、排序查询语法:ORDER BY ????????ORDER BY 排序字段1 排序方法1,排序字段2 排序方法2 ... 排序方式: ????????ASC:升序 排序方式不写默认升序 ????????DESC:降序 查询所有学生,按年龄从大到小排序:
4、聚合函数:将一列数据作为一个整体,进行纵向的计算(例如求一科的总分)(1)COUNT:计算个数 计算一共有几个人:
(2)MAX:计算最大值 计算数学成绩的最大值:
(3)MIN:计算最小值 计算数学成绩的最小值:
(4)SUM:求和 求所有人数学成绩的总和:
(5)AVG:计算平均值 求数学成绩的平均分:
5、分组查询语法:group by 分组字段 where和having的区别 ????????where在分组之前进行限定,如果不满足条件则不参与分组 ????????having在分组之后进行限定,如果不满足条件则不会被查询出来 ????????where后不可以跟聚合函数,having可以进行聚合函数的判断 按照性别分组,分别查询男女同学的平均分和男女生的人数:
6、分页查询语法:limit 开始的索引,每页查询的条数 每页显示3条数据
约束:对表中的数据进行限定,保证数据的正确性、有效性和完整性主键约束:primary key主键值一般使用int、bigint、char等,不建议使用varchar。 主键约束字段非空且唯一,一张表只能有一个主键。 创建表时添加主键:
删除主键约束:
创建完表后添加主键:
自动增长:如果某一列是数值类型的,使用 auto_increment 可以实现值的自动增长 在创建表时添加主键约束并实现主键自动增长
复合主键:
非空约束:not null创建表时添加非空约束:
删除非空约束:
创建表后添加非空约束:
唯一约束:unique创建表时添加唯一约束:
删除唯一约束:
创建表后添加唯一约束:
外键约束:foreign key创建表时添加外键约束
删除外键:
添加外键,并设置级联更新
存储引擎mysql默认的存储引擎是InnoDb 设置存储引擎
常用存储引擎1、MyISAM它管理的表有下列主要特征: (1)使用三个文件表示每个表? (2)格式文件:存储表结构的定义(mytable.frm) (3)数据文件:存储表行的内容(mytable.MYD) (4)索引文件:存储表上索引(mytable.MYI) 可被转换为压缩、只读表,来节省空间 2、InnoDB(mysql的默认存储引擎)支持事务,支持数据库崩溃后自动恢复机制,非常安全。 它管理的表有下列主要特征: (1)每个InnoDB表在数据库目录中以.frm格式文件表示 (2)InnoDB表空间tablespace被用于存储表的内容 (3)提供一组用来记录事务活动性的日志文件 (4)用COMMIT、SAVEPOINT及ROLLBACK支持事务处理 (5)提供全ACID兼容 (6)在mysql服务器崩溃后提供自动恢复 (7)多版本(MVCC)和行级锁定 (8)支持外键及引用的完整性,包括级联删除和更新 3、Memory使用Memory存储引擎的表,其数据存储在内存中,且行的长度固定,速度快 它管理的表有下列主要特征: (1)在数据库目录内,每个表均已.frm格式的文件表示 (2)表数据及索引被存储在内存中(查询快) (3)表级锁机制 (4)不能包含TEXT和BLOB字段 多表关系一对多(多对一)在多的一方建立外键,指向一的一方的主键 多对多借助中间表,中间表至少包含两个字段,这两个字段作为中间表的外键,分别指向两张主表的主键 一对一在任意一方添加唯一外键指向另一方的主键 范式第一范式(1NF):每一列都是不可分的原子数据项 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码属性(在1NF基础上消除非主属性对主码的部分函数依赖) 第三范式(3NF):在2NF的基础上,任何非主属性不依赖于其他非主属性(在2NF基础上,消除传递依赖) 多表查询内连接查询1、隐式内连接:使用where条件清除无用数据
2、显式内连接:
查询所有员工信息和对应的部门信息;
外连接查询1、左外连接:查询的是左表所有数据以及两表的交集
2、右外连接:查询的是右表所有数据以及两表的交集
子查询:查询中嵌套查询1、子查询结果为单行单列:子查询可以作为条件,使用运算符去判断,如:<、<=、=、>=、> 查询工资最高的员工信息:
查询员工工资小于平均工资的人:
2、子查询结果为多行单列:查询'财务部'和'市场部'所有员工信息:
子查询可以作为条件,使用运算符in来判断 3、子查询结果为多行多列:子查询作为一张虚拟表 查询员工入职日期是2011-11-11之后的员工信息和部门信息:S
事务事务的操作:1、事务的使用(1)开启事务:start transaction; (2)回滚:rollback; (3)提交:commit; 2、MySQL数据库中事务默认自动提交(1)事务提交的两种方式 自动提交: ????????mysql就是自动提交的 ????????一条DML(增删改)语句会自动提交一次事务 手动提交: ????????需要先开启事务,在提交 (2)修改事务的默认提交方式: 查看事务的默认提交方式:select @@autocommit; 1代表自动提交,0代表手动提交 修改默认提交方式:set @@autocommit = 0; 事务的四大特征:1、原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败 2、持久性:当事务提交或回滚后,数据库会持久性的保存 3、隔离性:多个事务之间,相互独立 4、一致性:事务操作前后,数据总量不变 数据的隔离级别:1、概念:多个事务之间是隔离的,相互独立的。但是如果多个事务对同一批数据进行操作,就会引发一些问题,设置不同的隔离级别可以解决 2、存在问题: (1)脏读:一个事务读取到另一个事务中没有提交的数据 (2)不可重复读(虚读):同一个事务中,两次读取到的数据不一致 (3)幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改 3、隔离级别: (1)read uncommitted:读未提交 产生的问题:脏读,不可重复读,幻读 (2)read committed:读已提交 产生的问题:不可重复读,幻读 (3)repeatable read:可重复读 产生的问题:幻读 (4)serializable:串行化 可以解决所有的问题 注意:隔离级别从上往下越来越高,但是效率越来越低 4、查询隔离级别:
5、设置隔离界别:
索引mysql查询方式有两种全表扫描 根据索引检索 什么是索引?索引相当于书的目录,是为了缩小扫描范围从而加快数据库查询速度而设计的一种机制 索引是在数据库表的字段上添加的,可以提高查询效率,一张表的一个或者多个字段都可以添加索引 使用索引的优缺点优点: 1、可以提高数据检索效率,降低数据库的IO成本 2、通过索引列对数据进行排序效率会提升很多 缺点: 1、索引会占据磁盘空间 2、索引会降低更新表的效率。增删改表时,mysql不仅要保存数据库,还要保存或者更新对应的索引文件。 在那些列上添加索引?1、在经常需要搜索的列上,可以加快检索效率 2、在主键列上,强制该列的唯一性和组织表中数据的排列结构。 3、在常用的连接列上,在外键列上添加索引可以加快连接速度。 4、在经常需要范围搜索(< = > between in)的列上。 5、在经常需要排序的列上。索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。 6、在经常使用where的字段上,可以加快条件的判断速度。 7、要在很少使用增删改的字段上添加 创建与删除索引
索引失效的情况1、模糊查询时以%开头会使索引失效。 2、使用or时,or两边的字段都要使用索引,不然会失效。 3、使用复合索引时,要使用最左侧的列进行查找,不然索引会失效。 4、对索引列进行运算会使索引失效。 5、普通索引使用!=会使索引失效,主键索引不会失效。 6、索引列使用函数会使索引失效。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/23 9:58:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |