db + diff mysql oracle / diff mysql 5.7 mysql 8.0 / diff mysql postgresql
s
- mysql 索引类型
索引类型 | 用途 | 特点 |
---|---|---|
B-Tree 索引 | 各种数据类型的等值查询、范围查询和排序 | 二叉树结构,适用于各种数据类型 |
哈希索引 | 提高等值查询性能 | 哈希函数映射索引列值,不支持范围查询和排序 |
全文索引 | 全文搜索 | 支持自然语言查询 |
空间索引 | 地理空间数据查询 | 用于支持地理位置或几何形状的查询 |
联合索引 | 优化多列查询性能 | 将多个列组合在一起创建的索引 |
唯一索引 | 保证索引列值的唯一性 | 防止重复数据 |
前缀索引 | 优化存储和查询 | 仅使用列值的前缀部分来构建索引 |
- mysql 与 PostgreSQL区别
功能/特性 | MySQL 8 | PostgreSQL |
---|---|---|
开发公司 | Oracle Corporation | PostgreSQL Global Development Group |
开源许可 | GPL 2.0 | PostgreSQL License |
存储引擎 | InnoDB(默认),MyISAM,等 | 默认为PostgreSQL,支持多种插件引擎 |
JSON 数据类型 | 支持 | 支持 |
全文搜索 | 支持全文索引和全文搜索 | 支持全文搜索 |
空间数据类型 | 支持空间数据类型(GIS) | 支持PostGIS插件,用于空间数据 |
事务管理 | ACID 兼容 | ACID 兼容 |
并发控制 | MVCC(多版本并发控制) | MVCC(多版本并发控制) |
存储过程和触发器 | 支持 | 支持 |
外键 | 支持 | 支持 |
分区表 | 支持 | 支持 |
备份和恢复 | 使用mysqldump和InnoDB备份工具 | 使用pg_dump和pg_restore |
扩展性 | 支持垂直和水平扩展 | 支持垂直和水平扩展 |
性能优化 | 使用索引提示,分区表等进行性能优化 | 使用查询优化器,索引和统计信息进行优化 |
触发器 | 支持 | 支持 |
并发连接 | 多线程 | 多进程 |
用户定义函数(UDF) | 支持 | 支持 |
多版本控制(MVCC) | 是 | 是 |
主从复制 | 支持 | 支持 |
窗口函数 | 支持 | 支持 |
自增长列 | 自动增长列 | SERIAL 类型 |
自动递增列 | 支持 | 支持 |
外部数据表 | 支持通过存储引擎实现 | 支持通过外部表实现 |
-
性能方面 | MySQL 8 | PostgreSQL |
---|---|---|
读性能 | 在一些情况下,MySQL 8 可以更好地处理读取密集型工作负载。 | PostgreSQL 通过MVCC和优化的查询计划提供强大的读性能。 |
写性能 | 对于写入密集型工作负载,MySQL 8 可能有优势。 | PostgreSQL 在高并发写入情境中可能受到MVCC的影响,但通过适当的调优和索引设计,也能获得很好的写性能。 |
并发连接 | MySQL 8 处理大量并发连接的能力相对较好。 | PostgreSQL 使用MVCC,具有良好的并发处理能力。 |
事务处理 | 两者都提供ACID兼容性,但在某些情况下可能有微小差异。 | 两者都提供ACID兼容性,但实际性能可能受到具体的事务实现和工作负载的影响。 |
索引优化 | MySQL 8 通过使用索引提示和查询缓存来进行索引优化。 | PostgreSQL 通过查询优化器和统计信息来进行索引优化。 |
备份和恢复 | 使用mysqldump和InnoDB备份工具进行备份和恢复。 | 使用pg_dump和pg_restore进行备份和恢复。 |
全文搜索性能 | MySQL 8 提供全文搜索功能,但性能可能受到具体使用情境的影响。 | PostgreSQL 的全文搜索性能通常被认为较好,特别是使用tsvector和tsquery类型。 |
空间数据性能 | MySQL 8 支持空间数据类型,但在GIS方面可能不如PostGIS强大。 | PostgreSQL 的PostGIS插件提供强大的空间数据处理能力。 |
自增长列性能 | 两者都支持自增长列,性能相当。 | 两者在自增长列方面性能相当。 |
- mysql 与 oracle的几点区别
序号 | mysql | oracle | DB2 | 备注 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1.组函数用法规则 | mysql中组函数在select语句中可以随意使用 | oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group by子句中的列否则报错 | select name,count(money) from user;这个放在mysql中没有问题在oracle中就有问题了。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.自动增长的数据类型处理 | MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值 |
ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。 CREATE SEQUENCE序列号的名称(最好是表名+序列号标记)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE; 其中最大的值按字段的长度来定,如果定义的自动增长的序列号NUMBER(6),最大值为999999 INSERT语句插入这个字段值为:序列号的名称.NEXTVAL |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3.单引号的处理 | MYSQL里可以用双引号包起字符串 |
ORACLE里只可以用单引号包起字符串 在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4.分页的SQL语句的处理 |
MYSQL处理分页的SQL语句比较简单,用LIMIT开始位置,记录个数,PHP里还可以用SEEK定位到结果集的位置 -
- |
ORACLE处理分页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置,并且只能用ROWNUM<100,不能用ROWNUM>80。 以下是经过分析后较好的两种ORACLE翻页SQL语句(ID是唯一关键字的字段名): -
-
- |
-
- |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5.长字符串的处理 | - | 长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节,如果要插入更长的字符串,请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6.日期字段的处理 |
MYSQL日期字段分DATE和TIME两种 MYSQL找到离当前时间7天用DATE_FIELD_NAME > SUBDATE(NOW(),INTERVAL 7 DAY) MYSQL中插入当前时间的几个函数是:NOW()函数以`'YYYY-MM-DD HH:MM:SS'返回当前的日期时间,可以直接存到DATETIME字段中。CURDATE()以’YYYY-MM-DD’的格式返回今天的日期,可以直接存到DATE字段中。CURTIME()以’HH:MM:SS’的格式返回当前的时间,可以直接存到TIME字段中。例:insert into tablename (fieldname) values (now()) |
ORACLE日期字段只有DATE,包含年月日时分秒信息,用当前数据库的系统时间为SYSDATE,精确到秒,或者用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)年-月-日24小时:分钟:秒的格式YYYY-MM-DD HH24:MI:SS TO_DATE()还有很多种日期格式,可以参看ORACLE DOC.日期型字段转换成字符串函数TO_CHAR(‘2001-08-01’,’YYYY-MM-DD HH24:MI:SS’) ORACLE找到离当前时间7天用 DATE_FIELD_NAME >SYSDATE - 7; oracle中当前时间是sysdate |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7.空字符的处理 | MYSQL的非空字段也有空的内容 |
ORACLE里定义了非空字段就不容许有空的内容 按MYSQL的NOT NULL来定义ORACLE表结构,导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8.字符串的模糊比较 | MYSQL里用字段名like%‘字符串%’ | ORACLE里也可以用字段名like‘字符串%’但这种方法不能使用索引,速度不快,用字符串比较函数instr(字段名,‘字符串’)>0会得到更精确的查找结果。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9.程序和函数里 | 操作数据库的工作完成后请注意结果集和指针的释放。 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 视图 | MySQL 视图是存储在数据库中的虚拟表,它是由一个或多个基表(也可以是其他视图)的行和列组成的。使用视图可简化 SQL 语句,隐藏基表的一些细节,提高 SQL 的可读性和易用性。MySQL 视图有以下特点:
可以简化 SQL 查询; |
Oracle 视图是存储在内存中的虚拟表,它是由一个或多个基表(也可以是其他视图)的行和列组成的。在 Oracle 中,可以创建三种类型的视图:
可更新视图:可以对视图进行 INSERT、UPDATE 和 DELETE 操作,实际上是通过视图操作基表的实例; Oracle 视图可以同时执行 DML(INSERT、UPDATE、DELETE)和 DDL(CREATE、ALTER、DROP)操作,而 MySQL 视图只能执行 SELECT 操作; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- MySQL8.0与MySQL5.7差异分析
mysql 1.x 最初版本 1995 年 mysql 3.x 基本数据库功能 mysql 4.0 引入存储过程,视图,游标 mysql 5.x 引入InnoDB 存储引擎、事件调度器、存储过程和视图 mysql 8.x 2018年。更新windows函数、common table expressions(CTE )和JSON 支持
- https://blog.csdn.net/m0_54849806/article/details/126113279
序号 | 比较项 | mysql 5.7 | mysql 8.0 | 备注 |
1 | 发布时间 | 2015 年 10 月 21 日发布 | 2018年4月20日发布 | |
2 | 无 | 增强包括:SQL窗口函数,公用表表达式,NOWAIT和SKIP LOCKED,降序索引,分组,正则表达式,字符集,成本模型和直方图 | ||
3 | 无 |
JSON扩展语法,新功能,改进排序和部分更新。 使用JSON表函数,您可以使用JSON数据的SQL机制。 |
||
4 | 4 账户与安全 | grant all privileges on *.* to 'bertram'@'localhost' identified by '1q2w3e4r'; #grant all privileges on *.* to '用户名'@'主机' identified by '密码'; |
分开执行,否则出现sql语法错误: mysql> create user 'bertram'@'localhost' identified by '1q2w3e4r'; mysql> grant all privileges on *.* to 'bertram'@'localhost'; |
|
5 | 认证插件更新 | MySQL5.7 默认身份插件是 mysql_native_password |
MySQL8.0 默认的身份插件是 caching_sha2_password mysql> show variables like 'default_authentication_plugin%'; mysql> alter user '用户名'@'主机' identified with mysql_native_password by '密码'; |
|
6 | 密码策略 | - |
MySQL8.0的密码管理策略有3个变量 password_history #修改密码不允许与最近几次使用或的密码重复,默认是0,即不限制 查询当前MySQL密码管理策略相关变量,使用以下命令: mysql> show variables like 'password%'; 1)设置全局的密码管理策略,在my.ini配置文件中,设置以上3个变量的值这种设置方式,需要重启mysql服务器;某些生产环境不允许重启,MySQL8.0提供了关键字persist持久化: 2)针对某一个用户单独设置密码管理策略 查看一下: 查看某一张的字段的所有字段,使用以下命令: ## 找到mysql的配置文件 my.cnf, 我的在 /etc/my.cnf |
|
7 | 角色管理 | - |
角色:一组权限的集合 2)为这个角色赋予相应权限 3)创建一个用户 4)为这个用户赋予角色的权限 执行完上面4步,用户1就拥有了插入与更新的权限 6)为这个用户赋予同样的角色 执行完上面2步,用户2也用了角色1的权限,即插入与更新 7)启用角色,设置了角色,如果不启用,用户登录的时候,依旧没有该角色的权限 8)如果一个用户有多个角色,使用以下命令 MySQL中与用户角色相关的表:mysql.default_roles、mysql.role_edges。 |
|
end
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义