| |
|
开发:
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的地表最强总结 |
目录 DML(Data Manipulation Language)数据操纵语言 DML(Data Manipulation Language)数据操纵语言 DML(Data Manipulation Language)数据操纵语言 DQL(Data Query Language)数据库查询语言 每日必看SQL语句分类DML(Data Manipulation Language)数据操纵语言
DML(Data Manipulation Language)数据操纵语言
DML(Data Manipulation Language)数据操纵语言
DQL(Data Query Language)数据库查询语言
常用操作对库的常用操作
对表的常用操作
表记录的常用操作
? ASC: 代表升序.(不写默认该值) ? basc 降序
? count(1)和count(字段)的区别 ? count(1)查询包含所有的记录数,包含null值 ? count(字段)会统计该字段在表中的所有出现的次数,忽略字段为null的情况,及不统计字段为null的字段 ? count(1)和count(*)和count(字段)的区别 ? 执行效果上 ? count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL ? count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL ? count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。 ? 执行效率上 ? 列名为主键,count(列名)会比count(1)快 ? 列名不为主键,count(1)会比count(列名)快 ? 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*) ? 如果有主键,则 select count(主键)的执行效率是最优的 ? 如果表只有一个字段,则 select count(*)最优。 数据类型
? 字段名必须以字母开头,尽量不要使用拼音 ? 长度不能超过30个字节(具体看版本) ? 不能使用SQL保留字,如:where,group,order ? Oracle习惯全大写:USER_NAME,MySQL习惯全小写:user_name ? 多单词用下划线隔开,而非Java的驼峰命名
? char ? 长度固定,不足使用空格填充,最多容纳2000个字符 ? char(11)占用11位,查询速度极快,但浪费空间 ? varchar ? varchar变长字符串,最多容纳4000个字符 ? varchar(11)abc 只占用3位,查询速度慢,但节省空间
? tinyint,int整数类型 ? float,double小数类型 ? numeric(5,2) decimal(5,2)—也可以表示小数,表示总共5位,其中可以有两位小数 ? decimal和numeric表示精确的整数数字
? date 包含年月日 ? time时分秒 ? datetime包含年月日和时分秒 ? timestamp时间戳,不是日期,而是从1970年1月1日到指定日期的毫秒数
? blob 二进制数据,可以存放图片、声音,容量4g。早期有这样的设计。但其缺点非常明显,数据库庞大,备份缓慢,这些内容去备份多份价值不大。同时数据库迁移时过大,迁移时间过久。所以目前主流都不会直接存储这样的数据,而只存储其访问路径,文件则存放在磁盘上。 字段约束
? 如果一个列添加了主键约束,那么这个列就是主键,主键的的特点就是唯一且不能为空,通常情况下每张表都有主键
? 当主键为数值类型时,为了方便维护,可以设置主键自增策略(auto_increment),设置了主键自增策略后,数据库会在表中保存一个AUTO_INCREMENT变量值,初始值为1,当需要id值,不需要我们指定值,由数据库负责从AUTO_INCREMENT获取一个id值,作为主键值插入到表中。而且每次用完AUTO_INCREMENT值,都会自增1. AUTO_INCREMENT=1
? 如果一个列添加了非空约束,那么这个列的字段不能为空,但可以重复
? 如果一个列添加了唯一约束,那么这个列的字段必须唯一,但可以为空 函数基础函数upper
length
substr
concat
replace
ifnull
round()
now
hour()时 minute()分 second()秒
条件查询distinct
where? like
? lower
null
between and? limit
? select * from emp limit 2 --列出前两条 ? select * from emp limit 1,2 --从第二条开始,展示2条记录 ? select * from emp limit 0,3 --从第一条开始,展示3条记录--前三条 order by
聚合函数 aggregationcount
max/min
sum/avg
group by
事务什么是事务?数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 简单的说:事务就是将一堆的SQL语句(通常是增删改操作)绑定在一起执行,要么都执行成功,要么都执行失败,即都执行成功才算成功,否则就会恢复到这堆SQL执行之前的状态。 事务4个特性的ACID一般来说,事务必须满足四个条件:原子性,一致性,隔离性,持久性
隔离级别读未提交(Read uncommitted)安全性最差,可能发生并发数据问题,性能最好 读提交(read committed) Oracle默认的隔离级别 可重复读 (repeatable read)MySQL默认的隔离级别,安全性较好,性能一般 串行化(Serializable) 表级锁,读写都加锁,效率低下,安全性高,不能并发 查询mysql的隔离级别在默认情况下,MySQL每执行一条SQL语句,都是一个单独的事务。如果需要在一个事务中包含多条SQL语句,那么需要手动开启事务和结束事务。
事务处理在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务 事务处理可以用来维护数据的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行 事务用来管理 insert、update、delete 语句,因为这些操作才会“破坏”数据,查询select语句是不会的 MySQL默认数据库的事务是开启的,执行SQL后自动提交。 MySQL的事务也可以改成手动提交,那就有两个步骤:先开启,写完SQL后,再手动提交。 提交commit#多条语句时,批量执行,事务提交 #有了事务,多步操作就形成了原子性操作,高并发下也不会引起数据错乱 #mysql的事务默认就是开启的 -- 多条语句一起操作时,要么一起成功要么一起失败 ? 回滚 rollback#多条语句,批量执行,insert插入重复的主键导致失败时,事务回滚 ? 表强化非空约束:not null唯一约束:unique创建了唯一约束,插入数据时数据库会进行检查,如果插入的值相同,就会检查报错: 主键约束:primary key主键是一条记录的唯一标识,具有唯一性,不能重复 外键约束:foreign key默认约束:default检查约束:check很少使用,了解即可,录入age超过200将报错 多表联查笛卡尔积案例:SELECT * FROM dept,emp
三种连接join内连接 inner join
左(外)连接 left join
右(外)连接 right join
子查询子查询是指嵌入在其他select语句中的select语句,也叫嵌套查询。子查询执行效率低慎用。记录少时效率影响不大、图方便直接使用,记录多时最好使用其它方式替代。 案例:? ? SQL的执行顺序(1) FROM [left_table] 选择表 (2) ON <join_condition> 链接条件 (3) <join_type> JOIN <right_table> 链接 (4) WHERE <where_condition> 条件过滤 (5) GROUP BY <group_by_list> 分组 (6) AGG_FUNC(column or expression),... 聚合 (7) HAVING <having_condition> 分组过滤 (8) SELECT (9) DISTINCT column,... 选择字段、去重 (9) ORDER BY <order_by_list> 排序 (10) LIMIT count OFFSET count; 分页 索引定义索引是一种排好序的快速查找的数据结构,它帮助数据库高效的进行数据的检索。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(额外的存储空间),这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高效的查找算法。这种数据结构就叫做索引。 一般来说索引本身也很大,不可能全部存储在内存中,因此往往以索引文件的形式存放在磁盘中。目前大多数索引都采用BTree树方式构建。 分类单值索引:一个索引只包括一个列,一个表可以有多个列 唯一索引:索引列的值必须唯一,但允许有空值;主键会自动创建唯一索引 复合索引:一个索引同时包括多列 创建索引查看索引,主键会自动创建索引
创建普通索引
创建唯一索引
?创建复合索引
删除索引
索引扫描类型ALL 全表扫描,没有优化,最慢的方式 index 索引全扫描,其次慢的方式 range 索引范围扫描,常用语<,<=,>=,between等操作 ref 使用非唯一索引扫描或唯一索引前缀扫描,返回单条记录,常出现在关联查询中 eq_ref 类似ref,区别在于使用的是唯一索引,使用主键的关联查询 const/system 单条记录,系统会把匹配行中的其他列作为常数处理,如主键或唯一索引查询,system是const的特殊情况 null MySQL不访问任何表或索引,直接返回结果 最左特性? 当我们创建一个联合索引(复合索引)的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)、(k1,k3)和(k1,k2,k3)索引,这就是最左匹配原则,也称为最左特性。 为何索引快明显查询索引表比直接查询数据表要快的多,首先,索引表是排序了,可以类似二分查找,非常有效的提高了查询的速度。 先到事先排序好的索引表中检索查询,找到其主键后,就直接定位到记录所在位置,然后直接返回这条数据。 排序,tree结构,类似二分查找 索引表小 优点索引是数据库优化 表的主键会默认自动创建索引 每个字段都可以被索引 大量降低数据库的IO磁盘读写成本,极大提高了检索速度 索引事先对数据进行了排序,大大提高了查询效率 缺点索引本身也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也要占用空间 索引表中的内容,在业务表中都有,数据是重复的,空间是“浪费的” 虽然索引大大提高了查询的速度,但对数据的增、删、改的操作需要更新索引表信息,如果数据量非常巨大,更新效率就很慢,因为更新表时,MySQL不仅要保存数据,也要保存一下索引文件 随着业务的不断变化,之前建立的索引可能不能满足查询需求,需要消耗我们的时间去更新索引 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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 9:53:14- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |