SQLite和MySQL都是常用的关系型数据库管理系统(RDBMS),它们的SQL写法在很多基本操作上是相似的,但也存在一些差异。以下是一些主要的不同点及相应的SQL语法示例。
数据类型SQLiteINTEGERREALTEXTBLOBMySQLINTVARCHARTEXTBLOBFLOATDOUBLEDATETIME示例:
SQLite:
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER,
balance REAL
); MySQL:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
age INT,
balance DOUBLE
); 自增字段SQLite在SQLite中,自增字段使用INTEGER PRIMARY KEY AUTOINCREMENT。
MySQL在MySQL中,自增字段使用AUTO_INCREMENT。
示例:
SQLite:
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
); MySQL:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL
); 日期和时间SQLiteSQLite没有单独的DATETIME类型,可以使用TEXT、REAL或INTEGER来存储日期和时间。
MySQLMySQL有专门的日期和时间类型,如DATE、DATETIME、TIMESTAMP等。
示例:
SQLite:
CREATE TABLE events (
id INTEGER PRIMARY KEY,
event_date TEXT
); MySQL:
CREATE TABLE events (
id INT PRIMARY KEY AUTO_INCREMENT,
event_date DATETIME
); 限制和分页SQLite分页使用LIMIT和OFFSET。
MySQLMySQL使用相同的LIMIT和OFFSET语法,但有些MySQL版本也支持LIMIT的另一种写法。
示例:
SQLite:
SELECT * FROM users LIMIT 10 OFFSET 20;
MySQL:
SELECT * FROM users LIMIT 20, 10;插入或替换数据SQLite
SQLite提供INSERT OR REPLACE语法。
MySQLMySQL使用REPLACE INTO或者INSERT ... ON DUPLICATE KEY UPDATE。
示例:
SQLite:
INSERT OR REPLACE INTO users (id, name) VALUES (1, 'John Doe');
MySQL:
REPLACE INTO users (id, name) VALUES (1, 'John Doe'); -- 或者 INSERT INTO users (id, name) VALUES (1, 'John Doe') ON DUPLICATE KEY UPDATE name='John Doe';事务处理SQLite
SQLite支持标准的事务处理语法。
MySQLMySQL也支持标准的事务处理语法,但在某些引擎(如MyISAM)中不支持事务。
示例:
SQLite:
BEGIN TRANSACTION;
INSERT INTO users (name) VALUES ('Alice');
INSERT INTO users (name) VALUES ('Bob');
COMMIT; MySQL:
START TRANSACTION;
INSERT INTO users (name) VALUES ('Alice');
INSERT INTO users (name) VALUES ('Bob');
COMMIT; 字符串拼接SQLite使用||操作符进行字符串拼接。
MySQL使用CONCAT函数。
示例:
SQLite:
SELECT 'Hello' || ' ' || 'World';
MySQL:
SELECT CONCAT('Hello', ' ', 'World'); 总结虽然SQLite和MySQL在许多基本的SQL操作上是相似的,但它们在数据类型、自增字段、日期和时间处理、分页、插入或替换数据、事务处理、字符串拼接等方面有一些显著的差异。了解这些差异可以帮助你在不同的数据库环境中正确编写和转换SQL语句。
网友回复


