MySQL和SQLite的区别

2023-11-10

简单来说,SQLITE功能简约,小型化,追求最大磁盘效率;MYSQL功能全面,综合化,追求最大并发效率。如果只是单机上用的,数据量不是很大,需要方便移植或者需要频繁读/写磁盘文件的话,就用SQLite比较合适;如果是要满足多用户同时访问,或者是网站访问量比较大是使用MYSQL比较合适。 下面详细介绍两者的区别和应用: SQLite SQLite是非凡的数据库,他可以进程在使用它的应用中。作为一个自包含、基于文件的数据库,SQLite提供了出色的工具集,可以处理所有类型的数据,没有什么限制,而且比起服务器运行的进程型服务器使用起来轻松许多。 一个应用使用SQLite时,它的功能直接被集成在其中,应用会直接访问包含数据的文件(即SQLite数据库),而不是通过一些端口(port, socket)来交互。感谢这种底层技术,这使SQLite变得非常快速和高效,并且十分强大。

SQLite支持的数据类型

NULL: NULL值。

INTEGER: 有符号整数,按照设置用1、2、3、4、6或8字节存储。

REAL: 浮点数,使用8字节IEEE浮点数方式存储。

TEXT: 文本字符串,使用数据库编码存储(UTF-8, UTF-16BE 或 UTF-16LE)。

BLOB: 二进制大对象,怎么输入就怎么存储。

注: 想了解更多有关SQLite数据类型的信息,可以查看这一主题的 官方文档 。

SQLite 的优点 基于文件: 整个数据库都包含在磁盘上的一个文件中,因此它有很好的迁移性。

标准化: 尽管它看起来像个“简化版”的数据库,SQLite 确实支持 SQL。它略去了一些功能(RIGHT OUTER JOIN 和 FOR EACH STATEMENT),但是,又同时增加了一些其他功能。 对开发乃至测试都很棒: 在绝大多数应用的开发阶段中,大部分人都非常需要解决方案能有并发的灵活性。SQLite 含有丰富功能基础,所能提供的超乎开发所需,并且简洁到只需一个文件和一个 C 链接库。 SQLite的缺点 没有用户管理: 高级数据库都能支持用户系统,例如,能管理数据库连接对数据库和表的访问权限。但由于 SQLite 产生的目的和本身性质(没有多用户并发的高层设计),它没有这个功能。 缺乏额外优化性能的灵活性: 仍然是从设计之初,SQLite 就不支持使用各种技巧来进行额外的性能优化。这个库容易配置,容易使用。既然它并不复杂,理论上就无法让它比现在更快,其实现在它已经很快了。

何时使用 SQLite ?

嵌入式应用: 所有需要迁移性,不需要扩展的应用,例如,单用户的本地应用,移动应用和游戏。 代替磁盘访问: 在很多情况下,需要频繁直接读/写磁盘文件的应用,都很适合转为使用 SQLite ,可以得益于 SQLite 使用 SQL 带来的功能性和简洁性。 测试: 它能秒杀大部分专门针对应用业务逻辑(也就是应用的主要目的:能完成功能)的测试。

何时不用 SQLite ?

多用户应用: 如果你在开发的应用需要被多用户访问,而且这些用户都用同一个数据库,那么相比 SQLite 最好还是选择一个功能完整的关系型数据库(例如 MySQL)。 需要大面积写入数据的应用: SQLite 的缺陷之一是它的写入操作。这个数据库同一时间只允许一个写操作,因此吞吐量有限。

MySQL

MySQL 在所有大型数据库服务器中最流行的一个. 它的特性丰富,产品的开源性质使得其驱动了线上大量的网站和应用程序. 要入手 MySQL 相对简单,开发人员可以在互联网上面访问到大量有关这个数据库的信息. 注意: 由于这个产品的普及性,大量的第三方应用、工具和集成库对于操作这个RDBCMS的方方面面大有帮助. Mysql没有尝试去实现SQL标准的全部,而是为用户提供了很多有用的功能. 作为一个独立的数据库服务器,应用程序同Mysql守护进程的交互,告诉它去访问数据库自身 -- 这一点不像 SQLite. MySQL支持的数据类型

TINYINT: 一个非常小的整数.

SMALLINT: 一个小整数.

MEDIUMINT: 一个中间大小的整数.

INT or INTEGER: 一个正常大小的整数.

BIGINT: 一个大的整数.

FLOAT: 一个小的 (单精度) 浮点数,不能是无符号的那种.

DOUBLE, DOUBLE PRECISION,

REAL: 一个正常大小 (双精度) 的浮点数,不能使无符号的那种.

DECIMAL, NUMERIC: 没有被包装的浮点数。不能使无符号的那种.

DATE: 一个日期.

DATETIME: 一个日期和时间的组合.

