关系数据库Oracle、MySQL、PostgreSQL的SQL语法的差异(整理中)
程序员文章站
2022-03-15 19:36:20
...
1、SQL结尾的分号问题
-
MySQL数据库的SQL允许使用英文分号结尾
-
Oracle数据库的SQL不允许使用英文分号结尾
-
PostgreSQL数据库的SQL不允许使用英文分号结尾
2、SQL中的引号问题
-
MySQL数据库的SQL中使用单撇号`
-
Oracle数据库的SQL中使用双引号”
-
PostgreSQL数据库的SQL中使用双引号”
3、批量插入insert问题
- MySQL数据库的SQL中insert 支持多个values批量插入数据
-- ----------------------------
-- Table structure for stu
-- ----------------------------
DROP TABLE IF EXISTS `stu`;
CREATE TABLE `stu` (
`id` varchar(128) NOT NULL,
`name` varchar(255) NOT NULL,
`sex` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Records of stu
-- ----------------------------
INSERT INTO `stu`(`id`,`name`,`sex`) VALUES
('tangqi', '唐七', 'girl'),
('wangwu', '王五', 'boy'),
('zhangsan', '张三', 'boy');
- Oracle数据库的SQL中insert 支持多个values批量插入数据
-- ----------------------------
-- Table structure for stu
-- ----------------------------
DROP TABLE "stu";
CREATE TABLE "stu" (
"id" varchar2(128) NOT NULL,
"name" varchar2(255) NOT NULL,
"sex" varchar2(255) DEFAULT NULL,
PRIMARY KEY ("id")
)
-- ----------------------------
-- Records of stu
-- ----------------------------
INSERT ALL
INTO "stu"("id","name","sex") VALUES ('tangqi', '唐七', 'girl')
INTO "stu"("id","name","sex") VALUES ('wangwu', '王五', 'boy')
INTO "stu"("id","name","sex") VALUES ('zhangsan', '张三', 'boy')
SELECT * FROM dual
注意:oracle中drop表时不支持IF EXISTS关键词
- PostgreSQL数据库的SQL中insert 支持多个values批量插入数据
-- ----------------------------
-- Table structure for stu
-- ----------------------------
DROP TABLE "stu";
CREATE TABLE "stu" (
"id" varchar(128) NOT NULL,
"name" varchar(255) NOT NULL,
"sex" varchar(255) DEFAULT NULL,
PRIMARY KEY ("id")
)
-- ----------------------------
-- Records of stu
-- ----------------------------
INSERT INTO "stu"("id","name","sex") VALUES
('tangqi', '唐七', 'girl'),
('wangwu', '王五', 'boy'),
('zhangsan', '张三', 'boy')
总结:PostgreSQL与MySQL的批量insert语句很相似
4、分页查询问题
- MySQL数据库的分页查询SQL
使用LIMIT 关键词分页:
SELECT * from `stu` LIMIT 0,1;
SELECT * from `stu` LIMIT 1;
- Oracle数据库的分页查询SQL
(1) 在Oracle11g及其一下版本使用子查询的方式分页:
SELECT
*
FROM
(
SELECT
ROWNUM AS rowno,
T.*
FROM
"stu" T
where ROWNUM <2
) table_alias
WHERE
table_alias.rowno >= 1
(2) 在Oracle12c及其以上版本支持使用FETCH NEXT / ROWS ONLY 关键词方式来分页。
- PostgreSQL数据库的分页查询SQL
使用标准的LIMIT OFFSET关键词分页:
SELECT * from "stu" LIMIT 1 OFFSET 0
5、自增字段问题
- MySQL数据库的自增字段
(1)在建表时,对于整型字段,可以使用AUTO_INCREMENT关键词配置为自增字段;
(2)MySQL数据库中的一个表最多有一个自增的字段
- Oracle数据库的自增字段
与PostgreSQL类似.
- PostgreSQL数据库的自增字段
(1)创建表时,如果使用serial类型,默认生成的自增序列名为:’表名’ + ’‘ + ’字段名’ + ’‘ + ’seq’;
(2)PostgreSQL数据库的一张表中支持存在多个自增字段,在使用last_insert_id()时需要制定序列名;
(3)可以单纯创建序列,在建表语句中自增的字段指定使用的序列名称。示例如下:
CREATE SEQUENCE gys.mytable_myid_seq
INCREMENT 1
START 1
MINVALUE 1
MAXVALUE 99999999
CACHE 1;
上一篇: 根据数据库表结构自动生成类结构
下一篇: 花茶有几种哪种花茶最好?花茶怎么保存?
推荐阅读
-
Oracle数据库的结构和数据迁移到PostgreSql数据库(MYSQL,SQL Server相似)
-
查询数据库中某张用户表的列数(Oracle和Mysql)Sql
-
浅谈从Oracle数据库中取出10条数据的Select语句与SQL Server、MySQL的区别
-
关系数据库Oracle、MySQL、PostgreSQL的SQL语法的差异(整理中)
-
Java连接数据库的综合类class;MSSQL(SQL Server )、Oracle、MySQL、PostgreSQL、SAP、SyBase 各种数据库的JDBC驱动下载及连接
-
Oracle/MySQL/PostgreSQL数据库获取表的主键及字段信息(整理)
-
浅谈从Oracle数据库中取出10条数据的Select语句与SQL Server、MySQL的区别
-
Oracle数据库的结构和数据迁移到PostgreSql数据库(MYSQL,SQL Server相似)
-
使用sql获取各数据库(MySQL、PostgreSQL、Oracle、MsSQL)的表结构