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里导入向导即可。

相关推荐
计算机学姐1 小时前
基于python+django+vue的旅游网站系统
开发语言·vue.js·python·mysql·django·旅游·web3.py
SZ1701102311 小时前
麒麟银河桌面版,成功安装cuda12.6,mysql
mysql·cuda·银河麒麟
林太白1 小时前
❤Node09-用户信息token认证
数据库·后端·mysql·node.js
我爱娃哈哈1 小时前
MySQL 优化器:理解与探秘
数据库·mysql
Data 3171 小时前
Shell脚本编程基础(二)
大数据·linux·运维·数据仓库·sql·centos·bash
DREAM依旧2 小时前
MySQL数据库概述与基础
mysql·database
尘浮生2 小时前
Java项目实战II基于Java+Spring Boot+MySQL的校园社团信息管理系统(源码+数据库+文档)
java·开发语言·数据库·spring boot·mysql·spring·maven
Lansonli3 小时前
大数据Flink(一百二十):Flink SQL自定义函数(UDF)
大数据·sql·flink
失心疯_20233 小时前
Mysql_使用简介
数据库·sql·mysql·关系型数据库·ddl·dml·mysql教程
小威要向诸佬学习呀3 小时前
MySQL中的LIMIT与ORDER BY关键字详解
数据库·mysql