TIMESTAMP: 一个时间戳.

TIME: 一个时间.

YEAR: 一个用两位或者4位数字格式表示的年份(默认是4位). C

HAR: 一个固定长度的字符串,存储时总是在其固定长度的空间里右对齐.

VARCHAR: 一个可变长度的字符串.

TINYBLOB, TINYTEXT: 一个BLOB或者TEXT列,最大长度255 (2^8 - 1)个字符.

BLOB, TEXT: 一个BLOB或者TEXT列,最大长度 65535 (2^16 - 1)个字符.

MEDIUMBLOB, MEDIUMTEXT: 一个BLOB或者TEXT列,最大长度 16777215 (2^24 - 1)个字符.

LONGBLOB, LONGTEXT: 一个BLOB或者TEXT列,最大长度4294967295 (2^32 - 1) 个字符.

ENUM: 一个枚举类型.

SET: 一个集合.

MySQL的优点 容易使用: 安装MySQL非常容易。第三方库,包括可视化(也就是有GUI)的库让上手使用数据库非常简单。

功能丰富: MySQL 支持大部分关系型数据库应该有的 SQL 功能——有些直接支持,有些间接支持。

安全: MYSQL 有很多安全特性,其中有些相当高级。

灵活而强大: MySQL 能处理很多数据,此外如有需要,它还能“适应”各种规模的数据。

快速: 放弃支持某些标准,让 MySQL 效率更高并能使用捷径,因此带来速度的提升。

MySQL的缺点 已知的局限: 从设计之初,MySQL 就没打算做到全知全能,因此它有一些功能局限,无法满足某些顶尖水平应用的需求。 可靠性问题: MySQL 对于某些功能的实现方式(例如,引用,事务,数据审核等) 使得它比其他一些关系型数据库略少了一些可靠性。 开发停滞: 尽管 MySQL 理论上仍是开源产品,也有人抱怨它诞生之后更新缓慢。然而,应该注意到有一些基于 MySQL 并完整集成的数据库(如 MariaDB),在标准的 MySQL 基础上带来了额外价值。

何时使用 MySQL? 分布式操作: 当SQLite所提供的不能满足你的需要时,可以把MySQL包括进你的部署栈,就像任何一个独立的数据库服务器,它会带来大量的操作自由性和一些先进的功能。

高安全性: MySQL的安全功能,用一种简单的方式为数据访问(和使用)提供了可靠的保护。 Web网站 和 Web应用: 绝大多数的网站(和Web应用程序)可以忽视约束性地简单工作在MySQL上。这种灵活的和可扩展的工具是易于使用和易于管理的——这被证明非常有助于长期运行。 定制解决方案: 如果你工作在一个高度量身定制的解决方案上,MySQL能够很容易地尾随和执行你的规则,这要感谢其丰富的配置设置和操作模式。

