MySQL 迁移至 SQLite 问题记录

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS PostgreSQL Serverless,0.5-4RCU 50GB 3个月
推荐场景:
对影评进行热评分析
简介: 将WPF项目从MySQL迁移到SQLite以简化部署流程。涉及更换Nuget包(Microsoft.Data.Sqlite.Core或System.Data.SQLite),修改SQL语法,如主键和唯一约束的声明,以及处理数据库连接和数据类型差异。SQLite不支持MySQL的truncate语句,需用delete并清理sqlite_sequence表。还需注意逻辑操作符&&需替换为and。更多细节在文中详述。

最近接手了一个WPF项目,数据库使用的MySQL,为了简化生产环境部署流程,果断选择迁移到SQLite,由于原项目未使用ORM框架,导致很多SQL语法也得改。

SQLite基础语法请参考该页面

  1.依赖包的更改

    有两个Nuget包选: Microsoft.Data.Sqlite.Core / System.Data.SQLite,我都安装试了下,除了类型大小写不一致之外,功能几乎一样,由于老项目是.Net Framework 4.x,稳妥起见还是使用了后者,至于各种引用类型的更改,几乎只需要将MySql开头的类型名全局替换成SQLite的则可(记得删掉MySQL的引用,确保只调用了SQLite相关类库)  

    


  2.数据库连接

    SQLite本身是一个基于文件的数据库系统,每个数据库就是一个文件,若文件不存在它会自动创建,下面的示例代码就是建立与运行目录下test.sqlite文件的连接     

 private const string connStr = "Data Source = {0}";
 ...
 string dbName = "test.sqlite";

 SQLiteConnection Connection = new SQLiteConnection(string.Format(connStr, dbName));

 Connection.Open();


  3.数据库切换

    虽然SQLiteConnection也提供了ChangeDatabase方法,但是不管用 o(╥﹏╥)o   得先手动释放原来的连接资源,再建立新的连接

   Connection?.Dispose();

   Connection = new SQLiteConnection(string.Format(connStr, dbName));

   Connection.Open();


  4.建表差异

    编码集和数据引擎的部分肯定是不能要了,主键要将关键字放到对应字段后面,unique约束同理,自增则是去掉下划线(大小写依然不敏感),但是有一个需要注意的地方是:自增字段得用integer,用int也行,但它不会自增

 private const string SQL_CreateTable = @"

               create table if not exists `TestTable` (

                   id int not null auto_increment,                    

                   name varchar(64) not null,

                   primary key(id),
           unique key(name)

               ) collate='utf8_general_ci' engine=InnoDB;";

 //上面是MySQL建表语句
 //下面是SQLite建表语句

 private const string SQL_CreateTable = @"

               create table if not exists `TestTable` (

                   id integer PRIMARY KEY AUTOINCREMENT NOT NULL,                    

                   name varchar(64) not null UNIQUE

               );";

 

 

  5.删表差异 - truncate 语句

    SQLite不支持 truncate ,清空一张表需要先delete,然后再去sqlite_sequence表里删除对应表名的自增键

 new SQLiteCommand(@"delete from tablename;", Connection).ExecuteNonQuery();
 new SQLiteCommand(@"DELETE FROM sqlite_sequence WHERE name = 'tablename';", Connection).ExecuteNonQuery();

 

  6.数据类型差异

    MySqlDbType要更改为DbType,后者位于System.Data命名空间下,具体对照关系参考这个链接,图中的Key值为MySqlDbType类型,Value为对应的DbType类型


    

 

  7.逻辑操作符差异 -- &&符号

    若不是接手这个项目,我都不知道MySQL居然能用 && 操作符,SQLite当然是不支持的,得改成 and 关键字

 

  8.待补充,以后遇到其他问题再补充

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5月前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!
|
3月前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!点击阅读原文完成实验就可获得一本日历哦~
|
3月前
|
关系型数据库 MySQL 数据库
|
3月前
|
关系型数据库 MySQL 数据库
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
RDS MySQL灾备服务协同解决方案构建问题之数据库备份数据的云上云下迁移如何解决
|
24天前
|
运维 关系型数据库 Java
DataKit6.0将MySQL8.0迁移至openGauss6.0
DataKit6.0将MySQL8.0迁移至openGauss6.0
|
2月前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
397 15
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
Hadoop-21 Sqoop 数据迁移工具 简介与环境配置 云服务器 ETL工具 MySQL与Hive数据互相迁移 导入导出
50 3
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
84 0
|
3月前
|
安全 关系型数据库 MySQL
揭秘MySQL海量数据迁移终极秘籍:从逻辑备份到物理复制,解锁大数据迁移的高效与安全之道
【8月更文挑战第2天】MySQL数据量很大的数据库迁移最优方案
648 17
|
4月前
|
关系型数据库 MySQL 数据库

相关产品

  • 云数据库 RDS MySQL 版