MySQL的SQL文件转换为适用于SQLite的SQL文件

最近了解到一个较小众的数据库SQLite,打算拿来玩一玩,但手上目前只有MySQL的一些库表文件无法直接导入使用,所以出一期记录,手动进行二者转换

分析SQL语句

首先要明确,MySQL和SQLite两者格式差别不止限于字段类型、特殊的函数等,特别是 CREATE TABLEINSERT INTOALTER TABLE等语句,这些都需要特别关注。

转换数据类型

将MySQL的数据类型转换为SQLite对应的数据类型。例如,将 INTINTEGER 转换为 INTEGER ,将 VARCHARTEXTCHAR 转换为 TEXT ,将 DATETIMETIMESTAMP 转换为 TEXTDATETIME(SQLite没有专门的日期时间类型,但可以使用TEXT、REAL或INTEGER来存储日期和时间)。

数据类型 MySQL SQLite
整数型 TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT INTEGER
浮点型 FLOAT, DOUBLE, DECIMAL(M,D) REAL
字符串类型 CHAR(M), VARCHAR(M), TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT TEXT
日期和时间类型 DATE, TIME, DATETIME, TIMESTAMP, YEAR 无内置类型,一般存为TEXT
sql 复制代码
# mysql
CREATE TABLE users (  
  	id INT PRIMARY KEY,  
   	name VARCHAR(50) NOT NULL,   
   	created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
 );
 # sqlite
CREATE TABLE users (  
     id INTEGER PRIMARY KEY,  
     name TEXT NOT NULL,  
     created_at TEXT DEFAULT (datetime('now'))  
 );

处理自增字段

在MySQL中,自增字段通常使用 AUTO_INCREMENT 属性。在SQLite中,自增字段使用 INTEGER PRIMARY KEY AUTOINCREMENT。确保转换这些字段的定义。

sql 复制代码
# mysql
CREATE TABLE users (  
    id INT AUTO_INCREMENT PRIMARY KEY 
);
# sqlite
CREATE TABLE users (  
    id INTEGER PRIMARY KEY AUTOINCREMENT
);

处理默认值和约束

确保MySQL中使用的默认值和约束在SQLite中也是有效的。有些默认值或约束在SQLite中可能不被支持,需要进行相应的调整。

  • 外键约束:

    • MySQL:使用 FOREIGN KEY 关键字定义外键约束。

    • SQLite :在早期版本中不支持外键约束,但在3.6.19版本之后开始支持。虽然支持,但默认情况下外键约束是关闭的,需要显式开启(使用 PRAGMA foreign_keys = ON;)。

  • 默认值和NOT NULL约束:

    • MySQL:可以为列设置默认值,并使用 NOT NULL 约束确保列不能存储NULL值。

    • SQLite :支持 NOT NULL 约束,以及为列设置默认值。但在SQLite中,如果某列没有显式设置默认值且没有 NOT NULL 约束,那么它默认可以接受NULL值。

  • 唯一约束:

    在 MySQL 和 SQLite 中二者没有区别,都可以使用 UNIQUE 约束来确保某列中的所有值都是唯一的。

  • 检查约束:

    • MySQL:在8.0及之后的版本支持 CHECK 约束,用于限制列中的值必须满足的条件。

    • SQLite :支持 CHECK 约束,用于确保列中的值满足特定的条件或表达式。

  • 存储引擎与性能:

    • MySQL:支持多种存储引擎,如 InnoDB 和 MyISAM,每种引擎都有其特定的性能特点和功能。

    • SQLite :使用单一的磁盘文件来存储整个数据库,没有存储引擎的概念,因此其性能特点与MySQL的存储引擎有所不同。

转换函数和特性

如果SQL文件中使用了MySQL特有的函数或特性,需要查找SQLite中的等效函数或特性,并进行替换。

例如,MySQL的 NOW() 函数在SQLite中可以使用 datetime('now')CURRENT_TIMESTAMP 来替代。

移除不支持的语句

删除或注释掉SQL文件中SQLite不支持的语句,如MySQL特有的存储过程、触发器、引擎等。


ps:写在最后,手动转换实在太累,可以借助 Navicat 工具进行二者转换,将MySQL导出向导为 .txt 格式,最后在SQLite里导入向导即可。

相关推荐
梁萌17 分钟前
ShardingSphere分库分表实战
数据库·mysql·实战·shardingsphere·分库分表
川石课堂软件测试34 分钟前
Mysql中触发器使用详详详详详解~
数据库·redis·功能测试·mysql·oracle·单元测试·自动化
程序员游老板1 小时前
基于SpringBoot3_vue3_MybatisPlus_Mysql_Maven的社区养老系统/养老院管理系统
java·spring boot·mysql·毕业设计·软件工程·信息与通信·毕设
白衣衬衫 两袖清风2 小时前
SQL联查案例
数据库·sql
soft20015253 小时前
从一次增删改操作开始:彻底理解 MySQL Buffer Pool 的地位与作用
数据库·mysql
晨曦5432103 小时前
MySQL与Python数学函数大比拼
python·mysql
q_19132846953 小时前
基于SpringBoot2+Vue2的行业知识答题考试系统
java·vue.js·spring boot·mysql·毕业设计·计算机毕业设计·演示文稿
hgz07104 小时前
数据库事务
数据库·mysql
千寻技术帮4 小时前
10393_基于SSM的杂志订阅网站管理系统
mysql·毕业设计·ssm·安装·文档·杂志订阅
IT教程资源C5 小时前
(N_122)基于springboot,vue网上订餐系统
mysql·vue·前后端分离·网上订餐系统·springboot网上订餐