何时不用 MySQL? SQL 服从性: 因为 MySQL 没有[想要]实现 SQL 的全部标准,所以这个工具不完全符合SQL。如果你需要对这样的关系数据库管理系统进行整合,从MySQL进行切换是不容易的。 并发: 即使MySQL和一些存储引擎能够真地很好执行读取操作,但并发读写还是有问题的。 缺乏特色: 再次提及,根据数据库引擎的选择标准,MySQL会缺乏一定的特性,如全文搜索。 --------------------- 本文来自 画茧自缚 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/zbw1185/article/details/47975965?utm_source=copy

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL和SQLite的区别 的相关文章

  • HTAccess - 令人困惑的干净网址

    如果我想简单地重定向 clients page to clients php view page我会使用像这样简单的东西 它效果很好 Options FollowSymlinks RewriteEngine on RewriteRule c
  • MySQL SELECT 输出同一行中每个 id 的下一个日期

    我查询的表结构如下 ID Date Before value After value 1 2014 04 25 Win Loss 1 2014 04 30 Loss Win 1 2014 08 18 Win Loss 1 2014 08 2
  • SQL统计高于和低于平均分的学生人数

    我在下面有一个示例表 我试图获取高于平均分数的学生人数和低于平均分数的学生人数 name subject classroom classarm session first term score first term grade std1 m
  • MySQL用户创建的临时表已满

    我使用内存引擎创建了一个临时表 如下所示 CREATE TEMPORARY TABLE IF NOT EXISTS some text id INT DEFAULT 0 string varchar 400 DEFAULT engine m
  • MYSQL 查询返回“资源 id#12”而不是它应返回的数值

    不知道为什么 但这返回了错误的值 我正在取回此资源 ID 12 而不是我正在寻找的数值 1 执行此操作的代码是 type SELECT account type from user attribs WHERE username userna
  • MySQL 按主键排序

    某些 SQL 服务器允许使用通用语句 例如ORDER BY PRIMARY KEY 我不相信这适用于 MySQL 是否有任何此类解决方法可以允许跨多个表自动选择 或者是否需要查找查询来确定主键 我一直在研究的解决方法包括调用SHOW COL
  • 通过货币换算获取每种产品类型的最低价格

    我想选择每种产品类型中最便宜的 包括运费 价格转换为当地货币 最便宜 产品 价格 产品 运费 seller to aud 我的数据库有如下表 PRODUCTS SELLERS id type id seller id price shipp
  • MySQL 全文搜索不适用于某些单词,例如“house”

    我已经在 3 个字段中的一小部分记录上设置了全文索引 也尝试了 3 个字段的组合 并得到了相同的结果 有些单词返回结果很好 但某些单词如 house 和 澳大利亚 不这样做 有趣的是 澳大利亚 和 家乡 这样做 这似乎是奇怪的行为 如果我添
  • PHP 选择后立即删除

    我有一个 PHP 服务器脚本 它从 MySQL 数据库中选择一些数据 一旦我将 mysql query 和 mysql fetch assoc 的结果存储在我自己的局部变量中 我就想删除我刚刚选择的行 这种方法的问题在于 PHP 似乎对我的
  • 对于数据库来说,选择正确的数据类型会影响性能吗?

    如果是这样 为什么 我的意思是 tinyint 的搜索速度比 int 快吗 如果是这样 性能上的实际差异是什么 是的 根据数据类型 它确实有所不同 int vs tinyint不会在速度上产生明显的差异 但会在数据大小上产生差异 假设tin
  • 如何在 phpmyadmin 中创建 MySQL 触发器

    我想在 MySQL 中创建一个触发器 我运行以下命令 mysql gt delimiter mysql gt CREATE TRIGGER before insert money BEFORE INSERT ON money gt FOR
  • 使 pdo::query 静态

    当我运行下面的代码时出现此错误 我通常使用 msql 函数 但我尝试使用 PDO 代替 怎么了 致命错误 第 14 行无法静态调用非静态方法 PDO query
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • 如何在 Laravel 查询中使用多个 OR,AND 条件

    我需要 Laravel 查询帮助 我的自定义查询 返回正确结果 Select FROM events WHERE status 0 AND type public or type private 如何写这个查询Laravel Event w
  • PHP 绑定“bigint”数据类型(MySQLi 准备好的语句)

    studentId 57004542323382 companyOfferId 7 sql INSERT INTO studentPlacement companyOfferId studentId VALUES if stmt db gt
  • Hibernate 对集合的查询过滤器

    我想执行以下查询 from Item i where i categoryItems catalogId catId 然而 这会产生以下异常 非法尝试取消引用集合 所以我用谷歌搜索 找到了这个 Hibernate 论坛帖子https for
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • 第三个下拉菜单不从数据库填充

    我有以下 Index php
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • Apache、PHP 和 MySQL 可移植吗?

    我可以在外部硬盘上运行 Apache PHP 和 MySQL 吗 我需要这个 因为我在不同的地方工作 计算机 有时我没有安装和配置所有使用的应用程序 当然可以 XAMPP http www apachefriends org en xamp

