Java SQL中MySQL和SQLite的差异
我正在编写一个java应用程序,它同时使用SQLite和MySQL以及JDBC 这些数据库的SQL有什么不同吗?我可以对SQLite和MySQL使用相同的查询吗?或者是否有任何特定于数据库的东西,在另一个数据库上不起作用 由于我只使用了MySQL,所以我对SQLite知之甚少如果你坚持下去,你会没事的 MySQL和SQLite都缺少一些SQL92特性(例如,完全外部连接)。 MySQL既有右连接,也有左连接,SQLite只有左连接。SQLite不支持外键约束,MySQL和MyISAM表也不支持。Java SQL中MySQL和SQLite的差异,java,mysql,sqlite,jdbc,Java,Mysql,Sqlite,Jdbc,我正在编写一个java应用程序,它同时使用SQLite和MySQL以及JDBC 这些数据库的SQL有什么不同吗?我可以对SQLite和MySQL使用相同的查询吗?或者是否有任何特定于数据库的东西,在另一个数据库上不起作用 由于我只使用了MySQL,所以我对SQLite知之甚少如果你坚持下去,你会没事的 MySQL和SQLite都缺少一些SQL92特性(例如,完全外部连接)。 MySQL既有右连接,也有左连接,SQLite只有左连接。SQLite不支持外键约束,MySQL和MyISAM表也不支持。
SQLite当然没有GRANT/REVOKE,因为权限系统是基于底层操作系统的文件权限的。一个很大的区别在于。SQLite允许您在任何列中放置任何类型的数据。但是,如果可能的话,它会将数据强制转换为声明的列类型。我正在做类似的事情。除了我提到的一些差异之外,还有一些差异:
- 在带有Xerial JDBC驱动程序的SQLite3的较新版本中,外键确实是受支持的。SQLite支持内联外键约束定义:
CREATE TABLE Blah(异化整数引用OtherTable(id))
MySQL(使用InnoDB)将接受相同的语法,但实际上不会强制执行约束,除非您使用一个单独的外键子句来显式命名外键表和键列:
创建表Blah(异化整数,外键异化引用OtherTable(id)) - SQLite JDBC驱动程序的旧版本不支持语句;修正了较新的静电驱动程序
- 自动递增键的语法不同;SQLite:(id整数主键ASC,…);MySQL:(id整数主键自动递增,…)
- SQLite接受n向逗号分隔联接:
从A、B、C上选择*(A.x=B.y,B.y=C.z);
MySQL没有;以下两方面的工作:
从A.x=B.y上的内部连接B中选择*在B.y=C.z上选择内部连接C - 关于类型差异,SQLite的JDBC驱动程序的一个相关问题是,同一列可以通过ResultSet.getObject(.)生成不同的类型;例如,一个整数或一个长整数取决于所包含数字的大小
- SQLite中的自动递增键必须声明为整型;在MySQL中,任何数字整数类型都有效