随机推荐

  • Spring源码从入门到精通---@Value赋值(十)

    上篇文章介绍了BeanPostProcessor spring框架生命周期 PostConstruct PreDestroy InitializingBean disposableBean接口 依赖注入 Autowird都离不开这个接口 B
  • Python兼职五天赚3000,方法经验分享,带你实现财富自由!!!

    大学生用Python兼职五天狂赚1200 方法经验分享 让你早日实现财富自由 现在的年轻人虽然表面风光 可是却很难攒下钱 这一类人被定义为 隐形贫困者 原因是什么呢 根据小编的分析 现在人们对生活质量要求普遍提高了 但是工资没有跟得上自己的
  • 正则表达式之-验证邮箱

    一 邮箱正则概述 昨天在开发项目的时候 有一个验证邮箱的需求 本来想着自己写一个正则表达式来验证的 但是写的时候却发现很多关于正则的知识都忘的差不多了 有些东西想记住真的就要重复练习 看明白了没有用 要天天练习才行 于是在参考了众多资料之后
  • 使用servlet处理HTTP响应

    1 解释http协议中包含哪几部份 状态行 放的是协议 版本 状态码描述 响应头 键 值 空行 内容 消息体 2 解释状态行的作用 有哪些常见的状态码 分别代表什么含义 状态行作用在Servlet中设置状态码来实现许多重要功能 状态码 20
  • JPA @Id 和 @GeneratedValue 注解介绍

    转载自一个404页面 Id Id 注解用于声明一个实体类的属性映射为数据库的主键列 该属性通常置于属性声明语句之前 可与声明语句同行 也可写在单独行上 Id标注也可置于属性的getter方法之前 GeneratedValue Generat
  • OPPO/真我手机ColorOS13系统解账户锁-移除手机密码图案锁方法

    在搞机之前 请确定自己的手机不是非法获取 本文只讲叙ColorOS13系统解锁方法 仅为个人测试研究出来的经验 未对官方系统进行任何修改 只推荐专业维修师傅从维修的角度进行解锁 不推荐个人用户对非自己的手机进行非法破解 产生任何违法行为需要
  • 第十四届蓝桥杯三月真题刷题训练——第 27 天

    目录 第 1题 数学考试 前缀和 代码 第 2 题 地标访问 二分 题目背景 题目描述 输入格式 输出格式 输入输出样例 说明 提示 代码 第 1题 数学考试 前缀和 代码 package 第十四届蓝桥杯三月真题刷题训练 day27 imp
  • 常见文件文件头

    各类文件的文件头标志 1 从Ultra edit 32中提取出来的 附件 文件格式分析器 JPEG jpg 文件头 FFD8FF PNG png 文件头 89504E47 GIF gif 文件头 47494638 TIFF tif 文件头
  • NAT介绍

    在传统TCP IP通信过程中 所有的路由器仅仅是充当一个中间人的角色 也就是通常 所说的存储转发 即路由器不会对转发的数据包进行修改 准确地讲 除了将源MAC地址 换成自己的MAC地址以外 路由器不会对转发的数据包做任何修改 而NAT恰恰是
  • J2EE-007 反射+BaseServlet实现

    因为之前都是用的幕布进行文章发布现在移动到这里进行统一管理 文章我就不再编写了 后面会用CSDN进行编写 望审核给与通过谢谢 https share mubu com doc 3hGLbDxQhQV
  • Linux进程间通信——eventfd

    Table of Contents 什么是eventfd 创建eventfd 读eventfd 写eventfd 使用例子 什么是eventfd eventfd是Linux 2 6提供的一种系统调用 它可以用来实现事件通知 eventfd包
  • 《深入理解计算机系统》实验五Cache Lab

    前言 深入理解计算机系统 实验五Cache Lab下载和官方文档机翻请看 https blog csdn net weixin 43362650 article details 121989400 我觉得这个文档对整个实验很有帮助 对于我来
  • CTracker

    https github com pjl1995 CTracker 本机可以跑 jacke121 CTracker master 可视化 demo show py 效果不是特别好 论文地址 https arxiv org pdf 2007
  • Python 生成随机各类字符串

    Python 生成随机各类字符串 Python 生成随机字符串 包括字符和数字组合 大写字符串 小写字符串 参数 字符数量 数字数量 def random stringdigit letter count digit count str1
  • 软件测试之从0到1完成UI自动化测试框架搭建系列(3)

    上节 我们讲了下 如何运用uiautomator2 atx pytest进行自动化的单元测试 这节 我们再思考下 如果我们每条用例 都去一步一步 先元素定位 然后写操作 然后写各种方法 那这个代码量是不是就有点偏多了 另外也不方便维护 比如
  • win10操作系统jdk11不带jre的解决办法、单/多版本jdk环境变量的配置、javac不可用的解决方法

    目录 win10操作系统jdk11不带jre的解决办法 两个java版本的jdk环境变量的配置 只有一个java版本时只需设置以下变量 怎么解决javac不可用的问题 win10操作系统jdk11不带jre的解决办法 在开始菜单中寻找命令提
  • 时钟抖动(Jitter)的基本概念

    随着通信系统中的时钟速率迈入GHz级 抖动这个在模拟设计中十分关键的因素 也开始在数字设计领域中日益得到人们的重视 在高速系统中 时钟或振荡器波形的时序误差会限制一个数字I O接口的最大速率 不仅如此 它还会导致通信链路的误码率增大 甚至限
  • android五大布局之LinearLayout

    初次接触android的同学 最先接触的也就是android的布局了 因为android的代码与界面是分开的 因此想要界面显示什么 布局应该是第一步 就像一个孩子生下来你要给他穿衣服一样 因此 我们现在所写的布局就是你看到项目运行的界面 L
  • MATLAB 快速傅里叶变换(fft)结果为什么是复数?

    文章核心是两部分 1 从直观和本质的角度 说明为什么快速傅里叶变换的结果是复数 2 详细说明了MATLAB中fft函数的运用方法 并给出了fft幅度谱的求解代码 但要真正了解快速傅里叶变换 核心是理解 FFT的计算原理 目录 一 直观解释
  • MySQL和SQLite的区别

    简单来说 SQLITE功能简约 小型化 追求最大磁盘效率 MYSQL功能全面 综合化 追求最大并发效率 如果只是单机上用的 数据量不是很大 需要方便移植或者需要频繁读 写磁盘文件的话 就用SQLite比较合适 如果是要满足多用户同时访问 或